dront78 27.07.2014 23:17

Tips & tricksПрограммное улучшение производительности Linux-систем

Привет

Этот пост содержит в себе описание "для чайников" всевозможных ухищрений, призванных минимизировать задержки и улучшить интерактивность рабочей среды. Одна часть этих возможностей универсальна, другая - может пригодится при эксплуатации серверов, а что-то подойдет только для десктопов.

Итак - начнем с универсальной части

Глава 1
Боремся со swap death, или, в простонародье, bug 12309, он же - бич большинства систем производства компании Microsoft, он же perfomance bottleneck большинства настольных систем

Файл или раздел подкачки - swap является часто используемым средством для увеличения объема оперативной памяти. Обычно он располагается на жестком диске. Встроенные средства операционной системы обеспечивают выгрузку в swap части оперативной памяти при ее недостатке для вновь запущенных программ. Это дает возможность запускать и использовать больше ресурсоемких программ одновременно, но ценой при этом является ухудшение общей производительности вплоть до полного прекращения отклика компьютера на внешние воздействия. Естественным решением является увеличение количества оперативной памяти. Но что делать, если эта возможность исчерпана или недоступна по той или иной причине?

Вариант 1
Можно расположить swap раздел на отдельном внешнем диске, однако это снимет проблему лишь частично, с помощью параллельного обращения, но не превысит пропускной способности самого диска. Использование ssd накопителей в данном случае будет достаточно дорогим удовольствием и, при этом, не всегда долговечным.

Вариант 2
Используем zramswap (для ядер 3.0+) или compcache (для ядер 2.6)
Это специальный модуль ядра - zram, позволяющий создать диск в оперативной памяти компьютера. Этот диск задействует стандартные swap механизмы ядра, т.е. при исчерпании операционной системой оперативной памяти часть программ будет выгружена на swap раздел, который, в данном случае, является той же оперативной памятью, но при записи происходит дополнительное сжатие данных с помощью алгоритма компрессии lzo. Производительность в данном случае существенно выше, чем при записи на обычный жесткий диск, а получаемое за счет сжатия увеличение объема позволяет избежать использования более медленных операций дисковых ввода вывода. Конечно не стоит забывать, что память не получится наращивать бесконечно, поскольку ее объем берется из основного ОЗУ компьютера. Обычно принято использовать 20% от имеющейся памяти, что позволяет нарастить дополнительно порядка ~1Gb при наличии 4Gb оперативной памяти перед тем, как мы перейдем к дисковому вводу выводу. Увеличение процентного соотношения zram/ram будет приводить к постепенном замедлению работы компьютера за счет постоянной выгрузки в swap и обратно, но все же может быть использовано на системах с сильно ограниченным объемом ram. в любом случае не рекомендуется использование значений >80%, т.к. это может начать влиять на память для драйверов и внутренних структур ядра.

Вариант 3
Используем zswap - ядра 3.11+
эта технология является более продвинутой версией zramswap.
она не требует скриптов настройки и располагается в kernel space, что позволяет существенно уменьшить задержки и улучшить быстродействие по сравнению с zramswap. В кратце - мы задаем пул ядра, в котором буду храниться сжатые данные и далее операционная система делает все за нас. Еще одним бонусом является то, что при заполнении пула, данные будут выгружены в обычный swap раздел в сжатом виде, что также дает дополнительное увеличение быстродействия.
За включение данной технологии отвечают параметры ядра
# включаем
zswap.enabled=1
# размер пула в процентах от оперативной памяти (по умолчанию)
zswap.max_pool_percent=20
# выбор компрессора ядро 3.15+
zswap.compressor=lz4
Вариант lz4 дает прирост скорости сжатия до 10-15% по сравнению с lzo, и до 200% прирост скорости при распаковке
Рекомендованные ограничения по использованию пула такие же, как и для zramswap 20%-80% от ram. Стандартная формула расчета для известных состояний примерно такая
((нужно оперативки/есть оперативки)-1)*100
если это параметр выше 100% стоит задуматься о приобретении модулей памяти ;)

Глава 2 - десктопная
автоматическая настройка отзывчивости системы
Бывают программы или состояния, когда систему хочется заставить делать 100500 дел одновременно и при этом еще смотреть кино или серфить в Internet. Тут на помощь нам могут прийти две утилиты.

Вариант 1
VeryNice
запускается в виде службы (демона) и позволяет управлять приоритетами - nice - работающих процессов, раздавая или убирая бонусы процессорного времени в зависимости от настроек в файле. Настройки довольно просты и описывать их я не буду. Скажу лишь, что небольшой тюнинг может повернуть вашу систему "лицом к пользователю".

