LINUX.ORG.RU

Изоляция CPU

 , , ,


2

1

Когда-то у меня был тред с вопросом, как сделать виртуальную машину реального времени.
Так вот, это можно решить, как и предполагалось, изоляцией CPU, на которых крутятся виртуальные процессоры, от других процессов.
Тогда никто так и не ответил, но в ядре есть параметр isolcpus, который это и делает. (про это сейчас написано в статье про VFIO arch wiki)
Проблема в том, что это параметр ядра, и чтобы его изменить, надо перезагружаться.
Вопросы теперь следующие.
Можно ли как-то регулировать этот параметр в рантайме? (подозреваю, что таки нет)
Чем это отличается от taskset (если пройти по всем PID и указать не использовать нужные ядра)?
Есть информация, что этот вариант хуже, чем isolcpus, но чем именно (и насколько это актуально)?

(про isolcpus) This option is the preferred way to isolate CPUs. The alternative, manually setting the CPU mask of all tasks in the system, can cause problems and suboptimal load balancer performance

Как работает cpuset в cgroups? Например, если глобально задаю в rc.conf: rc_cgroup_cpuset="cpuset.cpus 0-3 cpuset.mems 0" то все процессы по умолчанию тоже используют только эти ядра.
Я так понимаю, CPUAffinity это то же самое (цгруппы) в сустемд? В ред хат есть такое

Currently, systemd CPUAffinity does not provide sufficient isolation

И ссылка, которая требует авторизации - https://bugzilla.redhat.com/show_bug.cgi?id=1497182
О чём там написано?

Там в KB в комменте на человечьем написано: юзать tuned-cpu-partitioning, у остального проблемы.

Чем это отличается от taskset (если пройти по всем PID и указать не использовать нужные ядра)?

Тем, что это не бред, ну.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Тем, что это не бред, ну

Ну бред-не бред, но можно сделать что-то типа for i in $(ls /proc); do taskset -p f $i; done, а потом, когда не надо, -p ffff $i.
А то надо перезагружаться

юзать tuned-cpu-partitioning

Что это и как оно внутри сделано? В смысле, как это сделать без ред хата и системд?

TheAnonymous ★★★★★
() автор топика

Прерывания какие нибудь и тд могут исполняться на твоих ядрах, если ты просто маску для юзерспейса выставлять будешь, ну.

anonymous
()
Ответ на: комментарий от anonymous

А если наоборот? В ядре указать isolcpus, а во всех юзерспейсных процессах, когда виртуалка не нужна, выставлять маску, чтобы разрешить все процессоры. Какие подводные камни?

TheAnonymous ★★★★★
() автор топика
Ответ на: комментарий от TheAnonymous

Ну бред-не бред, но можно сделать что-то типа for i in $(ls /proc); do taskset -p f $i; done

Бред. У тебя новых процессов что, не рождается?

Что это и как оно внутри сделано?

без понятия

В смысле, как это сделать без ред хата и системд?

без понятия^2

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Если задавать через cgroup, новые процессы же будут с той же маской

TheAnonymous ★★★★★
() автор топика
Ответ на: комментарий от TheAnonymous

In the isolated case

case

т.е. это всё может быть, а может и быть и не в дополнение к ядерному параметру. в зависимости от того, пропишешь ты isolcpus или нет.

t184256 ★★★★★
()

виртуальную машину реального времени.

А разве запуск внутри KVM вообще может гарантировать какой-то realtime?

devl547 ★★★★★
()
Ответ на: комментарий от TheAnonymous

Что это и как оно внутри сделано? В смысле, как это сделать без ред хата и системд?

Через sched_domain там.

post-factum ★★★★★
()
Ответ на: комментарий от t184256

С заданием cgroup маска у всех юзерспейсных процессов задаётся. Но когда на хосте запускаешь бенчмарк (7z b), небольшие заикания звука в виртуалке всё-таки есть.
Хотя и гораздо меньше и не постоянно, как раньше

TheAnonymous ★★★★★
() автор топика
Ответ на: удаленный комментарий

Бывают кривые драйвера звуковухи, и тогда заикается даже без нагрузки. Ещё, говорят, пульсаудио может косячить на ровном месте.

anonymous
()
Ответ на: комментарий от anonymous

Звук заикается в виртуальной машине.
Там шиндошс и звуковуха туда проброшена целиком (через vfio-pci)

TheAnonymous ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Да нет же, если нет никакой нагрузки на хосте, то в виртуалке всё нормально

TheAnonymous ★★★★★
() автор топика

Siemens jailhouse возьми, проблему решили за тебя.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от TheAnonymous

Тогда харэ косить и фикси свою настоящую проблему. Безо всяких пиннингов и реалтаймов не должно икать.

t184256 ★★★★★
()

виртуальную машину реального времени.

ещё падика, жёсткого реального времени?)))

darkenshvein ★★★★★
()
Ответ на: комментарий от TheAnonymous

Тут два варианта.

Если тебе нужен звук, то то, что ты звук как-то не так выводишь. Пробуй другие способы: эмулированная звуковуха, GPU пробрось.

Если тебе нужно, чтобы именно твой существующий сетап починили, то перестать путать ЛОР с багтрекером и писать багрепорт, ну.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

С выводом звука всё в порядке, просто заикание звука свидетельствует о подтормаживании в виртуальной машине вообще.
И да, при задании cpuset тормозов ощутимо меньше, но всё равно не идеально при нагрузке на хост

TheAnonymous ★★★★★
() автор топика
Ответ на: комментарий от TheAnonymous

просто заикание звука свидетельствует о подтормаживании в виртуальной машине вообще

обоснование? А то че-то не у всех икает

t184256 ★★★★★
()
Ответ на: комментарий от t184256

В ядро? В qemu? В microsoft?
И откуда это «Не должна и при 100% // КО» - мне вообще не очевидно. И судя по тому, что isolcpus таки советуют, проблема известная.

Алсо, вроде помогает включение NO_HZ_FULL в ядре (и nohz_full= в параметрах ядра), с выставлением cpuset без ядерного isolcpus.
В LatencyMon в винде теперь задержки при запуске бенчмарка на хосте такие же, как и без него (бенчмарка).

Я так понимаю, этот nohz_full тоже динамически не настраивается?

TheAnonymous ★★★★★
() автор топика
Ответ на: комментарий от TheAnonymous

В QEMU, ребятам, отвечающим за VFIO. 95%, что УНихВР и без твоего репорта они ниче чинить не будут.

t184256 ★★★★★
()

Вот. В oVirt это тоже есть из коробки.

i586 ★★★★★
()
28 мая 2021 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.