Я пытаюсь запустить многопоточные тесты на наборе изолированных процессоров. Короче говоря, я сначала пытался с isolcpus
и taskset
, но ударил проблемы . Сейчас я играю с cgroups / csets.
Я думаю, что «простой» cset shield
вариант использования должен работать хорошо. У меня 4 ядра, поэтому я хотел бы использовать ядра 1-3 для бенчмаркинга (я также настроил эти ядра в режим адаптивных тиков), тогда ядро 0 можно использовать для всего остального.
После урока здесь , это должно быть простым , как:
$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running
Итак, теперь у нас есть «щит», который изолирован (пользовательский cset), а ядро 0 предназначено для всего остального (системный cset).
Хорошо, пока выглядит хорошо. Теперь давайте посмотрим на htop
. Все процессы должны быть перенесены на CPU 0:
А? Некоторые процессы показаны работающими на экранированных ядрах. Чтобы исключить случай, когда htop имеет ошибку, я также попытался использовать, taskset
чтобы проверить маску аффинности процесса, показанного как находящийся в щите.
Может быть, эти задачи были неподвижны? Давайте подключим произвольный процесс, показанный как выполняющийся на CPU3 (который должен быть в экране), htop
и посмотрим, появится ли он в системной группе в соответствии с cset
:
$ cset shield -u -v | grep 864
root 864 1 Soth [gmain]
vext01 2412 2274 Soth grep 864
Да, это работает в системе cgroup в соответствии с cset
. Так htop
и cset
не согласен.
Так что здесь происходит? Кому я доверяю: сродство процессора ( htop
/ taskset
) или cset
?
Я подозреваю, что вы не должны использовать cset
и сходство вместе. Возможно, щит работает нормально, и я должен игнорировать маски сродства и htop
вывод. В любом случае, я нахожу это запутанным. Может кто-нибудь пролить свет?
numactl
и cgconfig
и cgrules
/ cgred
рационализировать , что вы делаете. Они могут быть доступны для Debian с некоторой работой.