Тюнинг работы сервера под большие нагрузки

Производительность — один из наиболее заметных параметров системы. Именно на её недостаток чаще всего жалуются пользователи. Ниже приведены некоторые элементарные способы по анализу производительности системы.

Почему не Xen?

В отличие от Xen, обеспечивающего два вида виртуализации: посредством «чистого» гипервизора (hypervisor) и паравиртуализацию (тот же гипервизор, однако гостевые ОС сообщаются с ним не напрямую, а через специальный небольшой интерфейс; при этом ядра систем должны быть подвергнуты модификации), в KVM принят только первый. Это ПО поддерживает технологии аппаратной виртуализации – к ним относятся практически идентичные расширения наборов команд процессоров Intel VT и AMD SVM (или AMD-V). Корректнее даже будет сказать, что KVM предназначено для раскрытия их возможностей.

Второе и главное отличие KVM от Xen состоит в его легковесности – ее удалось добиться, переложив ряд функций на ядро Linux. И это более чем оправдано. Посудите сами. Основная задача программного слоя, который называется гипервизор, заключается в распределении ресурсов между гостевыми ОС. Однако современное оборудование с каждым днем становится сложнее. Соответственно, требуется все больше усилий, чтобы «отразить» его в гипервизоре. Но ведь все эти функции уже реализуются в ядре Linux. Поэтому разработчики KVM не стали дублировать функциональность (как в случае с Xen), а полагаются на готовые средства.

Задачи, выполняемые ядром Linux

Кроме всего прочего, в круг задач, выполняемых ядром, входят следующие.

  • Диспетчеризация процессов. У компьютера имеется один или несколько централь­ных процессоров (CPU), выполняющих инструкции программ. Как и другие UNIX- системы, Linux является многозадачной операционной системой с вытеснением. Много­задачность означает, что несколько процессов (например, запущенные программы) могут одновременно находиться в памяти и каждая может получить в свое распо­ряжение центральный процессор (процессоры). Вытеснение означает, что правила, определяющие, какие именно процессы получают в свое распоряжение центральный процессор (ЦП) и на какой срок, устанавливает имеющийся в ядре диспетчер процессов (а не сами процессы).  
  • Управление памятью. По меркам конца прошлого века объем памяти современного компьютера огромен, но и объем программ также соответственно увеличился. При этом физическая (оперативная) память осталась в разряде ограниченных ресурсов, которые ядро должно распределять между процессами справедливым и эффективным образом. Как и в большинстве современных операционных систем, в Linux исполь­зуется управление виртуальной памятью — технология, дающая два основных преимущества.
    • Процессы изолированы друг от друга и от ядра, поэтому один процесс не может читать или изменять содержимое памяти другого процесса или ядра.
    • В памяти требуется хранить только часть процесса, снижая таким образом объем памяти, требуемый каждому процессу и позволяя одновременно содержать в опе­ративной памяти большее количество процессов. Вследствие этого повышается эффективность использования центрального процессора, так как в результате увеличивается вероятность того, что в любой момент времени есть по крайней мере один процесс, который может быть выполнен центральным процессором (процессорами).
  • Предоставление файловой системы. Ядро предоставляет файловую систему на диске, позволяя создавать, считывать обновлять, удалять файлы, выполнять их выборку и производить с ними другие действия.
  • Создание и завершение процессов. Ядро может загрузить новую программу в память, предоставить ей ресурсы (например, центральный процессор, память и доступ к файлам), необходимые для работы. Такой экземпляр запущенной программы называется процессом. Как только выполнение процесса завершится, ядро обеспе­чивает высвобождение используемых им ресурсов для дальнейшего применения другими программами.
  • Доступ к устройствам. Устройства (мыши, мониторы, клавиатуры, дисковые и лен­точные накопители и т. д.), подключенные к компьютеру, позволяют обмениваться информацией между компьютером и внешним миром — осуществлять ввод/вы­вод данных. Ядро предоставляет программы с интерфейсом, упрощающим доступ к устройствам. Этот доступ происходит в рамках определенного стандарта. Одновре­менно с этим ядро распределяет доступ к каждому устройству со стороны нескольких процессов.
  • Работа в сети. Ядро от имени пользовательских процессов отправляет и принимает сетевые сообщения (пакеты). Эта задача включает в себя маршрутизацию сетевых пакетов в направлении целевой операционной системы.
  • Предоставление интерфейса прикладного программирования (API) системных вызовов. Процессы могут запрашивать у ядра выполнение различных задач с использовани­ем точек входа в ядро, известных как системные вызовы. 

Кроме перечисленных выше свойств, такая многопользовательская операционная система, как Linux, обычно предоставляет пользователям абстракцию виртуального персонального компьютера. Иначе говоря, каждый пользователь может зайти в систему и работать в ней практически независимо от других. Например, у каждого пользователя имеется собственное дисковое пространство (домашний каталог). Кроме этого, пользова­тели могут запускать программы, каждая из которых получает свою долю времени цен­трального процессора и работает со своим виртуальным адресным пространством. Эти программы, в свою очередь, могут независимо друг от друга получать доступ к устрой­ствам и передавать информацию по сети. Ядро занимается разрешением потенциальных конфликтов при доступе к ресурсам оборудования, поэтому пользователи и процессы обычно даже ничего о них не знают.

