0

我正在尝试将用 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_create正在尝试制作没有"cpuset."前缀的伪文件。我在 Ubuntu 16.04 上使用 strace 执行了相同的程序,它可以正常工作,并得到以下输出(突出显示的行): 正确的输出

基于此,我有以下问题:

  1. 为什么在 Ubuntu 16.04 上cpuset_create打开创建 cpuset 的路径/sys/fs/cgroup/cpuset/,而在 Ubuntu 20.04 上却试图在 Ubuntu 上创建它/dev/cpuset/
  2. 为什么 Ubuntu 20.04openat的 strace 输出使用 Ubuntu 16.04 的 strace 输出open
  3. 为什么在 Ubuntu 20.04 上创建伪文件时cpuset_create省略前缀?"cpuset."

任何帮助是极大的赞赏。提前致谢。

4

0 回答 0