Вопрос: Было ли когда-нибудь хорошей идеей отключить кеш страниц внутри гостевых виртуальных машин и вместо этого полагаться на ZFS ARC (и L2ARC на основе SSD) хоста?
Контекст: Я спрашиваю, так как я использую кластер Proxmox, который всегда показывает около 90% использования ОЗУ для всех виртуальных машин, независимо от того, сколько ему действительно нужно. Этого следовало ожидать из-за того, что гостевое ядро использует кеш страниц. Поскольку я слышал много хороших отзывов о ZFS ARC, я подумал, что, возможно, я мог бы больше полагаться на них и уменьшить зависимость от кеша страниц гостей. По сути, ARC будет своего рода общим кешем страниц для всех виртуальных машин.
Сделав это, я получил бы дополнительное преимущество в виде более точной статистики и графиков proxmox, что дало бы мне лучшее представление о том, сколько памяти на самом деле требуется каждой виртуальной машине. Это, в свою очередь, предоставит мне информацию, которая мне нужна, чтобы лучше настроить размеры оперативной памяти каждой виртуальной машины, и позволит мне увеличить размер ARC хоста на ту же величину.
Я на самом деле ничего из этого не пробовал, я думал, что сначала вы, ребята, попробую. Итак, я глуп, что так думаю?
Последующий вопрос: КАК я могу отключить (или ограничить) кеш страницы на виртуальной машине Linux? ОДИН метод - использовать cronjob и регулярно записывать «3» в / proc / sys / vm / drop_caches, например, раз в минуту или что-то в этом роде. Но это кажется хакерским, разве нет лучшего способа?
P.S. Да, я понимаю, что говорю только о кеше чтения, а не о кеше записи, на который влияет количество грязный страниц. Поэтому мне, вероятно, все равно понадобится некоторое количество свободного места в ОЗУ, чтобы учесть это (но это должно быть видно в статистике использования ОЗУ виртуальной машины в Proxmox, поэтому все вышеупомянутое должно по-прежнему применяться).
Я часто (но не всегда, см. Ниже) оптимизирую свои гипервизоры аналогично тому, что вы предлагаете: позволить виртуальным машинам сильно ретранслировать в общий дисковый кеш хоста.
Однако, используя drop_caches
подход кажется мне слишком тяжелым, так как он может лишить гостя слишком много кэш-памяти. В то же время я не знаю какого-либо метода ограничения кеширования страниц (кроме настройки вашего приложения для использования прямого ввода-вывода). Итак, ключ к правильному размеру ресурсов RAM вашей виртуальной машины: попробуйте назначить только ту память, которая действительно нужна гостю, плюс 1 или 2 ГБ для некоторой "передышки".
Такое управление памятью имеет несколько важных преимуществ:
Но есть и недостатки:
vmexit/vmenter
вдали, пиковая и устойчивая скорость любого кэша на основе хоста будет ниже, чем у коррумпированного кеша на стороне гостя (и это причина, по которой я предлагаю вам избегать повторения drop_caches
в гостях);