LINUX.ORG.RU

Hyper Threading в виртуальной машине

 , ,


1

1

Как правильно настраивать виртуалку, чтобы процессор пробрасывался с учётом HT, т.е. потоки, принадлежащие одному ядру, виделись гостем как потоки, принадлежащие одному ядру?
Даже если я выставляю в virt-manager аналогичную топологию (1 сокет - 4 ядра - 2 потока), при этом смотрю virsh vcpuinfo, видно, что виртуальные «процессоры» постоянно соответствуют разным номерам реальных.

Как это исправить, и нужно ли исправлять вообще? Есть подозрение, что шедулер в гостевой системе может не иметь правильной информации о реальном положении вещей и распараллеливать между «процессорами», которые являются потоками одного ядра реального, когда остальные (реальные) ядра тоже свободны.
Какие бенчмарки/тесты есть, чтобы наверняка проверить, корректно ли работает HT? (для windows желательно)

Ответ на: комментарий от Novel

Если сделать явно: 0-0, 1-1, и т.д., а будет ли это оптимально?
Например, если на хосте что-то делается (ведро конпеляется), оно займёт сначала первые потоки, и лучше, чтобы виртуалка в это время видела в качестве первого какой-то другой? Или даже несколько виртуальных потоков на один реальный.
Главное - чтобы при наличии ресурсов потоки на одном ядре и виделись как потоки на одном ядре. Как это проверить?

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

<выставляю в топологии> 2 потока
Если сделать явно: 0-0, 1-1, и т.д., а будет ли это оптимально?

Да.

Например, если на хосте что-то делается (ведро конпеляется), оно займёт сначала первые потоки, и лучше, чтобы виртуалка в это время видела в качестве первого какой-то другой?

Зачем? Компилятор перелезет на другой и все будет ОК, не?

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

Зачем? Компилятор перелезет на другой и все будет ОК, не?

Он сам поймёт, что надо перелазить на другой?
А если поток не загружен виртуалкой в данный момент (или загружен не на 100%), но запустится потом?

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

Если сделать явно: 0-0, 1-1, и т.д., а будет ли это оптимально?

не знаю, я такие конфигурации делал только из интереса (ну, кроме нумы, но с ней понятно более или менее), но не бенчмаркал.

я думаю, что экспериментировать и бенчмаркать — самый верный вариант.

плюс, скорее всего каким-нибудь cset'ом можно сделать так, чтоб хост на ненужные ядра для виртуалок не лазал.

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

плюс, скорее всего каким-нибудь cset'ом можно сделать так, чтоб хост на ненужные ядра для виртуалок не лазал.

о, ну все, если и после этого ТСа не отпустит паранойя, то это уже к психологам.

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

постоянно прыгает

В этом и дело, если сделать pinning, потоки будут отображаться однозначно. А виртуалка же сама не знает о том, что что-то запущено на хостовой системе, чтобы переносить свои потоки.

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

поток не привязывается к ядру при рождении, а постоянно прыгает между ними?

Докажи своё утверждение. А то мне кажется, что так бывает не всегда.

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

Как насчет https://www.kernel.org/doc/Documentation/scheduler/sched-domains.txt, начиная с

Balancing within a sched domain occurs between [CPU] groups

?

Затрудняюсь дать внятную краткую выжимку, но

In kernel/sched/core.c, trigger_load_balance() is run periodically on each CPU through scheduler_tick().

... it runs load_balance() on that domain.

Initially, load_balance() finds the busiest group in the current sched domain.

... and starts moving tasks from it to our runqueue.

очень похоже на периодическую балансировку между CPU, обеспечивающую мое «постоянно прыгает между ними».

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от anonymous

Насколько я знаю — да, и Linux на это чихал, ибо лучше сбросить L2, чем не мигрировать. Однако за истинность и свежесть не ручаюсь.

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

Какие бенчмарки проверяют это? (многопоточность с учётом HT)

у тебя академический или практический интерес?

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

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

Пассиба, я знаю. У нас тут о поведении по умолчанию речь.

Не нашёл упоминания «по умолчанию» во фразе «Ты вообще в курсе, что поток не привязывается к ядру при рождении, а постоянно прыгает между ними?».

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

Не нашёл упоминания «по умолчанию»

man «по умолчанию».

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