Установка XanMod

Весь процесс установки будет происходить на Ubuntu , но, данная инструкция подойдет и для остальных deb ориентированных систем. И так, переходим в терминал и вводим команду для подключения репозитория XanMod:

echo ‘deb releases main’ | sudo tee /etc/apt/ && wget -qO — | sudo apt-key add —

Установка XanMod

После чего обновляем списки пакетов командой:

sudo apt update

И устанавливаем само ядро введя команды в терминале:

Установка XanMod

sudo apt install linux-xanmod

После завершения установки, перезагружаем компьютер. Затем можно проверить какое ядро используется в системе. Для этого в терминале вводим команду:

uname -r

Установка XanMod

Как видите на скриншоте, в системе стоит ядро На данный момент весьма новое ядро, в то время как по умолчанию в Ubuntu стоит ядро версии 5.3.0. Так же вы можете установить данное ядро в Debian 10, что собственно расширит поддержку оборудования в Debian. Так как ядро более свежее и соответственно, имеется поддержка свежего оборудования:

А на этом сегодня все. Надеюсь данная статья будет вам полезна. С уважением Cyber-X

Обновляем ядро в Ubuntu

Официальный сайт, на котором находится информация по каждому обновлению ядра, называется Именно там вы можете просмотреть абсолютно все апдейты и изменения, внесенные в интересующую версию. Что же касается самого процесса обновления, то происходит он в ручном или автоматическом режиме. Каждый из этих вариантов имеет свои сложности и особенности, поэтому мы предлагаем детально изучить их по очереди, чтобы в итоге остановиться на оптимальном. Однако для начала давайте разберемся, как узнать текущую версию ядра.

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Определяем текущую версию ядра в Ubuntu

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Определение текущей версии ядра в Убунту происходит через стандартный «Терминал» путем ввода всего одной команды. Для этого даже не понадобятся права суперпользователя, а весь процесс займет всего несколько секунд.

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Теперь вы знаете, какое именно ядро используется в вашей сборке и сможете понять, стоит ли его сейчас обновлять и от какого типа отталкиваться. В будущем, по завершении инсталляции апдейтов, мы рекомендуем задействовать эту команду, чтобы определить корректность установки файлов.

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Способ 1: Ручной режим обновления

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Ручной режим обновления ядра в Ubuntu займет немного больше времени, нежели автоматический, но при этом вы получите вариативность в выборе версий и даже сможете их скачать заранее с другого компьютера, например, на флешку, если подключение к сети на главном ПК отсутствует. От вас потребуется лишь предварительно выбрать подходящую сборку и задействовать приведенные команды, чтобы инсталлировать ее.

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Перейти на официальный сайт для скачивания файлов ядра Linux

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Проблемы с инсталляцией ядра через стандартный менеджер пакетов — ситуация часто встречающаяся. В большинстве случаев она решается путем использования стороннего установщика. Для начала его следует добавить, а потом уже воспользоваться встроенными функциями.

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
  1. Вы можете задействовать эту же сессию «Терминала» или создать новую. Введите в ней команду sudo apt-get install gdebi и нажмите на Enter.
  2. Для подтверждения прав доступа потребуется ввести пароль суперпользователя.
  3. При появлении уведомления о расширении объема занятого дискового пространства выберите вариант Д.
  4. После этого снова переместитесь к тому пути, куда были помещены DEB-пакеты, например, через команду cd ~/Загрузки.
  5. Используйте строку sudo gdebi linux-headers*.deb linux-image-*.deb.
  6. Ожидайте окончания чтения и распаковки файлов.
  7. Подтвердите операцию инсталляции пакетов.
  8. Для применения всех изменений потребуется обновить загрузчик путем ввода sudo update-grub.
  9. Вы будете уведомлены, что обновление прошло успешно.
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Сразу же после перезагрузки компьютера все изменения вступят в силу. Теперь вы будете использовать операционную систему на новом ядре. Если вдруг загрузчик по каким-либо причинам сломался, обратитесь к разделу в конце данного материала. Там мы детально расскажем о причинах неполадок и опишем метод решения.

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Способ 2: Автоматическое обновление ядра

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

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

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
  1. Для начала перейдите в папку, куда будет инсталлирован скрипт. Запустите консоль и введите команду cd /tmp.
  2. Используйте команду git clone git://-Script-Writer-62850/Ubuntu-Mainline-Kernel-Updater.
  3. Если вы получили уведомление об отсутствии команды git, следуйте приведенной рекомендации по инсталляции.
  4. После останется только записать скрипт путем вода bash Ubuntu-Mainline-Kernel-Updater/install.
  5. Подтвердите добавление файлов, выбрав положительный вариант ответа.
  6. Проверка обновлений запускается через KernelUpdateChecker -r yakkety. Учтите, что ветка -r используется для определения версии дистрибутива. Указывайте опцию в соответствии со своими потребностями.
  7. Если апдейты ядра будут найдены, установите их через sudo /tmp/kernel-update.
  8. По окончании обязательно проверьте текущее активное ядро через uname -r и обновите GRUB.
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

