February 15th, 2014

404

KVM vs Xen

Скажу ровно две вещи, которые для меня стали практически рубиконом в отношении к Зену.

Предположим, у вас overprovision диск. Виртуалка делает запись, драйвер пытается записать, получает ENOSPACE. Варианты поведения?

- Xen: user-space часть tapdisk получает ошибку записи в битмап VHD, не понимает что делать, возвращает -2, blkback видит что что-то не так, пишет ошибку в кольцевой буффер, blkfront (он тупой, ему можно) транслирует ошибку файловой системе, файловая система либо говорит "у блянахуй" и скопычивается в RO, либо говорит "у блянахуй" и транслирует ошибку записи в SQL-сервер, который скопычивается с незавершённой транзакцией и лок-файлом, либо просто скопычивает сервер.

- KVM: qemu видит, что писать больше некуда и ставит домен на паузу. Приходит админ, разгребает место, снимает домен с паузы, поехали молотить дальше. Если снимут с паузы не разгребя - снова встанет на паузу.

Второй пример. У вас дохера виртуалок и каждой вы пообещали много памяти. (нет, речь не про оверпровиженинг). Виртуалки память не используют процентов на 50. Даже под кеш. Что делать?

- Xen: а давайте у нас будет такая смешная система регуляции памяти, что у нас будет maxmem, который не start_memory, и балунинг, который у виртуалки память забирает, и в гипервизор отдаёт, но виртуалка при этом на самом деле имеет хак, который не показывает, сколько памяти сожрал балунинг, а вместо этого высчитывает свободную память с учётом балунинга, но только если не рассчитывается, сколько свободной памяти, тогда мы считаем, что балунинг занятый, а если произойдёт memory-hotplug, то мы свободную память отнесём к балунингу, но не в смысле свободной памяти, а в смысле свободной памяти которая показывается пользователю, а потом скажем балунингу сжаться, но при этом проебётся 20% памяти и никто не знает куда, поэтому мы будем использовать forward-port'ы из 2.6.18, в которой свободная память считается не так, как она считается, потому у клиента цифры сходятся, но не сходятся у oom'а, который init сносит за нехватку памяти, а использовать апстрим мы не будем, потому что oom там всё равно инит сносит, но при этом ещё и пользователю правильные цифры не показывает и память пиздит, а ещё у нас новая технология populate-on-demand, которая как балунинг, но ещё более честная и мы свободную память говорим сколько в теории сделаем, а на самом деле жёсткий лимит ставим меньше, чем сказали что есть.

KVM: ни разу не записанная, но обещанная виртуалке память, считается свободной и используется хост-системой по своему усмотрению (под файловый кеш). Гости получают память по мере её записи, лимиты определяются софтом, oom отрабатывает по общим правилам и весам (и может прибить гостя при острой нехватке кислорода). Если oom не нравится, его можно легко отключить (вместе с оверкоммитом).

При том, что у зена есть интересные идеи, разница в реализации - вот что острее всего ощущается. Чужеродная куча патчей на линукс, чтобы хоть как-то работает, похуизм со стороны разработчиков гипервизора на проблемы гостей, похуизм со стороны разработчиков драйверов на проблемы юзерспейса, каждый сидит в своей уютной CS-башенке и срать хотел на реальную жизнь вокруг.
404

The plan

В стиме. Бесплатно.

Оно офигительно. Просто вот так вот на ровном месте эстетический взрыв.

По духу чем-то напоминает "на опушке бетонного леса" (во всей вселенной пахнет нефтью).