问题描述
我正在尝试将用 C 编写的项目从 Ubuntu 16.04 移植到 Ubuntu 20.04。该项目严重依赖于 <cpuset.h>
共享库。当我尝试在 Ubuntu 20.04 上使用 cpuset_create
时出现问题。
函数 cpuset_create
在 /dev/cpuset/
中创建一个具有指定名称的新目录。该目录包含 cpuset 的相关伪文件,所有这些文件都以前缀“cpuset.”开头。以下代码段显示了在 Ubuntu 16.04 上使用 cpuset_create
创建 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 执行了相同的程序,它可以正常工作,并得到以下输出(突出显示的行):
基于此,我有以下问题:
- 为什么
cpuset_create
打开路径/sys/fs/cgroup/cpuset/
以在 Ubuntu 16.04 上创建 cpuset,而在 Ubuntu 20.04 上它尝试在/dev/cpuset/
创建它? - 为什么 Ubuntu 20.04 的 strace 输出使用
openat
而 Ubuntu 16.04 的 strace 输出使用open
- 为什么 Ubuntu 20.04 上的
cpuset_create
在创建伪文件时省略了"cpuset."
前缀?
非常感谢任何帮助。提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)