Хост VM -> Xenon E5-2440 с памятью 48G ... Все работает под управлением CentOS6.5 (2.6.32-431)
У меня есть 4 гостевые виртуальные машины, каждая с 2 ГБ памяти. Их образы дисков - это локальные файлы. На хост-машине также работает малоиспользуемый сервер NFS, но не более того. (swappiness = 0) Примерно через день, когда буферный кеш вырастет почти до 40 ГБ, некоторые из этих виртуальных машин почти полностью заменены на диск. (просматривается через: grep VmSwap / proc / PID / status)
Проблема, с которой я столкнулся, заключается в том, что, хотя эти виртуальные машины могут не использоваться регулярно, они должны быть готовы. Однако на практике они меняются местами, что вызывает серьезные проблемы с их временем отклика.
Я, безусловно, полностью за то, чтобы мои гостевые виртуальные машины использовали файл подкачки разумного размера и позволяли ОС определять баланс между буферным кешем и подкачкой, но в моем случае это не работает для хост-машины.
Есть ли возможность предотвратить снижение скорости отклика виртуальных машин, кроме отключения подкачки на хост-машине? Попытаться использовать cgroups или просто отключить файл подкачки для этого варианта использования?
Вы можете заблокировать страницы в памяти в более поздних версиях libvirt: -
http://libvirt.org/formatdomain.html#elementsMemoryBacking
Осторожный: Это не появляется при использовании Fedora 19 в качестве гипервизора, тем не менее, согласно журналу изменений для последней версии RPM (я могу найти) для EL6.5 libvirt, она существует;
- 18 июля 2013 г., Иржи Денемарк - 0.10.2-21
- conf: Избегайте NULL deref для состояния домена pmsuspended (rhbz # 822306)
- libvirt: определение типов событий сбоя домена (rhbz # 822306)
- qemu: Рефакторинг processWatchdogEvent (rhbz # 822306)
- qemu: выставить qemuProcessShutdownOrReboot () (rhbz # 822306)
- qemu: реализовать события oncrash при панике гостя (rhbz # 822306)
- qemu: Реализовать события coredump oncrash при панике гостя (rhbz # 822306)
- conf: устранена утечка памяти при разборе узлов XML порта nat (rhbz # 851455)
- security_manager: Исправить сравнение (rhbz # 984793)
- qemu: предотвращение сбоя libvirtd без конфигурации гостевого агента (rhbz # 984821)
- qemu: исправить двойное освобождение от возвращенного массива JSON в qemuAgentGetVCPUs () (rhbz # 984821)
- qemu_agent: добавлена поддержка добавления массивов к командам (rhbz # 924400)
- Добавлена поддержка блокировки страниц памяти домена (rhbz # 947118)
- qemu: реализовать поддержку блокировки страниц памяти домена (rhbz # 947118)
- qemu: Проверить наличие поддержки -realtime mlock = on | off (rhbz # 947118)
- qemu: Переместить вычисление лимита памяти в функцию многократного использования (rhbz # 947118)
- util: Новый virCommandSetMax (MemLock | Процессы | Файлы) (rhbz # 947118)
- qemu: установить RLIMIT_MEMLOCK, когда используется резервное копирование / блокировка памяти (rhbz # 947118)
- Добавить протокол Gluster в качестве поддерживаемой серверной части сетевого диска (rhbz # 849796)
- qemu: добавлена поддержка серверной части сетевого хранилища на основе протокола gluster. (rhbz # 849796)
- tests: Добавить тесты для поддержки сетевых дисков на основе протокола gluster (rhbz # 849796)
Вот пошаговые инструкции для решения Мэтью:
virt-xml $VMNAME --edit --memorybacking locked=on
systemctl restart libvirtd
(не уверен, нужно ли это)где $VMNAME
это имя виртуальной машины.
Я успешно прошел ситуацию, когда раньше моя виртуальная машина полностью выгружалась. Теперь процесс qemu виртуальной машины не имеет использования подкачки и реагирует.
Предостережение: согласно документация libvirt, вся память qemu будет заблокирована, она может непредсказуемо вырасти и нужно установить hard_limit
для защиты хост-системы (виртуальная машина будет отключена, если необходимо оставаться в пределах лимита).
Изменить: упрощенный шаг 2 (был virsh edit $VMNAME
и добавить <memoryBacking><locked/></memoryBacking>
после <domain type='kvm'>
)
Вы можете использовать cgroups и настроить swappiness для cgroup
http://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
http://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt
Виртуальный процессор KVM - это просто поток на хосте, поэтому им можно управлять, как и любым другим процессом.