2

我需要问这个问题只是为了仔细检查答案。

命令的顺序重要吗?例如:

是这个命令吗

 taskset 0x2 time echo "foo"

等于

time taskset 0x2 echo "foo"

?

我需要知道任务集后面的所有命令是否具有相同的 CPU 亲和性,或者只是紧随其后的命令。

4

2 回答 2

2

我需要知道紧随其后的所有命令taskset是否具有相同的 CPU 亲和性,或者只是紧随其后的命令。

这是一个小实验:

启动两个BG任务

$ > taskset 0x2 sleep 50 & sleep 60 &

获取他们的 PID

$ > ps
  PID TTY          TIME CMD
18562 pts/81   00:00:00 bash
20750 pts/81   00:00:00 sleep
20751 pts/81   00:00:00 sleep
20752 pts/81   00:00:00 ps

获取已知 PID 的 CPU 亲和性:

$ > taskset -p 20750
pid 20750's current affinity mask: 2
$ > taskset -p 20751
pid 20751's current affinity mask: 3f

因此,似乎只为第一个进程设置了 CPU 亲和性。


更新(试图解释以下行为):

  1. /usr/bin/time taskset 0x2 sleep 100000=> 只sleep获得亲和力掩码2 (有点预期!)
  2. taskset 0x2 /usr/bin/time sleep 100000=> 两者timesleep获得亲和力掩码2 (需要澄清!)

在第二种情况下,让我们调用ps -f来获取每个进程的 PPID(父 PID):

$> taskset 0x2 /usr/bin/time sleep 60 &
[1] 5942
$> ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
user      5942  9698  0 18:19 pts/261  00:00:00 /usr/bin/time sleep 60
user      5943  5942  0 18:19 pts/261  00:00:00 sleep 60
user      5944  9698  0 18:19 pts/261  00:00:00 ps -f
user      9509  9508  0 16:19 pts/261  00:00:00 -bash
user      9698  9509  0 16:20 pts/261  00:00:00 bash
$> taskset -p 5942
pid 5942's current affinity mask: 2
$> taskset -p 5943
pid 5943's current affinity mask: 2

可以看出,sleep's PPID(5942)对应/usr/bin/time''s PID(5942)。IOWsleep(has be fork from )的子进程/usr/bin/time。因为任何子进程都继承了父进程的配置,所以sleep/usr/bin/time.

于 2015-06-11T10:01:39.827 回答
1

你似乎在这里问了两个不同的问题——“它们是等价的吗?” 和“是否继承了 CPU 亲和性?”。

首先,您列出的两个命令是等价的。首先:

taskset 0x2 time echo "foo"

假设PATH我目前使用的主机具有类似的设置,相当于:

/bin/taskset 0x2 /usr/bin/time /bin/echo "foo"

这会产生一个像这样的进程树:

/bin/taskset
    |
    \- /usr/bin/time
            |
            \- /bin/echo

第二:

time taskset 0x2 echo "foo"

相当于由builtin/bin/taskset 0x2 /bin/echo "foo"包装,产生这个进程树:bashtime

/bin/taskset
    |
    \- /bin/echo

在这种情况下,只有两个外部进程 - 该time部分由内部处理bash而不是调用/usr/bin/time.

要回答您的第二个问题,Linux 中继承了 CPU 亲和性,因此您的第一个示例将同时绑定/usr/bin/time和绑定/bin/echo到指定的 CPU 集。在第二个例子中,由于time是内置的 shell,它会受到任何在bash其自身上设置的 CPU 关联性的影响,而不是受taskset当前命令行中的 影响。

于 2015-06-16T18:51:02.623 回答