Эффективность KSM: кто-нибудь замерял?
Кто-нибудь замерял эффективность KSM (сколько удалось сэкономить памяти) на куче минимально отличающихся виртуалок (одинаковый «базовый образ» + минимальные изменения)?
На proxmox при 4-5 машинах ksm гигов 5 экономит.
Оффтоп. На esx(i) это было уже давно, включалось автоматом при нехватке памяти, особой пользы не приносило, в последних версиях по дефолту отключено.
На proxmox при 4-5 машинах ksm гигов 5 экономит.
Неплохо. А сколько всего памяти на системе и сколько выделено под каждую ВМ?
И сколько процессора жрал ksmd? Я надеюсь, что ksm сможет освободить память под что-нибудь более полезное (кеши ФС, например) и общая производительность немного вырастет.
Оффтоп. На esx(i) это было уже давно, включалось автоматом при нехватке памяти, особой пользы не приносило, в последних версиях по дефолту отключено.
Юзабельность подобного подхода зависит от конкретной ситуации, так что всем подряд это включать бессмысленно. ИМХО логично что выключили.
Общей памяти 32 гига. Машине в среднем 4 гига отведено. Сколько оно ест цпу я не мерил.
Проверял в ноябре 2011г., на физическом сервере с 32 ГиБ ОЗУ, RHEL 6.1.
Были запущены 64 экземпляра windows xp, RAM 512 МиБ, базовый дисковый образ 4 ГиБ.
Реальное использование памяти виртуальными машинами через несколько минут после запуска последней ВМ составило 6 ГиБ.
Оффтоп. На esx(i) это было уже давно, включалось автоматом при нехватке памяти, особой пользы не приносило, в последних версиях по дефолту отключено.
Вы с ballooning-ом не путаете?
Наоброт, очень хотел задать вопрос про балунинг roman77, т.к. цифра 5 Гб с 5 работающих ВМ за счёт shared выгдядит фантастической.
ого. А когда вышел Vsphere 6?
хорошо оно работает, но жрет процессор. в oVirt KSM запускается автоматически, когда хост доходит до 80% занятой памяти, пробегается разок, и отключается. График утилизации памяти на хостах выглядит как плавный подъем до 80%, и резкий сброс назад к 30-40% каждые N часов. Крупный виндовый VDI если что.
Я видел места где KSM бежит все время, и это, имхо, идиотизм.
Источник
Куча процессов, что есть что?
Доброго всем времени суток, набираю команду ps -A и получаю:
объясните собственно что это за процессы(чего делают, особенно из первых десятков) и какие из них можно убрать(ну кроме apache и fbserver — это я знаю что такое 🙂 ) и собственно как убрать, а то меня почему то смущает такое количество процессов, не знаю почему, но кажется что можно спокойно обойтись без доброй половины из них, а то и 2/3. А то загрузишь какой-нибудь Slitaz смотришь, а там всего десяток процессов и всё работает, тут же кучище непролазное 🙂
P.S. система Xubuntu 10.10
попытаться выгрузить любой из процессов ты можешь набрав команду
sudo kill -9 [номер pid]
потом отпишись как оно прошло
а за пивом тебе не сбегать? гугли, читай мануалы, просвещайся.
Я, конечно, извиняюсь, но гугл и man уже отменили?
>а то меня почему то смущает такое количество процессов, не знаю почему, но кажется что можно спокойно обойтись без доброй половины из них, а то и 2/3
Вообще, много процессов — нормальное состояние Юникса.
Кажется, процессы со 2-го по 758-й — нити ядра, их убивать крайне не рекомендуется. Лучше пересобрать ядро, чтобы их стало поменьше.
Спасибо, стало немного понятней. Я изначально предполагал что это всё дело запускается из инициализирующих скриптов, хотел туда лезть, удалять, но для этого надо сначала знать, что из этого можно удалять, а что нет.
В убиении процессов обычно нет необходимости. Еще есть команда top.
Загрузись в первый ранлевел и посмотри список процессов. Это минимальный «неприкосновенный» набор. Остальные конечно можно удалять, но зачем?
Я изначально предполагал что это всё дело запускается из инициализирующих скриптов, хотел туда лезть, удалять, но для этого надо сначала знать, что из этого можно удалять, а что нет.
Запускай демонов по одному и смотри процессы. А предположение верное. Лишнее из инитскриптов можно и не запускать. Удалять не обязательно.
А как в него перейти? Сначала думал закоментить в inittab все уровни кроме первого, но порылся, и inittab в /etc не нашёл 🙁
Источник
Ksmd что за процесс linux
Понятие разделяемой памяти является общеизвестным в мире современных операционных систем. Например, когда программа запускается впервые, она разделяет всю свою память с родительской программой. Если же дочерняя или родительская программа пытается внести изменения в эту общую память, то ядро выделяет для этого новую область памяти, куда копирует изначальное содержимое и даёт возможность программе вносить изменения уже в эту новую область. Подобная технология известна, как копирование при записи.
Технология KSM (Kernel SamePage Merging) представляет собой новую возможность в Linux, которая использует понятие разделяемой памяти наоборот. KSM даёт возможность ядру исследовать две и более уже запущенных программы, чтобы сравнить их память. Если некоторые области памяти или страницы идентичны, то KSM сводит их в одну (см. Рисунок 1). После этого данная страница помечается флагом «копирование при записи». Если теперь одной из программ нужно изменить содержимое, то для этого создаётся новая страница.
Рисунок 1. Сервис KSM
Данная возможность полезна при виртуализации с использованием KVM. Гостевая виртуальная машина при запуске наследует только память от родительского процесса qemu-kvm . После того, как гостевая виртуальная машина запущена, содержимое образа её операционной системы можно разделить с другими гостевыми машинами, которые используют такую же операционную систему или те же приложения. KSM определяет и объединяет только те страницы памяти, которые не влияют на работу гостевой виртуальной машины и не компрометируют безопасность как физической машины-гипервизора, так и других гостевых машин. KSM позволяет KVM требовать, чтобы идентичные области памяти гостевых виртуальных машин были общими. Экспериментальная реализация KSM от Red Hat показала, что 52 виртуальных экземпляра Windows XP с 1 Гб памяти могут работать на компьютере с 16 Гб оперативной памяти.
KSM обеспечивает лучшее использование памяти и ускоряет её работу. При использовании KSM общие данные реже вымываются из кэша процессора и из основной памяти. Это сокращает количество «промахов» кэша при работе гостевых машин, за счёт чего увеличивается производительность приложений и операционных систем. Кроме того, совместное использование памяти уменьшает общий объем памяти, необходимый гостевым машинам, что позволяет «плотнее» использовать существующие ресурсы.
KSM и NUMA
Начиная с Red Hat Enterprise Linux 6.5, KSM работает с NUMA (Non-Uniform Memory Access). Данная возможность позволяет KSM при объединении страниц принимать в расчёт топологию NUMA. Это предотвращает случаи, когда страницы размещаются на удалённых узлах, и связанные с удалённым размещением проблемы производительности.
Red Hat рекомендует не выполнять объединение одинаковых страниц, если эти страницы находятся на разных узлах NUMA. Для этого необходимо установить настраиваемый параметр /sys/kernel/mm/ksm/merge_nodes в 0 . Почему? Внутренние счетчики ядра могут начать противоречить друг другу после большого количества межузловых слияний. В результате, демон numad может запутаться. Если ваша система имеет большое количество свободной памяти, можно достичь более высокой производительности за счет отключения и деактивации демона KSM. Обратитесь к Руководству по настройке производительности Red Hat Enterprise Linux для получения дополнительной информации о NUMA.
Сервисы KSM
Для управления KSM в Red Hat Enterprise Linux есть два сервиса:
- Сервис ksm запускает и останавливает тред KSM ядра.
- Сервис ksmtuned контролирует сервис ksm , динамически управляя слиянием страниц. Сервис ksmtuned запускает сервис ksm и останавливает его, если памяти и так достаточно. Для поднастройки KSM, например, когда создаётся или уничтожается гостевая машина, следует вызвать service ksmtuned retune .
Оба этих сервиса контролируются с помощью стандартных инструментов управления сервисами.
Сервис KSM
Сервис ksm входит в состав пакета qemu-kvm . По умолчанию KSM отключен в Red Hat Enterprise Linux 6. Однако, при использовании Red Hat Enterprise Linux 6 в качестве хоста KVM, он, как правило, включается сервисами ksm и ksmtuned .
Когда сервис ksm не запущен, KSM использует не более 2000 разделяемых страниц. Значение по умолчанию невелико и даёт лишь незначительный выигрыш в сохранении памяти.
Когда же сервис ksm запущен, то KSM будет разделять до половины основной памяти системы той физической машины, на которой он размещён. Запустите сервис ksm , чтобы KSM использовал больше разделяемых страниц памяти.
Сервис ksm может быть добавлен в автозагрузку по умолчанию. Сделайте сервис ksm постоянным с помощью команды chkconfig.
Сервис настройки KSM
У сервиса ksmtuned нет никаких опций. Сервис ksmtuned зацикливает и регулирует ksm . Сервис ksmtuned уведомляется процессом libvirt , когда создаётся или уничтожается гостевая виртуальная машина.
Если вызвать service ksmtuned retune , сервис ksmtuned перечитает конфигурационный файл и перезапустит настройку. Перед тем, как приступить к описанию параметров в файле, необходимо прояснить термины:
- npages — сколько страниц ksm будет сканировать до того, как ksmd уйдёт в спящий режим, устанавливается в /sys/kernel/mm/ksm/pages_to_scan ;
- rsz — сумма памяти всех процессов qemu-kvm , в Кбайтах;
- thres — порог активации, в Кбайтах; цикл KSM срабатывает, когда сумма thres + rsz превышает общий объём системной памяти.
Файл /etc/ksmtuned.conf является конфигурационным файлом для сервиса ksmtuned . Ниже представлено содержимое файла ksmtuned.conf по умолчанию (с переведенными для удобства русскоязычного читателя комментариями).
Переменные KSM и мониторинг
KSM сохраняет данные мониторинга в директории: /sys/kernel/mm/ksm/ . Файлы в этой директории обновляются ядром и представляют точную картину использования KSM. Каждый из следующих файлов содержит одно числовое значение, позволяющее определить текущий статус сервиса:
- full_scans — число запусков полного сканирования;
- pages_shared — общее количество слитых страниц;
- pages_sharing — число слитых страниц на текущий момент.
- pages_to_scan — число страниц, которые еще не были просканированы;
- pages_unshared — общее число слитых страниц, которые разделили в связи с записью новых данных;
- pages_volatile — число слитых страниц, которые был разделены, на текущий момент;
- run — запущен ли сервис KSM;
- sleep_millisecs — сколько миллисекунд KSM ожидает следующего запуска.
Результаты деятельности по настройке KSM сохраняются в лог /var/log/ksmtuned , если строка DEBUG=1 добавлена в файл /etc/ksmtuned.conf . Местоположение лог-файла можно изменить с помощью параметра LOGFILE . Изменение местоположения лог-файла не рекомендуется и может потребовать особой конфигурации SELinux.
Остановка KSM
KSM снижает производительность, что может оказаться важным, например, при недостаточной мощности процессора. Этот сервис можно деактивировать, остановив сервисы ksmtuned и ksm . Остановка сервисов деактивирует KSM до момента перезагрузки.
Чтобы деактивировать KSM с сохранением этого статуса после перезагрузки, используйте команду chkconfig :
Не экономьте на файле подкачки
Убедитесь, что общий объем памяти с учетом файла подкачки достаточен для всех запущенных процессов вне зависимости от того, запущен ли KSM. Это позволит избежать нештатных ситуаций в тех случаях, когда страницы массово перестают быть разделяемыми.
Источник
KSM и ksmtuned
Разбираемся с технологией KSM (Kernel SamePage Merging), запускаем ksm и ksmtuned в работу на ноде с KVM виртуализацией.
Для начала, немного теории. Как обычно работают виртуальные машины, запущенные на KVM ноде? Для каждой из них, выделяется определённое количество ресурсов, в том числе и памяти. При этом, каждая запущенная VM работает со своими доступными областями\страницами памяти, потребляя при этом, соответствующий ресурс.
Что делает KSM? KSM позволяет ядру Linux проверить (исследовать, если так можно сказать) запущенные инстансы и сравнить их память. Если ядро обнаруживает, что какие-то области памяти идентичны, KSM объединяет их в одну. При этом, такая область помечается как copy on write. Когда одному из инстансов потребуется изменить содержимое страницы памяти, для этого будет создана отдельная её копия.
Относительно KVM виртуализации, мы полуачем следующие преимущества — KSM, исследовав области памяти на ноде с виртуальными машинами, объединяет идентичные её участки в один, освобождая при этом ресурсы. Важно, что объединены будут только те области памяти, которые на работу виртуальных машин повлиять не смогут. В среде, где работа ведётся с однородными виртуальными машинами, такая оптимизация работы с памятью должна положительно влиять и на скорость работы, и на производительность операционных систем гостевых машин.
Однако, стоит обратить внимание на предупреждения, которые делает RedHat в своей документации — теоретически, использование KSM может привести к утечке данных из памяти между виртуальными машинами. Это, всё же, теоретическое суждение, на практике мне подобные случаи не известны. Кроме того, использование KSM может повысить нагрузку на хосте — это так же стоит учитывать перед применением его в продакшене.
ksm и ksmtuned.
Что бы не возникло путаницы, ниже KSM — будет означать возможность ядра Kernel SamePage Merging, а ksm — сервис, который работает на сервере.
Когда ksm сервис не запущен, KSM использует не более 2000 разделяемых стрниц, в то время как при активном сервисе, работа KSM охватит до половины доступной на хосте оперативной памяти.
В свою очередь ksmtuned нужен для управления работой ksm, и для взаимодействия с процессом libvirt на сервере — например, когда виртуальная машина создаётся, или удаляется, libvirt «уведомляет» ksmtuned об этом. Конфигурационный файл сервиса доступен здесь /etc/ksmtuned.conf К сожалению, комментариев в нём не много, в отличие от примера в документации, так что имеет смысл обратиться к ней, и ознакомиться с содержимым файла оттуда.
В системе, параметры и статистика ksm доступны в /sys/kernel/mm/ksm/. Здесь мы можем получить информацию о текущем статусе сервиса, о том какое количество страниц в каком состоянии сейчас находятся (просканированы, объединены, не объединены, не просканированы), какой таймаут у работающего ksm установлен. При необходимости, с помощью команды virsh node-memory-tune, мы можем управлять установленными значениями. При включении логирования и дебага, в файле /var/log/ksmtuned мы получаем возможность следить за работой ksmtuned.
Можно ли использовать Kernel SamePage Merging в работе сегодня? Скорее да чем нет. Например, некоторые панели управления при установке активируют эти сервисы по умолчанию, некоторые провайдеры используют их при продаже услуг виртуальных серверов, так что технология эта работает у многих, я думаю, и работает достаточно успешно, во всяком случае, каких-то серьёзных проблем и громких инцидентов, связанных с ksm, в голову не приходит. Если ещё не использовали её раньше — возьмите на заметку, особенно для случаев, когда на одной ноде запускается и работает большое количество схожих по содержимому виртуальных машин.
Источник