我正在尝试将用 C 编写的项目从 Ubuntu 16.04 移植到 Ubuntu 20.04。该项目严重依赖<cpuset.h>
共享库。当我尝试cpuset_create
在 Ubuntu 20.04 上使用时出现问题。
该函数cpuset_create
在其中创建一个/dev/cpuset/
具有指定名称的新目录。该目录包含cpuset 的相关伪文件,所有这些伪文件都以前缀'cpuset.' 开头。以下代码段显示了cpuset_create
在 Ubuntu 16.04 上使用创建 cpuset后的目录内容AFF_1000
。
$ ll /dev/cpuset/AFF_1000/
total 0
drwxr-xr-x 2 root root 0 Mar 12 11:41 ./
drwxrwxr-x 4 shivam root 0 Mar 12 11:38 ../
-rw-r--r-- 1 root root 0 Mar 12 11:42 cgroup.clone_children
-rw-r--r-- 1 root root 0 Mar 12 11:42 cgroup.procs
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.cpu_exclusive
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.cpus
-r--r--r-- 1 root root 0 Mar 12 11:42 cpuset.effective_cpus
-r--r--r-- 1 root root 0 Mar 12 11:42 cpuset.effective_mems
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.mem_exclusive
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.mem_hardwall
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.memory_migrate
-r--r--r-- 1 root root 0 Mar 12 11:42 cpuset.memory_pressure
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.memory_spread_page
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.memory_spread_slab
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.mems
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.sched_load_balance
-rw-r--r-- 1 root root 0 Mar 12 11:42 cpuset.sched_relax_domain_level
-rw-r--r-- 1 root root 0 Mar 12 11:42 notify_on_release
-rw-r--r-- 1 root root 0 Mar 12 11:42 tasks
但是,当我尝试在 Ubuntu 20.04 上使用相同的功能时,它会失败并返回错误代码-1
. 我使用strace调试代码,发现如下问题(高亮行):
似乎cpuset_create
正在尝试制作没有"cpuset."
前缀的伪文件。我在 Ubuntu 16.04 上使用 strace 执行了相同的程序,它可以正常工作,并得到以下输出(突出显示的行):
基于此,我有以下问题:
- 为什么在 Ubuntu 16.04 上
cpuset_create
打开创建 cpuset 的路径/sys/fs/cgroup/cpuset/
,而在 Ubuntu 20.04 上却试图在 Ubuntu 上创建它/dev/cpuset/
? - 为什么 Ubuntu 20.04
openat
的 strace 输出使用 Ubuntu 16.04 的 strace 输出open
- 为什么在 Ubuntu 20.04 上创建伪文件时
cpuset_create
省略前缀?"cpuset."
任何帮助是极大的赞赏。提前致谢。