Параметры ядра Linux для сервера
Этот материал об отличиях, которые необходимо внести в ядро server-версии. Он поможет вам понять, почему использование серверной версии ядра все-таки предпочтительнее именно для решения серверных задач, на тот случай, если вы вдруг задумали заточить под это дело desktop-версию.
Кроме того, для тех, кто еще только осваивает ядро Linux или готовиться сделать свою первую пересборку ядра, здесь есть интересная и полезная информация.
По возможности делайте ядро монолитным — функции ядра будут находится в одном адресном пространстве и работать быстрее.
Параметры для сервера
Следующие параметры необходимо установить у серверного ядра.
Тип ввода-вывода
Enable the block layer ---> IO Schedulers ---> [*] CFQ Group Scheduling support Default I/O scheduler (Deadline) --->
Существует четыре различных типа планирования I/O (ввода/вывода): CFQ (Completely Fair Queuing), Deadline, NOOP, и Anticipatory.
Для рабочей станции обычно ставят CFQ, а Deadline для серверов.
Цель, преследуемая планированием ввода/вывода одинакова: оптимизировать пропускную способность жесткого диска для различных классов рабочей нагрузки.
В конфигурационном файле это описано опциями CONFIG_DEFAULT_IOSCHED, CONFIG_IOSCHED_CFQ, _DEADLINE, _AS, _NOOP.
- CFQ пытается сбалансировать и сделать равными все запросы на чтение/запись.
- Deadline дает приоритет на запросы чтения.
- Anticipatory дает приоритет уже запущенным приложениям.
- NOOP рассчитан SSD диски или системы с железом, поддерживающим планирование I/O, например большие RAID-массивы SCSI. Первым пришёл — первым ушёл в очередь планировщика низкоуровневой оболочки. На VDS необходимо выставлять его, планированием ввода/вывода занимается гипервизор.
Кстати, можно указывать эти опции при загрузке, использовать различные типы для любого блочного устройства или менять их на лету.
Preemption (приоритетное прерывание обслуживания — ППО)
Processor type and features ---> Preemption Model (No Forced Preemption (Server)) --->
У серверного ядра его рекомендуется выключить (CONFIG_PREEMPT_NONE=y), а у рабочей станции — включить (CONFIG_PREEMPT_BKL=y, CONFIG_PREEMPT_VOLUNTARY=y). ППО взаимодействует с планированием ввода/вывода, для достижения лучшей производительности, большей эффективности и отдачи. В ядрах без ППО код выполняется вплоть до завершения. Поскольку ядро Linux позволяет прервать любую задачу в любой точке ее работы (но, конечно не в тот момент, когда это небезопасно), и задачи с меньшим приоритетом могут выскочить наверх списка задач, то ППО подходит именно для рабочих станций, потому что пользователи обычно выполняют множество задач одновременно: пишут документы, слушают музыку, загружают файлы и т.п. И пользователям безразлично насколько эффективно фоновое приложение, им важно то приложение, с которым они в данный момент работают.
Если загрузка веб-страницы будет длится чуть дольше, пока пользователь пишет e-mail, что же, это приемлемая цена. В общем, эффективность и производительность снижаются, но не настолько, чтобы пользователя это беспокоило.
На серверах вам необходимо минимизировать любые и все возможные перепады в производительности, поэтому обычно и практикуется отключение ППО.
Тики и Герцы (Ticks & HZ)
Processor type and features ---> Timer frequency (100 HZ) --->
Ядро поддерживает таймеры прерывания по запросу (CONFIG_NO_HZ=y), так называемая «tickless» опция. Это значит, что в периоды отсутствия активности система действительно бездействует, это предполагает меньший расход энергопотребления и меньший нагрев процессора.
Таймер прерываний ядра сервера следует установить на 100 Гц (CONFIG_HZ=100, CONFIG_HZ_100=y), это означает, что он принимает 100 прерываний своей деятельности в секунду. С другой стороны, на это можно взглянуть так: ядро 100 раз в секунду проверяет есть ли у процессора какие-либо задачи.
Таймер прерываний ядра рабочей станции следует установить в 250 Гц или выше. Меньшие значение означают меньшие издержки и высокие задержки, большие значения — высокие издержки и меньшие задержки, то есть при больших значениях система быстрее отвечает, но ценой высокой нагрузки на процессор. Некоторые процессы требуют больших значений прерываний, например, сервера обработки видео и голосовых данных (VoIP) требуют 1000Гц.
Что можно отключить
Отключив поддержку ненужных функций, вы сэкономите память, занимаемую ядром и время компиляции.
Machine Check / overheating reporting
Processor type and features ---> [*] Machine Check / overheating reporting [*] Intel MCE features [ ] AMD MCE features
Machine Check позволяет процессору уведомить ядро, если будет обнаружена проблема (перегрев, повреждение данных). Оставьте только тот процессор, который у вас.
CPU microcode loading support
Processor type and features ---> [*] CPU microcode loading support [*] Intel microcode loading support [ ] AMD microcode loading support
Производители процессоров выпускают обновления стабильности и безопасности для микрокода процессора. Несмотря на то, что микрокод можно обновить с помощью BIOS, ядро Linux также может применять эти обновления во время загрузки. Эти обновления предоставляют исправления ошибок, которые могут быть критичны для стабильности вашей системы. Без этих обновлений вы можете наблюдать ложные падения или неожиданные зависания системы, которые может быть сложно отследить. Оставьте только тот процессор, который у вас.
RAID-массивы
Device Drivers ---> [ ] Multiple devices driver support (RAID and LVM) ----
Вряд ли на VDS сервере есть RAID-массивы. Их поддержку можно отключить, сэкономив неплохо памяти. Они может быть и есть, но для вас они прозрачны и не видны — это забота виртуализации.
Дисковая квота
File systems ---> [ ] Quota support
Дисковая квота — способ ограничения размера дискового пространства для пользователя. Если вы один пользуетесь сервером, то квота вам ни к чему.
vda диски
Processor type and features ---> [*] Linux guest support ---> [*] Enable Paravirtualization code [*] KVM Guest support (including kvmclock) Device Drivers ---> Virtio drivers ---> <*> PCI driver for virtio devices [*] Block devices ---> <*> Virtio block driver [*] Network device support ---> <*> Virtio network driver SCSI device support ---> [*] SCSI low-level drivers ---> [*] virtio-scsi support
После установки этих параметров, виртуальный жесткий будет в /dev/vda. Подробнее…
Устройства ввода (клавиатура, мышка…)
Device Drivers ---> Input device support ---> -*- Generic input layer (needed for keyboard, mouse, ...) < > Export input device LEDs in sysfs < > Support for memoryless force-feedback devices {M} Polled input device skeleton {M} Sparse keymap support library {M} Matrix keymap support library *** Userland interfaces *** < > Mouse interface < > Joystick interface < > Event interface < > Event debugging *** Input Device Drivers *** [*] Keyboards ---> [ ] Mice ---- [ ] Joysticks/Gamepads ---- [ ] Tablets ---- [ ] Touchscreens ---- [ ] Miscellaneous devices ---- Hardware I/O ports --->
На сервере не нужны ни джойстик, ни мышка, нет необходимости отображать состояние индикаторов в sysfs и прочие устройства.
Звук, мультимедиа, карты памяти
Device Drivers ---> < > Multimedia support ---- Graphics support ---> < > Sound card support ---- HID support ---> [ ] USB support ---- < > Ultra Wideband devices ---- < > MMC/SD/SDIO card support ---- < > Sony MemoryStick card support ----
Звуковая карта, USB, карты памяти, UWB — Ultra Wideband devices — беспроводная технология связи на малых расстояниях при низких затратах энергии, их поддержка вряд ли потребуются на сервере. HID support — класс устройств USB для взаимодействия с человеком. Этот класс включает в себя такие устройства как клавиатура, мышь, игровой контроллер. На сервере можно отключить все.