Теперь каждый раз, когда понадобится выполнить поиск обновлений ядра, вы можете задействовать указанную выше команду для осуществления поставленной задачи в автоматическом режиме. Вам лишь останется подтверждать все предупреждения о расширении занятого дискового пространства. Если скрипт больше не нужен, рекомендуется удалить его из системы через следующие команды:

Обновляем ядро в Ubuntu
Обновляем ядро в Ubuntu

rm ~/.config/autostart/ sudo rm /usr/local/bin/KernelUpdate{Checker,ScriptGenerator}

Читайте также:  KMPlayer для Linux - да они даже не братья!

Базовый Тюнинг Ядра Linux для тяжелых проектов

Ядро Linux в настоящее время имеет хорошие значения по умолчанию для sysctl, но всегда есть возможности для улучшения. Некоторые параметры могут использоваться для настройки производительности, другие могут быть критически важными для усиления безопасности.

sysctl — это интерфейс для просмотра и динамического изменения параметров в Linux и других операционных системах * NIX. В Linux большинство динамических настроек ядра можно изменить с помощью sysctl.

Изменение параметров по умолчанию может привести к повышенному потреблению ресурсов. Не стоит просто копировать и вставлять приведённые ниже параметры, обязательно обратитесь к документации при их использовании.

Посмотреть список текущих значений параметров ядра можно введя команду:

ipcs -l

В кратце опишем параметры . Для более детальной информации необходимо обратиться к справочным материалам.

В первом разделе указаны параметры сообщений в системе.

Параметр MSGMNI — количество очередей сообщений, параметр MSGMAX размер сообщения, которое можно поместить в очередь, а параметр MSGMNB влияет на размер очереди.

Для параметра MSGMAX нужно задать значение 64 Кбайта (то есть 65536 байт), а значение MSGMNB нужно увеличить до 65536.

В разделе — Shared Memory Limits (Лимиты общей памяти), предельное значение SHMMAX — максимальный размер в байтах общей памяти. Предельное значение SHMALL — это максимальное кол-во страниц совместно используемой памяти в системе.

Рекомендуется задать для SHMMAX значение, численно равное объему физической памяти в системе. Однако минимально необходимое в системах x86 значение равно 268435456 (256 Мбайт), а в 64-битных системах — 1073741824 (1 Гбайт).

Следующий раздел описывает количество семафоров, доступных для операционной системы.

Базовый Тюнинг Ядра Linux для тяжелых проектов

Семофор это блокировки, которые переводят другие процессы в состояние ожидания. Параметр ядра sem состоит из четырех элементов: SEMMSL, SEMMNS, SEMOPM и SEMMNI. Значение SEMMNS равно произведению SEMMSL на SEMMNI. Подробней с ними можно ознакомиться в статье

Читайте также:  Как удалить папку в Linux через терминал (консоль)

Изменить параметры ядра, можно отредактировав файл /etc/ Если этот файл не существует, создайте показаны примеры строк, которые нужно поместить в этот файл:

#Пример для сервера с 16 Гбайтами оперативной памяти:

#

1024000 32 4096

История реализации механизмов live patching

Первой рабочей реализацией исправления ядра на лету была Ksplice. Этот проект был частью университетских исследований MIT. Для продвижения новой технологии четверо студентов создали компанию Ksplice, Inc. Oracle приобрели компанию Ksplice и сделали сервис одним из основных компонентов своего дистрибутива Oracle Linux.

В 2014 году Red Hat создала Kpatch и выпустила его под лицензией GPLv2. В том же году SUSE объявил о выходе kGraft. Обе технологии очень похожи с небольшими отличиями. Оба инструмента нацелены в первую очередь на подмену функций с использованием встроенного механизма ядра Ftrace. Патч для наложения в обоих случаях оформляется как подгружаемый модуль ядра. Тем не менее, как в механизме применения патчей, так и в их формате и процедуре их подготовки у Kpatch и kGraft есть существенные различия. В частности, при применении патчей Kpatch проверяет, что ни один из процессов не выполняет функции, которые будут обновлены. Для этого приходится ненадолго останавливать все процессы в системе. kGraft же работает с каждым процессом отдельно – некоторые из них при этом могут использовать старые варианты функций, некоторые – уже новые. Постепенно все процессы в системе переходят на использование новых функций. При этом нет необходимости их останавливать. Если kGraft требует создания патча вручную, Kpatch позволяет создавать патчи как вручную, так и автоматически.

Коммерческие предложения

Поскольку эта функция пользуется большим спросом, большинство дистрибутивов Linux предлагают такую возможность только в качестве платного дополнения. Такие технологии, как Ksplice, Kpatch и kGraft, коммерчески интересны для поставщиков. Типичный пользователь Livepatch готов платить за ее использование.

Хотя есть несколько исключений, большинство пользователей в настоящее время не имеют прямого доступа к этой технологии. Постепенно это может измениться, особенно сейчас, когда Livepatch стал располагаться в ядре.