Добрый вечер!
Давно играюсь с виртуализацией, в т.ч. и на боевых серверах. Сейчас обнаружил, что описанное ниже проявляется и в KVM тоже (до сих пор считал, что нет). А именно, если выполняются следующие условия: 1) количество виртуальных процессоров во всех гостевых системах больше, чем физических процессорных ядер; и 2) какая-либо из виртуальных машин сконфигурирована более чем с одним процессором/ядром — то в этой машине, да и в системе в целом, наблюдаются жуткие тормоза и неадекватная загрузка процессора (-ов). Впервые столкнулся с таким в WMWare Workstation, затем в VMWare Server, и считал это багом или особенностью VMWare, а сейчас увидел это и на KVM. Немного погуглив, нашёл следующее:
Virtualized CPUs are overcommitted best when each virtualized guest only has a single VCPU. The Linux scheduler is very efficient with this type of load. KVM should safely support guests with loads under 100% at a ratio of five VCPUs.
Что, собственно, и наблюдается - на машине с одним двухъядерным процессором может висеть полтора десятка слабо нагруженных виртуалок, и работать нормально, но только если каждая из них - однопроцессорная.
Assigning guests VCPUs up to the number of physical cores is appropriate and works as expected. For example, running virtualized guests with four VCPUs on a quad core host. Guests with less than 100% loads should function effectively in this setup.
А вот здесь не очень понятно. То, что не надо делать виртуалку с числом процессоров больше, чем их физически есть, это понятно. Но означает ли эта фраза, что физических процессоров/ядер должно хватать на _все_ запущенные виртуалки? Мне как-то казалось, что это было бы не очень логично, но на практике получается, что это так и есть. К примеру, одна двухпроцессорная виртуалка на двухъядерном процессоре работала нормально, пока не добавилась ещё одна двухпроцессорная виртуалка. После этого - перманентные тормоза и 100% загрузка процессора. Примерно то же наблюдалось, когда к куче нормально работающих однопроцессорных виртуалок (в количестве, намного превышающем количество физических ядер) добавилась одна двухпроцессорная.
Вопрос состоит в следующем: это дело принципиально можно как-то победить в линуксе? Если это принципиально непобедимо в KVM, может какой-то другой гипервизор справится? Как с этим обстоит в VirtualBox, к примеру?
Я знаю один гипервизор, который такую ситуацию пережёвывает хорошо. Это VMWare ESXi. Но это не совсем линукс, к сожалению. А хочется именно его.
Спасибо.