Если планку потом не добавить, что оставить гипервизору?

Процессор — 32 ядра и 64 потока. Память — 128GB или 256GB, и после поставки модуль не добавляется. Сначала вычитается доля хоста, затем размещаются виртуальные машины, которые работают одновременно. Сумма выше бюджета 128GB означает заказ машины на 256GB.

Сначала хостИ ядра, и память начинаются с этой доли.
Два фиксированных объёма128GB или 256GB выбираются в заказе.
Вложенность в три слояВнутренние гости тратят бюджет внешнего.

Два отдельных счёта

У этой машины процессор на 32 ядра и 64 потока. Память выбирается при заказе: 128GB или 256GB DDR4-3200 ECC RDIMM. Два объёма — две машины. После установки модуль не добавляется. Потоки можно делить между гостями по времени. Страницы памяти не появляются от переподписки. Сначала два счёта: потоки и фиксированная память. Оба начинаются с вычета того, что оставляет хост.

Диски — третий счёт. По умолчанию 2×1TB NVMe, без аппаратного RAID, каждый диск с прямым подключением. Как разделить системный диск и диски гостей, написано в заметке Как разделить два NVMe с прямым подключением в Proxmox. Верное деление дисков не превращает 128GB в 256GB.

Канал и адреса не меняют ступень памяти. Как дополнительный адрес считается вместе с включённым, написано в заметке Как вместе считать доп. IPv4 и адрес по умолчанию. Здесь считаются только ядра и память.

128GB и 256GB выбираются в заказе. Потом модуль не добавляется. Если запланированная фиксированная память выше бюджета ступени, заказ меняется на 256GB до оплаты.

Потоки, которые оставляет хост

64 потока получаются из 32 физических ядер, по два потока SMT на ядро. Один поток SMT — это неполное ядро. База данных, сборка или гость, который сам запускает виртуальные машины, берёт бюджет физическими ядрами. Гости, которые в основном ждут сеть, делят потоки.

Хост оставляет потоки интерфейсу, сети и хранилищу. Без ZFS это 4 потока, то есть 2 ядра. Если какой-либо пул на ZFS, оставляют 8 потоков, то есть 4 ядра, чтобы scrub и контрольные суммы имели запас. В Proxmox нет переключателя «резерв хоста». Привязка CPU каждой виртуальной машины обходит эти потоки. Без ZFS гости используют 4-63 и не занимают 0–3. С ZFS гости используют 8-63 и не занимают 0–7. Номера идут от 0 до 63. Гость без этой границы всё равно занимает резервные потоки, поэтому привязка одна и та же у каждой машины. Процессы хоста по-прежнему могут использовать все потоки.

vCPU, которые заняты одновременно, остаются в пределах оставшихся потоков: 60 без ZFS и 56 с ZFS. Сумма vCPU сайтов может быть больше: они не загружены все сразу. Гость, который занят постоянно, считает свои vCPU ядрами из 32. Потолок — 30 ядер без ZFS и 28 с ZFS. Обе ступени памяти используют один процессор. Машина на 256GB ядер не добавляет.

СчётБез ZFSС ZFS
Все потоки64 (32 ядра)64 (32 ядра)
Хост оставляет4 потока, привязка мимо 0–38 потоков, привязка мимо 0–7
Потоков остаётся6056
Постоянно занятые ядране больше 30не больше 28

База с 8 vCPU считается как 8 ядер. Без ZFS хост уже держит 2 ядра, значит для других постоянно занятых гостей остаётся 22 ядра. Десять сайтов по 2 vCPU дают 20 потоков и могут стоять рядом с этой базой. База на 16 vCPU плюс четыре гостя по 8 занятых vCPU дают 48 ядер, это выше 30. Сначала уменьшают занятые vCPU. У машины на 256GB по-прежнему 32 ядра.

После установки lscpu показывает число узлов NUMA. Этот 7543P — односокетный процессор, но узлов всё равно может быть больше одного. Тогда память и vCPU базы остаются на одном узле. При одном узле размещение между узлами не нужно.

