标签: cpuset

使用Cpuset将内核模块隔离到特定的核心

从用户空间我们可以使用cpuset实际隔离系统中的特定核心,并只执行一个特定的核心进程.

我正在尝试使用内核模块做同样的事情.所以我希望模块在一个孤立的核心中执行.换句话说:我如何cpuset在内核模块中使用?*

在我的内核模块中使用linux/cpuset.h不起作用.所以,我有一个这样的模块:

#include <linux/module.h>
#include <linux/cpuset.h>

...
#ifdef CONFIG_CPUSETS
    printk(KERN_INFO, "cpusets is enabled!");
#endif
cpuset_init(); // this function is declared in cpuset.h
...
Run Code Online (Sandbox Code Playgroud)

尝试加载此模块时,我收到dmesg以下消息cpusets is enabled!.但我也收到了这条消息Unknown symbol cpu_init (err 0).

类似地,我尝试使用sched_setaffinityfrom linux/sched.h来将所有正在运行的procceses移动到特定的核心,然后将我的模块运行到一个隔离的核心.我得到了相同的错误消息:Unknown symbol sched_setaffinity (err 0).我想我得到了"未知符号",因为这些函数EXPORT_SYMBOL在内核中没有.所以我去尝试调用sys_sched_setaffinity 系统调用(基于这个问题),但又得到了这个消息:Unknown symbol sys_sched_setaffinity (err 0)!

此外,我不是在寻找一个使用的解决方案isolcpus,它在启动时设置.我想加载模块,然后发生隔离.

  • (更确切地说,我希望它的内核线程在隔离的内核中执行.我知道我可以使用affinity将线程绑定到特定的内核,但这并不能保证内核会被运行在其上的其他进程隔离. )

linux linux-device-driver linux-kernel cpuset

19
推荐指数
1
解决办法
4293
查看次数

echo $$> tasks在尝试使用cpuset时给出"设备上没有剩余空间"

我尝试了cpuset(7)手册中的示例并创建了一个cpuset Charlie.在Ubuntu 14.4 LTS和SLES 12上,我在尝试将当前进程放入cpuset时收到以下错误:

/dev/cpuset/Charlie# echo $$ > tasks

bash: echo: write error: No space left on device

有帮助吗?

cpu cgroups cpuset

5
推荐指数
1
解决办法
3700
查看次数

docker run --cpuset 没有任何效果

我通过将 cpuset 指定为 1 个内核来启动一个 docker 容器:

docker run --cpuset-cpus="0"...
Run Code Online (Sandbox Code Playgroud)

第二个通过将 cpuset 指定为 4 个内核:

docker run --cpuset-cpus="0-3"...
Run Code Online (Sandbox Code Playgroud)

我在每个容器内启动了一个加载进程,并监控了两个容器的 CPU 消耗。

加载过程如下:

ffmpeg input > output
Run Code Online (Sandbox Code Playgroud)

我观察到两个容器之间的执行时间没有改善(没有加速)。

你知道为什么没有改进吗?具有 4 个核心的容器应该比 1 个核心容器运行得更快,对吗?

注意:对 1core 容器使用 top

CPU0%=100%
CPU1%=0
CPU2%=0
CPU3%=0
Run Code Online (Sandbox Code Playgroud)

使用 top 作为 4core 容器,docker 随机选择 4 个内核之一来启动进程。有时它会影响每个核心的 30%

CPU0%=0                  CPU0%=30%                   CPU0%=0
CPU1%=100%       or      CPU0%=30%            or     CPU0%=0
CPU2%=0                  CPU0%=30%                   CPU0%=0
CPU3%=0                  CPU0%=30%                   CPU0%=100%
Run Code Online (Sandbox Code Playgroud)

multicore resource-management cpu-usage docker cpuset

5
推荐指数
1
解决办法
4924
查看次数