Вариант 2
ulatencyd
хардкорная версия verynice. позволяет управлять приоритетами cpu, io, определять cgroups приложения, имеет даже UI для настройки и контроля работы службы. IMHO для тех, кому VeryNice кажется недостаточным ;)

Глава 3 - серверная
KSM - сливаем память в единые блоки
Kernel Samepage Merging позволяет специальной службе ядра заниматься поиском совпадающих участков памяти и объединять их, высвобождая дубликаты. Абсолютно бестолковая технология для десктопа, но крайне востребованная на серверах виртуализации. Служба запускается периодически и использует процессорное время для поиска совпадающих страниц. Для примера - при наличии однотипных виртуальных машин Windows XP c 1Gb технология позволяет увеличить их количество до 52 на хост-системе с 16Gb ram. Если у вас есть похожие задачи или хочется просто поэкспериментировать, достаточно выполнить
echo 1 > /sys/kernel/mm/ksm/run
и через некоторое время посмотреть результаты
cat /sys/kernel/mm/ksm/pages_shared
Глава 4 - термоядерная
Brain Fuck Scheduler или как вынести мозг разработчикам ядра
Один из разработчиков ядра в свое время устроил большой срач в рассылке linux kernel, ссылаясь на то, что стандартный планировщик не ориентирован на десктопы и предложил свой вариант с "преферансом и поэтессами". Никакие доводы не смогли сломить его мнение. Предлагались варианты с настройкой стандартного планировщика, проводилась куча исследований, присылалось много бенчмарков. По результатам срача в основное ядро этот планировщик так и не приняли, поскольку он оказался больше похож на плацебо. Тем не менее, если кто-либо использует его, поделитесь в комментах о своих ощущениях по сравнению со стандартом Completely Fair Scheduler, используемом в большинстве Linux дистрибутивов.


Тэги: bfs ksm Linux performance swap ultatencyd zram zswap
+ 4 -
Похожие Поделиться

cppmm 28.07.2014 08:43 #
За третью главу спасибо. Как-то я эту фичу ждал-ждал, когда её ещё только анонсировали, но в стабильные ядра не пустили, а потом и забыл про неё. Вот, теперь вспомнил, благодаря посту. :)
thoughtful_fox 28.07.2014 14:22 #
Про BFS. Никаких бенчмарков и специальных замеров не делал, но и ничего особенного или "волшебного" все равно не заметил. То видео, которое тормозило - тормозило себе и дальше. То, что летало, летать не перестало. Нуууу, наверно, что-то стало быстрее на 0.5%, кто знает...)
BFS делал только на генте. Что там как там на других дистро - не знаю. Еще один нюанс - BFS кажися не поддерживает CGROUPS (ну очевидно, десктоп)

Про KSM. Говорили, что эта штука поможет даже с каким файрфоксом или хромом, которые теперь отдельные процессы на вкладку делают. Но, либо там уже вся оптимизация есть, либо я что-то неправильно готовлю, но у меня вся эта радость работает только для KVM виртуальных машин, которых в худший рабочий понедельник аж одна запущена.

Как-то на досуге попробую zswap. Хотя... Моя основная проблема - браузер с кучкой тяжелых вкладок, гигантский проект в сублиме, скайп, иногда еще один браузер, и раз в неделю виртуалка с виндой (и ненавистным ие9, пусть горит он в аду, и его создатели, и люди, которые все ни как не могут апдейтнуть свой сраный ентерпрайз к человеческим технологиям)). 4Гб, когда вся эта фигня запущена тупо не хватает. НО я боюсь, виртуальная машина в носу будет иметь весь этот zswap... Те не менее попробовать стоит
dront78 28.07.2014 16:41 #
ну естессно панацеи не бывает, тем не менее у меня рабочая система выглядит так
одновременно eclipse, netbeans, chrome с десяток вкладок документации, эмуль дроида 4.4, + 512 метров на xfce, Skype, pulse, network manager и проч приблуды автоматизации юзабилити. проект здоровый в 6 железных гигов не влезает, учитывая отладку java и c++
zswap спасает. при желании можно ещё вин7 в эмуль загнать и будет работать, но уже с лёгким swap io, правда терпимо
thoughtful_fox 29.07.2014 14:36 #
Значит, попробую) ну а вдруг...
dront78 28.07.2014 16:50 #
зы. для ie прикольная приблуда netrenderer.com
thoughtful_fox 29.07.2014 14:35 #
Это она извне прикольная. А когда у тебя джаваскриптовых сурсов 5M только чистого текста, не считая либ, то без живого дебаггера как-то печально)
Axel Razorback 12.09.2014 08:36 #
BFS не повышает производительность, он просто делает десктоп более отзывчивым. разница по сравнению CFS заметна.