Память, которую оставляет хост

Документация Proxmox оставляет хосту не меньше 1GB свободной памяти, когда память раздаётся гостям. Это нижняя граница. На этой машине одновременно работает несколько гостей, а на узле ещё интерфейс, журналы и страничный кэш. В бюджете узлу оставляют ещё 8GB, и эта доля не назначается ни одному гостю.

ARC у ZFS считается отдельно, и сначала читается фактический потолок. Если установщик кладёт систему на ZFS, Proxmox VE 8.1 и новее записывают потолок ARC около 10 процентов памяти и не выше 16GB в /etc/modprobe.d/zfs.conf. Десять процентов от 128GB — около 12,8GB, ниже потолка. Десять процентов от 256GB выше 16GB, поэтому потолок — 16GB. Этот потолок остаётся на стороне хоста. Ранние носители VE 8 и пул, созданный после установки, могут быть без этого потолка.

Пул, созданный позже, падает на значение ZFS по умолчанию, примерно половину памяти. С ZFS 2.3 значение по умолчанию может доходить до 62,5 процента. На 128GB это забирает около 64GB до появления гостя. Сначала ставят потолок, потом создают гостей.

Читается c_max в /proc/spl/kstat/zfs/arcstats. Единица — байты. Деление на 1024 три раза даёт GiB. Если файла нет, ZFS не загружен и ARC равен 0. Чтобы сменить потолок, в zfs.conf пишут zfs_arc_max. Значение — число GiB, умноженное на 1024 в третьей степени. Для примерно 10 процентов от 128GB это 12GiB, то есть 12884901888. На машине 256GB потолок ARC — 16GiB, то есть 17179869184. На обеих ступенях этот потолок выше минимума ARC по умолчанию, около 1/32 памяти, поэтому достаточно одной строки. Затем update-initramfs -u и перезагрузка узла. До перезагрузки гостей по новой цифре не создают.

Жёсткий потолок фиксированной памяти гостей — физическая память минус потолок ARC минус 8GB.

МашинаARCУзел оставляетФиксированная память гостей
128GB, без ZFS08GB≤ 120GB
128GB, ZFS при установкеоколо 12,8GB8GB≤ 107GB
256GB, без ZFS08GB≤ 248GB
256GB, ZFS при установкепотолок 16GB8GB≤ 232GB
Если после вычета плана от жёсткого потолка остаётся 8GB или меньше, план считается плотным и заказ переходит на 256GB. Журналы, резервные копии и временный лишний гость занимают эти 8GB. Модуль потом не добавляется.

Balloon не заменяет планку памяти. Proxmox отдаёт память только когда минимум ниже максимума и только пока загрузка хоста ниже цели, по умолчанию 80 процентов. При нехватке память забирается обратно. База и любой гость, который сам запускает виртуальные машины, ставят минимум равным максимуму, чтобы кэш не отбирали. Сайтам можно оставить разницу. Доли остаются на значении 1000. KSM только сливает одинаковые страницы. Из 128GB он не делает 256GB. KSM в бюджет не входит.

Раскладки, которые входят в 128GB

Сравнение ниже — без ZFS и с жёстким потолком 120GB. Фиксированная память значит, что минимум равен максимуму. vCPU сайтов не считаются постоянно занятыми.

Работают вместеФикс. памятьЗанятые ядраК 120GB
8 сайтов, по 4GB и 2 vCPU32GBне как занятыесвободно 88GB
База 64GB, 8 vCPU, плюс 4 приложения по 8GB96GB8свободно 24GB
База 48GB, 8 vCPU, плюс 6 сайтов по 4GB72GB8свободно 48GB
База 64GB, 8 vCPU, 4 приложения по 8GB, 2 сайта по 4GB104GB8свободно 16GB

Все четыре остаются в пределах 120GB, а занятые ядра — ниже 30. Запас больше 8GB, поэтому без ZFS их можно оставить на 128GB. Сайтов может быть больше, если каждый небольшой и они не заняты все сразу. Предел этих строк — сумма памяти. По ядрам ещё есть место.

