В небольшой компании, занимающейся разработкой программного обеспечения, мы виртуализируем наши серверы сборки (с помощью VirtualBox), чтобы их можно было легко создавать резервные копии, делать снимки и т.п. Недавно мы купили новый сервер на AMD Epyc 7351P, который имеет 16 ядер (32 с гиперпоточностью). Мы обнаружили, что назначение любой данной виртуальной машине более 4 ядер ЦП абсолютно снижает производительность: я предполагаю, что это связано с тем, что Epyc на самом деле представляет собой архитектуру NUMA 4x4core под капотом, поэтому, если вы используете более 4 физических ядер, гость начинает работать объем памяти.
Есть ли способ заставить VirtualBox открывать гостю конфигурацию NUMA? Если нет, то какие другие решения виртуализации могут работать в этом случае? В идеале я бы хотел иметь возможность запускать виртуальную машину, используя все физические ядра, без слишком большого снижения производительности - вы ожидаете потерять некоторую производительность при виртуализации, но 20-ядерная виртуальная машина Virtualbox на этом сервере работает на примерно 10% от скорости 4-ядерного, что смешно.
Не переоценивайте ЦП. То есть по умолчанию не назначать общее количество гостевых процессоров больше, чем количество физических ядер. Производительность будет ухудшаться, иногда покупаю немного, а иногда сильно.
Эффекты NUMA могут быть проблемой. Проверьте, как выглядит топология NUMA в гостевой системе, и сравните с другими гипервизорами. В Linux numastat
показывает попадания в память для каждого узла, а общая документация, такая как Руководство по настройке производительности RHEL, остается хорошими ссылками.
Что касается выбора гипервизора, я не думаю, что VirtualBox поддерживает настройку гостевой NUMA. Попробуйте другие варианты виртуализации x86, включая «голое железо», KVM, VMware ESXi и Hyper-V. Хотя все они подходят для сервера, у них разные наборы функций и рабочие процессы.