Можно ли отключить или настроить общий доступ к кэшу файловой системы для OpenVZ?
Для OpenVZ, реализации виртуализации на основе контейнеров, кажется, что хост и все гости совместно используют кеш файловой системы. Это звучит парадоксально, когда речь идет о виртуализации, но на самом деле это особенность OpenVZ.
Это тоже имеет смысл. Поскольку работает только одно ядро, можно получить выгоду от совместного использования одних и тех же страниц кэша файловой системы в памяти. И хотя это звучит выгодно, я думаю, что установка здесь действительно страдает от производительности. И вот почему: мои машины фактически не делятся файлами на диске, поэтому я не могу извлечь из этого пользу.
Несколько машин OpenVZ работают под управлением MySQL с таблицами MyISAM. MyISAM использует кеш файловой системы системы для кэширования файлов данных, в отличие от пула буферов InnoDB. Также известно, что некоторые виртуальные машины выполняют тяжелые и большие операции ввода-вывода в одной и той же файловой системе на хосте. В целях тестирования я побежал cat *.MYD > /dev/null
в какой-то большой базе данных на одном компьютере я видел снижение кеша файловой системы на другом htop
, Это, по сути, сбрасывает весь полезный кеш файловой системы в гостях (FIFO) и таким образом сбрасывает кеш MySQL в гостях. Прав ли я в своем анализе до здесь?
Теперь пользователи жалуются, что MySQL работает очень медленно. И это. Некоторые простые SELECT
запросы занимают несколько секунд, когда дисковый ввод-вывод интенсивно используется другими машинами.
Итак, проще говоря:
Есть ли способ избежать кеширования файловой системы другими виртуальными машинами при виртуализации на основе контейнеров?
Вместо того, чтобы переходить на KVM или InnoDB (см. Ниже), возможно, есть опция конфурации, на которой я упускаю.
Некоторые мысли:
- Выбор алгоритма очистки кеша файловой системы в ядре. (возможно? как?)
- Резервирование определенного количества страниц для одной виртуальной машины. (кажется, не вариант для файлового кеша типа страниц, которые читают
man vzctl
) - Будет ли запуск MySQL в другой файловой системе куда-нибудь меня приводить?
- Обновление RAM в машине (как предложено @michael-hampton). Будучи дешевым вариантом, он, вероятно, не решает проблему. Обновление +8 ГБ не пропорционально количеству операций дискового ввода-вывода за ночь, скажем, несколько десятков гигабайт.
Если нет, я думаю, что мои альтернативы:
- Используйте KVM для MySQL-MyISAM под управлением виртуальных машин. KVM фактически выделяет память для виртуальной машины и не позволяет выгружать кэши, если не используется
balloon
Водитель. - Перейдите к InnoDB и настройте пулы буферов, грязные страницы и т. Д. Теперь это считается "хорошим" в долгосрочной перспективе, поскольку не все, кто отвечает за администрирование системы, понимают InnoDB.
- больше предложений приветствуются.
Системное программное обеспечение: Proxmox (сейчас 1.9, можно обновить до 2.x). Один большой LV назначен для виртуальных машин.
1 ответ
Помимо идей, которые у вас уже были, вы могли бы добавить больше оперативной памяти, хотя это кажется дорогостоящим краткосрочным побочным эффектом.
В долгосрочной перспективе, вероятно, лучше всего будет отказаться от OpenVZ.