Восемь занятых ядер плюс 2 ядра хоста далеки от 32. С ZFS жёсткий потолок около 107GB. Строка на 96GB оставляет около 11GB и может остаться на 128GB. Строка на 104GB оставляет около 3GB, это плотно, поэтому план переходит на 256GB.

Раскладки, которым нужен 256GB

Первые три строки выше 120GB, поэтому 128GB без ZFS их не держит. Четвёртая строка — 112GB. Она не выше 120GB, но остаётся только 8GB, поэтому она плотная и переходит на 256GB. Без ZFS жёсткий потолок 256GB равен 248GB. Все четыре строки входят, и у каждой запас больше 8GB.

Работают вместеФикс. память128GB, без ZFS256GB, без ZFS
База 96GB плюс 8 приложений по 8GB160GBвыше 120GBвнутри 248GB, свободно 88GB
20 гостей по 8GB160GBвыше 120GBвнутри 248GB, свободно 88GB
Только база на 128GB128GBвыше 120GBвнутри 248GB, свободно 120GB
База 64GB плюс вложенный хост 48GB112GBсвободно 8GB, плотновнутри 248GB, свободно 136GB

Двадцать гостей по 8GB с 2 vCPU у каждого дают 40 потоков. Это ещё внутри оставшихся 60 потоков. Предел — память. База, которой нужно фиксированные 128GB, не оставляет на машине 128GB места для 8GB узла. Потолок 248GB у машины на 256GB её вмещает, свободно 120GB.

База на 64GB плюс вложенный хост на 48GB дают 112GB. К 120GB остаётся 8GB, поэтому план переходит на 256GB. Если системный диск уже на ZFS, потолок около 107GB, и 112GB уже выше него. 48GB вложенного хоста считаются один раз, целиком, на физической машине. Маленькие гости внутри не добавляются отдельно и не добавляются второй раз.

Обе ступени — один AMD EPYC 7543P, 32 ядра / 64 потока, 2,8–3,7 GHz, 256MB L3. Память — DDR4-3200 ECC RDIMM. 128GB стоят $462 в месяц. 256GB стоят $595 в месяц. Разница — $133. Ступень 256GB добавляет память. Число ядер остаётся 32. Машины стоят в Токио, Япония. Proxmox VE 8 и 9 выбираются без доплаты за систему. Диски по умолчанию — 2×1TB NVMe, без аппаратного RAID, каждый с прямым подключением, полезный объём — сумма. Канал — 250M, 1G или 2G, доплата $0, $255 или $745 в месяц, без лимита трафика, и на счёт памяти это не влияет. Один IPv4 входит в комплект. Дополнительные адреса — по $2, не больше 255 штук. К оплате — месячная сумма, умноженная на число месяцев. Месяц, квартал, полгода и год идут без скидки. Плата за установку отсутствует. Узел управляется по SSH.

Гость, который запускает гостей

Вложенная виртуализация нужна гостю, который сам запускает KVM или ещё один Proxmox. Обычным сайтам и базам она не нужна. После включения внутренние гости тратят память и vCPU внешнего гостя, а внешний гость тратит физическую машину. Вычитаются все три слоя.

Проверить svm на хосте

На узле выполняется grep -m1 svm /proc/cpuinfo. Вывод значит, что процессор показал флаг AMD svm. Без вывода внутренние гости не получат аппаратное ускорение. Раскладка на этом останавливается.

Прочитать параметр вложенности

cat /sys/module/kvm_amd/parameters/nested равен 1, если сторона хоста уже включена. Значение 0 значит: сначала выключить всех гостей. Создать или дополнить /etc/modprobe.d/kvm-amd.conf строкой options kvm-amd nested=1. В этой строке имя модуля с дефисом. В пути sysfs — подчёркивание. Оба имени — один модуль. Если в файле уже есть строки, строка добавляется в конец. Файл целиком не затирается. Затем узел перезагружается.

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

Внешний гость использует CPU host

