linux-在所有内核上设置控制寄存器
收藏

提问

我需要在给定系统的所有内核上启用cr4 bit 8(PCE).我目前有一个工作模块,该模块在加载模块时将其设置在运行的核心上.我被困在这里,还没有找到太多有关如何并行化以在所有内核上运行的文档:

1)似乎卸载并不总是发生在加载发生的核心上,所以我无法正确清理

2)我无法找到任何方法来强制在特定内核上执行模块初始化-如果可以的话,我可以简单地让每个内核分别调用一个模块来设置所有内核.似乎没有可用于模块的sched_setaffinity等效项.

是否有任何方法可以通过并行化或在所有内核上迭代来强制该模块在所有内核上运行?我不能修改内核本身,也不能在启动时加载模块,所以我不能只更改寄存器的初始设置.

感谢您提供任何提示,在这里我想解决这个问题真是疯狂!

最佳答案

弄清楚了-smp_call_function()在系统的所有内核上调用一个函数.要获得一个可以显示此结果的搜索结果非常棘手(很少/没有文档):-/

这非常有效,您可以通过在调用的函数中打印smp_processor_id()来验证每个内核都在运行该代码.

编辑:此函数仅调用其他内核,因此您仍然必须分别调用一次函数以获取模块当前正在运行的内核!

    公众号
    关注公众号订阅更多技术干货!