Я намагаюся запустити багатопотокові орієнтири на наборі ізольованих процесорів. Щоб скоротити довгу історію, я спочатку намагався 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), а core 0 - для всього іншого (системний комплект).
Добре, поки добре виглядає. Тепер давайте розглянемо htop
. Усі процеси повинні бути перенесені на процесор 0:
Так? Деякі процеси показані як запущені на екранованих ядрах. Щоб виключити випадок помилки у htop, я також спробував використати taskset
для перевірки маски спорідненості процес, показаний як на екрані.
Можливо, ці завдання були непорушними? Давайте вирвемо довільний процес, показаний як запущений на CPU3 (який повинен знаходитись в щиті), htop
і подивимося, чи відображається він у системній групі відповідно до cset
:
$ cset shield -u -v | grep 864
root 864 1 Soth [gmain]
vext01 2412 2274 Soth grep 864
Так, це працює в системній групі відповідно до cset
. Так htop
і cset
не згоден.
То що тут відбувається? Кому я довіряю: CPU афіні ( htop
/ taskset
) або cset
?
Я підозрюю, що ви не повинні використовувати cset
та спорідненість разом. Можливо, щит працює чудово, і я повинен ігнорувати маски спорідненості та htop
вихід. Так чи інакше, я вважаю це заплутаним. Може хтось пролити трохи світла?
numactl
і cgconfig
та cgrules
/ cgred
раціоналізувати , що ви робите. Вони можуть бути доступні для Debian з деякими роботами.