На узле выполняется qm set 101 --cpu host. 101 заменяется номером внешнего гостя. То же самое в интерфейсе: оборудование, процессор, тип host. После изменения гостя выключают с узла и включают снова, чтобы QEMU создался с CPU host. Перезагрузка внутри гостевой системы новый тип не применяет.

Когда гость поднялся, проверку svm выполняют внутри него. Вывод значит, что внутренние гости могут использовать аппаратное ускорение. Внешний гость с 8 vCPU отдаёт всем внутренним эти же 8, а не дополнительные физические ядра. Три внутренних гостя по 4 vCPU дают 12, это уже выше внешних 8. Внутренний слой переподписан. Физические 32 ядра не растут.

Внешнюю память вычитают один раз

Внешний гость с 48GB должен вместить фиксированную память внутренних гостей плюс долю внешней системы внутри этих 48GB. Три внутренних гостя по 8GB дают 24GB. Внешняя система оставляет 8GB. 48GB это покрывают. Ещё один внутренний гость на 32GB даёт 24+32+8 = 64, выше 48. Сначала увеличивают внешнего гостя. Это увеличение возвращается в физический бюджет: 48GB становятся 64GB, и разница снова вычитается из физического потолка.

Этот слой возвращается в прежнюю таблицу. Без ZFS и с потолком 120GB база на 64GB плюс этот внешний гость на 48GB дают 112GB, свободно 8GB, поэтому план переходит на 256GB. 24GB внутри внешнего гостя уже входят в 48GB. Вложенность подходит для лаборатории и нескольких небольших гостей внутри одного внешнего. Внутренний слой не заполняют с плотностью физической машины. Память, уже отданная внешнему гостю, другим гостям узла не достаётся.

Закрыть счёт до заказа

Бюджет считает гостей, которые включены вместе, а не каждого, кто запускался раз за неделю. Гость для сборки, выключенный днём, в дневную сумму не входит. Если ночью он работает вместе с базой, ночной набор — вторая сумма. Оба набора должны войти в жёсткий потолок, со свободными больше 8GB, прежде чем заказ останется на 128GB. Дневная сумма без ночного набора после установки упирается в память, а модуль не добавляется.

  1. Определить, системный диск на ZFS или нет. Если да, включить потолок ARC. Если нет, ARC равен 0. Пул, созданный позже, сначала ограничивают примерно 10 процентами и не выше 16GB.
  2. Узел оставляет 8GB. Без ZFS привязка обходит 0–3. С ZFS обходит 0–7.
  3. Сложить фиксированную память гостей, которые работают вместе. Вложенный хост считается один раз, целиком. Внутренние гости второй раз не прибавляются.
  4. Сумма остаётся на 128GB, только если она внутри жёсткого потолка и потолок минус сумма больше 8GB. Иначе заказывают 256GB.
  5. Сложить постоянно занятые vCPU как ядра. Потолок — 30 без ZFS и 28 с ZFS. Выше этого ни одна ступень памяти ядер не добавляет.
  6. Выбрать Proxmox VE 8 или 9. Разделить системный диск и диски гостей по заметке о дисках. После входа по SSH проверить svm, параметр вложенности и ARC командами выше.

Один дневной набор: база фиксированно 64GB и 8 vCPU, минимум тоже 64GB; четыре приложения по 8GB; два сайта по 4GB. Сумма памяти — 104GB. Без ZFS потолок 120GB, свободно 16GB, это больше 8GB, заказ остаётся на 128GB. База — 8 ядер, хост — 2, приложения и сайты не заняты постоянно. С ZFS потолок около 107GB, свободно около 3GB, заказ переходит на 256GB. Если сама база фиксирована на 128GB, уже этот один гость выше 120GB, значит заказ — 256GB. Без ZFS потолок 256GB равен 248GB. База на 128GB плюс исходные 40GB приложений и сайтов дают 168GB, свободно 80GB.

Счёт ядер на обеих ступенях один. Счёт памяти разный. Если сумма фиксированной памяти и запас не входят в 128GB, заказ — машина на 256GB.

Сначала ступень памяти, потом гости

от $462 / мес.