Debian.pro

Блог для пользователей и администраторов Debian


Debian, KVM, финальные статьи. Проверяем, подходит ли наш сервер для установки kvm. Некоторые размышления о том, какая аппаратная конфигурация подходит для kvm сервера.

Для того, чтобы у вас заработал KVM у вас должно соблюдаться одно условие. Ваш процессор должен поддерживать технологии Intel VTx или AMD-V. Давайте удостоверимся в этом:
root@debian-lvm:~# cat /proc/cpuinfo | egrep '(svm|vmx)'
Вывод должен быть не пустым. Например для core i3 (поддерживающего Intel VTx) я получил 4 таких строки:
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat dts tpr_shadow vnmi flexpriority ept vpid
Для core i7 8 таких строк.

Что делать, если вывод команды — пустой? Узнать точное название своего процессора:
root@debian-lvm:~# cat /proc/cpuinfo | grep "model name"
model name : Intel(R) Core(TM) i3 CPU M 370 @ 2.40GHz
model name : Intel(R) Core(TM) i3 CPU M 370 @ 2.40GHz
model name : Intel(R) Core(TM) i3 CPU M 370 @ 2.40GHz
model name : Intel(R) Core(TM) i3 CPU M 370 @ 2.40GHz

И погуглить по модели процесса. В данном случае — я погуглил core i3 M370 — и первой же ссылкой была ссылка на описание этого проца на intel.com. Там написано, что он поддерживает VTx =)
Есть такие нехорошие производители ноутов или инженеры датацентров, которые отключают поддержку эти технологий. Если ваша ситуация такова — по гуглу процессор поддерживает VTx/AMD-V, а у вас — нет, то ковыряйте BIOS/CMOS на предмет того, как включить поддержку одной из них. Или гугл ковыряйте на предмет вашей модели ноута и включения поддержки виртуализации в нем (и да, я действительно использую KVM на i3 — сказка. vbox тормоз).

Если вы не включите VTx/AMD-V (или ваш процессор не поддерживает их) — то про kvm можете забыть. И не нужно пытаться — работать будет на самом деле голый QEMU, всё будет тупить и тормозить, а вы будете говорить, что я дурак и пишу всякую фигню. И не говорите, что я вас не предупреждал =)

Теперь подумаем о том, какие процы лучше использовать.
При реальной постоянной нагрузке на процессор менее 75% идеально подходят интеловские многоядерники с Hyper Threading (полноценные core i7 отлично подходят или Nehalem’ы).
Если вы ожидаете нагрузку близкую к 100% — не используйте HT. При включенном HT (4 ядра, 8 потоков) скорость CPU начинает очень неплохо проседать при нагрузке, близкой к сотне. При выключенном HT почти не проседает. При нагрузке менее 75% всё отлично в обоих случаях.
Сколько ядер? В идеале — столько же, сколько у вас будет виртуалок, если они действительно что-то делают (хостят сайты или ещё что-то). При адекватной нагрузке — количество виртуалок может совпадать с количеством потоков, как я уже писал выше.
Что делаю я? Предпочитаю core i7 (холодно и кушает мало электричества в ДЦ) с включенным HT (8 потоков) и ставлю на каждый сервер по 7 виртуальных машин. 1 поток я оставляю свободным. Заодно, почти избавляюсь от проседаний ЦПУ (максимально виртуалки смогу нагрузить процессор каг бэ на 88%). На самом деле с HT судить о нагрузке процессора в процентах почти невозможно. Это просто примерные представления. Ну посматривайте там в top =)
Как KVM ведет себя при оверкоммитинге CPU (когда виртуалок больше, чем ядер/потоков)? Да отлично он себя ведет. Только почитайте статью про то, как ограничивать виртуалку в пределах одного ядра («kvm mhz limit» в гугле).

Память. Память — самая больная точка для KVM. Когда памяти много — всё работает просто идеально. Когда память заканчивается — начинается попа.
Обязательное требование, которое ни в коем случае нельзя нарушать — нельзя давать виртуалкам памяти больше, чем есть на сервере.
Следует учитывать некий оверхеад памяти виртуалками. То есть, если виртуальная машина фактически использует 988 мегабайт «своей» оперативной памяти — то на сервере это будет ~1040 мегабайт занятой памяти. А создавали мы её с опцией 1000 мегабайт =) Вот такой хреновый у них калькулятор, да хД
Учтите, что KVM не использует понятия «виртуальная память», как OpenVZ. Виртуалка скушает на файловый кеш всю доступную ей память, как если бы это была обычная оперативка. И на хосте она становится занятой. В среднем, происходит это через пару дней после запуска виртуалки.
Нужно оставить ещё ~500 мегабайт на общие нужды гипервизора.
В цифрах… 8000 мегабайт памяти на сервере, 7000 отдано виртуалкам. Остаётся ещё около 300 свободных (их я использую для служебных виртуалок — dnsы, личные проксики, jabber серверы и прочая мелочь — по 196 на каждую).
Диски. Тут один принципе — чем быстрее диски, тем лучше. SSD? SSD лучше передать виртуальной машине напрямую (и такая возможность есть), а не сквозь драйверы гипервизора, иначе SSD износятся быстро. А если цеплять их напрямую к виртуалкам — то средствами системы в виртуалке можно добиться длительного срока службы.
В идеале — 15к-оборотники SAS. Опять же, на 7 виртуалок 2xSATA в raid — достаточно. С LVM даже wa не прыгает =)
Видео? huh. Лучше использовать сетевые средства доступа к виртуалкам) На винду — по рдесктопу, на линупсы — по ssh или vnc… Виртуальная видюха в KVM всё же бесполезна. Для меня это серверы.
Звук я не пытался запустить, хотя виртуальные аудиоустройства имеются в наличии.

Вот, пожалуй и всё. Да, немного размытая статья. Но если не будете следовать этим простым принципам — виртуалки будут тормозить. Оно вам надо) ?
Оверселлить не получится, да. Тут уж извините.

Переходим к статье установка KVM на debian.


Комментарии (2):

  1. Добрый день. Интересует два вопроса:
    1) Можно ли пробросить реальную видеокарту в гостевую windows-машину?
    2) Если у меня физически есть пара HDD с NTFS, виртуальная windows-система их не увидит, так ведь? Для меня было бы неплохо иметь из виртуальной windows_машины доступ к этим HDD, можете подсказать наиболее изящное решение?
    Спасибо.

  2. 1) можно, читайте что-то в духе «kvm video card pass through»
    Не все карточки пробрасываются, но в целом нормально.
    2) самый простой вариант — расшарить нужные hdd с dom0-машины по nfs или samba, если вам все фичи ntfs не нужны.
    Если фичи ntfs нужны — то цепляйте их в виртуалку (через virt-manager например), как блочные устройства. Проблем с этим нет. Только учитывайте, что ntfs не переживет одновременного rw-доступа двух операционных систем. Так что тогда на dom0 эти hdd нужно монтировать в ro или не монтировать вовсе.

    А вообще, судя по тому, что вы собираетесь виртуализировать десктоп — вам лучше virtualbox подойдет. KVM — всё же пока для десктопов подходит не лучшим образом (хотя люди работают на win+rdesktop — не жалуются).

Написать комментарий