Оптимизация linux

Page 1

Оптимизация Linux В этой заметке опишу несколько способов оптимизации Linux на десктопе, для выполнения различных задач: от простого использования в качестве домашней мультимедийной системы до рабочей станции. Операционные системы семейства GNU/Linux работают превосходно на широком спектре оборудования и эффективно потребляют ресурсы, но это же является и недостатком: система должна работать везде, потому кое-какие специфичные для конкретного оборудования оптимизации отключаются. Поэтому хорошей практикой является "подгонка" системы под свой компьютер, которая может быть либо "косметической" (обычная настройка и включение нужных параметров), так и "хардкорная" (пересборка ядра или полностью всей системы, включение новых фич процессора, оптимизация флагами компилятора и т.д.).

Примечание: я использую для редактирования и создания конфигов терминал, так как на мой взгляд это гораздо быстрее и удобнее. Вы же можете использовать привычный вам графический текстовый редактор (gedit, kate, kwrite и прочие).

Графическое окружение. Графические окружения GNOME, KDE и Cinnamon используют различные графические эффекты, а также потребляют ощутимое количество оперативной памяти. Поэтому если у вас слабый компьютер или ноутбук, то лучше всего использовать легковесные окружения, такие как Lxde, Xfce, MATE, "голые" оконные менеджеры, типа Openbox, Fluxbox, i3 либо легковесные дистрибутивы, в составе которых идут не менее легковесные графические окружения. Также используйте менее ресурсоёмкие программы.

Создайте в домашнем каталоге, пустую директорию .compose-cache . Это позволит задействовать кэширование информации, распарсенной Xorg и в результате немного увеличит скорость запуска графических приложений.

Если вы используете графическое окружение KDE, то:

• Отключите лишние графические эффекты в настройках;


• Выставьте движок отрисовки OpenGL 2.0 (если у вас не совсем древняя видеокарта, в противном случае лучше выбрать OpenGL 1.2 или вовсе Xrender) и тип отрисовки Растровая (Raster); • Отключите композитинг для полноэкранных оконо (Параметры системы Эффекты - Дополнительно); • В KDE 4 используйте стиль отрисовки QtCurve, так как он меньше грузит видеокарту, чем Oxygen; • Параметры системы - Оформление приложений - вкладка Тонкая настройка Графические эффекты. Выберите вариант с наименьшей нагрузкой на процессор; • Если вы не используете программы из состава KDE, такие как KMail, то отключите службу Akonadi, дабы сэкономить память. Для этого откройте файл ~/.config/akonadi/akonadiserverrc. Измените строку StartServer=true на StartServer=false ;

Если вы используете графическое окружение Unity (только для Ubuntu):

• Установите утилиты настроки Compizconfig Settings Manager и Unity Tweak Tool; • Запустите Compizconfig. Отключите ненужные графические эффекты. • Запустите Unity Tweak Tool. В настройках Dash отключите фоновое размытие и online-поиск. Также можете изменить некоторые другие параметры по своему вкусу.

Для ноутбуков: в окружениях МАТЕ, Xfce и других легковесных, используется программная отрисовка (композитинг). Это разгружает видеокарту, но дополнительно нагружает процессор, а также появляются артефакты отрисовки, известные как тиринг. Если вы запускали, например, игру с выключенной вертикальной синхронизацией (Vsync), то вы знаете что это такое. Если видеокарта ноутбука позволяет задействовать аппаратное ускорение через OpenGL, то желательно установить композитный менеджер. Я рекомендую Compton, так как он очень легковесный, не перегружает систему и отлично выполняет свои обязанности. Установка в Debian-based дистрибутивах:

sudo apt install compton

В Linux Mint с графической средой MATE, есть возможность включить Compton в настройках сразу, так как он идёт в комплекте. Поэтому рекомендую. Для остального, после установки, создаём конфигурацию:


touch ~/.config/compton.conf nano ~/.config/compton.conf

Вставляем следующее содержимое:

backend = "glx"; vsync = "opengl-swc"; # Не использовать буфер ???трафаретов (--glx-no-stencil) glx-no-stencil = true; # ??? (--glx-swap-method) (возможны значения от -1 до 6) glx-swap-method = 1; # Копировать неизменившиеся области из первичного буфера (--glx-copy-from-front) glx-copy-from-front = false; # Копировать неизменившиеся области при помощи MESA_copy_sub_buffer (-- glxuse-copysubbuffermesa) #При использовании проприетарного видеодрайвера, возможны проблемы. Поэтому в случае их использования, лучше закоментировать данный параметр (поставить перед ним #) glx-use-copysubbuffermesa = true; # Использовать шейдеры GL_EXT_gpu_shader4 glx-use-gpushader4 = true; # Отрисовка на оверлейных окнах X Composite вместо окна рута (--paint-on-overlay) paint-on-overlay = true;

#Если нужна только вертикальная синхронизация, то остальное не копируем!!!

# Включить тени (-c) shadow = true; # Тень на окнах Drag-and-Drop (-G) no-dnd-shadow = true; # Тень на окнах доков/панелей (-C) no-dock-shadow = true; # Радиус тени (-r) shadow-radius = 7; # Смещение тени слева (-l) shadow-offset-x = -7;


# Смещение тени сверху (-t) shadow-offset-y = -7; # Непрозрачность теней (-o) shadow-opacity = 0.7; # Значение красного цвета тени (--shadow-red) shadow-red = 0.0; # Значение зеленого цвета тени (--shadow-green) shadow-green = 0.0; # Значение синего цвета тени (--shadow-blue) shadow-blue = 0.0; # Очищает маску тени позади окна (-z) clear-shadow = true; # Игноирировать тени на фигурных окнах (--shadow-ignore-shaped) shadow-ignore-shaped = false; # Включить затухание (-f) fading = true; # Скорость затухания (-D) fade-delta = 10; # "Шаг" прозрачности при проявлении (-I) fade-in-step = 0.2; # "Шаг" прозрачности при затухании (-O) fade-out-step = 0.2; # Отключить затухание окнон при открытии/закрытии (--no-fading-openclose) no-fading-openclose = true; # Прозрачность меню (-m) menu-opacity = 1.0; # Непрозрачность неактивных окон (-i) inactive-opacity = 0.65; # Непрозрачность активных окон active-opacity = 1.0; # Непрозрачность строки заголовка и границ окна (-e) frame-opacity = 1.0; # Определяет окна со скругленными углами (--detect-rounded-corners) detect-rounded-corners = true; # Определяет параметр _NET_WM_OPACITY на клиентских окнах (--detect-clientopacity) detect-client-opacity = true; # Группировать окна приложения на основе параметра WM_TRANSIENT_FOR (–


detect-transient) detect-transient = true; # Группировать окна приложения на основе параметра WM_CLIENT_LEADER (-detect-client-leader) detect-client-leader = true; # Затемнение неактивных окон (--inactive-dim) inactive-dim = 0.1; # Игнорировать при затемнении прозрачность окон (--inactive-dim-fixed)

inactive-dim-fixed = true; # Использовать параметр EWMH _NET_ACTIVE_WINDOW для определния активного окна

(--use-ewmh-active-win) use-ewmh-active-win = true; wintypes: { # Подсказки tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; }; # Уведомления notify = { fade = true; shadow = true; opacity = 0.9; focus = false; }; };

Сохраняем. Осталось добавить его в автозапуск. Это можно сделать как в графической оболочке (в настройках), так и через терминал. Нужно добавить команду compton -b в автозагрузку. Конфиг будет подхватываться на лету.

Раз уж мы затронули тему ноутбуков, то давайте заодно и оптимизируем их энергопотребление. По умолчанию, ноутбучное энергопотребление в Linux не слишком оптимально, потому батарея будет садиться немного быстрее, чем в Windows (а на некоторых ноутбуках и намного быстрее). На помощь придёт TLP. TLP - это более продвинутая альтернатива утилите laptop-mode-tools, которя следит за различными аппаратными компонентами, подбирает для них оптимальные параметры и знает о многих дистрибутивах Linux и специфичных для них настройках. Установка в Ubuntu и производных:


sudo apt-get remove laptop-mode-tools sudo add-apt-repository ppa:linrunner/tlp sudo apt-get update sudo apt install tlp tlp-rdw sudo tlp start

Дополнительно для ноутбуков ThinkPad:

sudo apt install tp-smapi-dkms acpi-call-dkms

Для Debian:

Доступен в тестовой ветке (будущий Debian 9). Для 8:

echo "deb http://repo.linrunner.de/debian jessie main" | sudo tee -a /etc/apt/sources.list sudo apt-get update && sudo apt install tlp tlp-rdw

Настройки находятся в файле /etc/default/tlp

1. Если в Kubuntu (KDE) есть явные проблемы в управлении питания при смене источника, то в System Settings -> Power Management -> Edit Profile.

Профиль "Powersave" (для батареи): отметить. Профиль "Performance" (от сети): снять галку.

2. На ядрах 3.x система кажется медленной. Обходной путь - SATA_LINKPWR_ON_BAT=medium_power

3. При изменении частоты процессора проблемы. Пробуйте удалить ondemand sudo update-rc.d -f ondemand remove


4. Если на ядрах 3.х ноутбук не может уснуть. Пробуйте BAY_POWEROFF_ON_BAT=0

5. Если жёсткий диск слишком часто хлопает головками при парковке, то успокойте его DISK_APM_LEVEL_ON_BAT=128

6. У меня твердотельный Crucial M4 SSD и от батареи всё тупит. Для Crucial отключите APM DISK_APM_LEVEL_ON_AC="255 255" DISK_APM_LEVEL_ON_BAT="255 255"

7. При любых проблемах со звуком во время смены источника питания пробуйте SOUND_POWER_SAVE=0

Оптимизация интернет-соединения. 1) Можно увеличить скорость загрузки страниц, а также стабильность соединения, проведя кое-какие твики в сетевой подсистеме. Первым делом:

sudo nano /etc/nsswitch.conf Находим строку:

hosts:

files mdns4_minimal [NOTFOUND=return] dns

Снизу подписываем:

hosts:

files dns

Должно получиться так:


hosts: hosts:

files mdns4_minimal [NOTFOUND=return] dns files dns

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

2) Также для быстрого открытия сайтов, можно включить кэширование DNS. В этом нам поможет локальный кэширующий DNS-прокси - pdnsd. Устанавливаем:

sudo apt install pdnsd

В окне выбора параметров указываем "Ручное". Далее:

sudo nano /etc/default/pdnsd

Меняем START_DAEMON=no на START_DAEMON=yes . Теперь осталось настроить:

sudo nano /etc/pdnsd.conf

Пример конфига:

global { perm_cache=30000; // Максимальный размер кэша в килобайтах cache_dir="/var/cache/pdnsd"; run_as="pdnsd"; server_ip = 127.0.0.1; // Если планируется раздавать интернет и на другие машины в локальной сети, то укажите здесь адрес нужного сетевого интерфейса (например eth1) status_ctl = on; paranoid=on; min_ttl=60m; // Минимальное время сохранения записи в кэше max_ttl=1w; // Максимальное время сохранения записи в кэше timeout=6; // Максимальный тайм-аут par_queries=2; // Количество одновременно опрашиваемых DNS серверов } source {


owner=localhost; file="/etc/hosts"; } rr { name=localhost; reverse=on; a=127.0.0.1; owner=localhost; soa=localhost,root.localhost,42,86400,900,86400,86400; } server { label = "darkdns"; ip = 82.151.98.162 // DNS сервера вашего провайдера 1 , 82.151.104.80 // DNS сервера вашего провайдера 2 , 8.8.8.8 // DNS сервер Google Public DNS 1 , 8.8.4.4 // DNS сервер Google Public DNS 2 , 208.67.222.222 // DNS сервер OpenDNS 1 , 208.67.220.220 // DNS сервер OpenDNS 2 , 156.154.70.1 // DNS сервер DNS Advantage 1 , 156.154.71.1 // DNS сервер DNS Advantage 2 ; timeout = 3; // Минимальный тайм-аут uptest = query; interval = 5m; ping_timeout = 300; // 30 seconds. purge_cache = off; exclude = .localdomain; policy = included; preset = off; }

Сохраняем. Запускаем:

sudo /etc/init.d/pdnsd start

3) Дополнительные твики для TCP/IP (использовать с осторожностью!)


sudo nano /etc/sysctl.conf

Добавляем в конец строки:

net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1800 net.ipv4.tcp_window_scaling = 0 net.ipv4.tcp_sack = 0 net.ipv4.tcp_timestamps = 0

Сохраняем. Далее:

sudo sysctl -p

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

cat /etc/init.d/rc | grep CONCURRENCY

Если значение CONCURRENCY будет makefile - значит ничего трогать не нужно. Если none, то:

sudo nano /etc/init.d/rc

Находим эту строку и меняем на CONCURRENCY=makefile Сохраняем и перезагружаемся.

2) В Ubuntu используется технология ureadahead, которая позволяет ускорить загрузку системы за счёт кэширования всех файлов начальной загрузки. Именно поэтому первый запуск Ubuntu происходит весьма медленно. Для дистрибутива Arch


Linux есть патчи с ureadahead (доступны в AUR), также доступен оверлей для Gentoo. Но. Можно заменить ureadahead на E4rat - специальную утилиту созданную только для файловой системы Ext4 и имеющую схожий принцип работы с ureadahead. В репозиториях Debian и Ubuntu её нет, но есть готовые deb-пакеты на Sourceforge.

Все происходит в три этапа: • e4rat-collect - собирает статистику по используемым файлам в течении определенного времени (по умолчанию 120 секунд, но может быть скорректировано) • e4rat-realloc - перераспределяет файлы из списка (помещает их в одну область диска) • e4rat-preload - заранее загружает нужные файлы в память Для установки качаем пакет: для 32-х битной системы; для 64-х битной системы. Далее, если вы делаете это в Ubuntu, то сначала нужно удалить ureadahead, иначе они будут конфликтовать:

sudo dpkg --purge ureadahead sudo apt-get update

Далее устаналвиваем пакет (двойным кликом либо через sudo dpkg -i e4rat_0.2.3_amd64.deb), и включаем параметр ядра init=/sbin/e4rat-collect

sudo nano /etc/default/grub

В строку GRUB_CMDLINE_LINUX_DEFAULT= добавляем init=/sbin/e4rat-collect сохраняем, далее:

sudo update-grub

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

sudo nano /etc/default/grub


Ниже параметра GRUB_CMDLINE_LINUX_DEFAULT есть параметр GRUB_CMDLINE_LINUX="", между кавычками вставляем параметр /sbin/e4rat-preload сохраняем, делаем sudo update-grub и перезагружаемся. Вот и всё. Теперь система будет запускаться значительно быстрее, чем раньше.

Увеличиваем доступную память. Недавно я написал статью о технологиях ZRAM и ZSWAP. Повторять то, что там написано смысла нет, вы можете просто перейти по ссылке. Напомню только для чего всё это. ZRAM - это модуль ядра Linux, который позволяет создать и разместить в оперативной памяти файл подкачки со сжатием, дабы не использовать для него медленный жёсткий диск или, в случае использования SSD-накопителя - не мучить его большими циклами записи. В памяти создаются несколько файлов подкачки, по числу процессорных ядер. При исчерпании доступной оперативной памяти, начинает использоваться подкачка, но так как она находится в оперативке, то данные просто сжимаются очень эффективными алгоритмами lzo и lz4, и жмутся, жмутся, покуда окончательно не исчерпается лимит памяти. Это позволяет разместить в 2 гигабайтах оперативки, до 4 или 5 гигов информации, потому с точки зрения приложений, памяти становится больше. ZSWAP похож на ZRAM, но здесь используется уже существующий на жёстком диске раздел или файл подкачки, а в оперативной памяти создаётся пул, в который помещаются и сжимаются данные перед их отправкой в раздел подкачки (swap). В результате, в ситуации, когда должна начать задействоваться подкачка, данные просто жмутся в этот пул, пока он не заполнится (по умолчанию он может разрастись на всю память, потому лучше установить ограничение). Как только пул заполнился сжатыми данными, он очень быстро сбрасывается в подкачку и снова начинает принимать данные. Это позволяет крайне сильно увеличить производительность при интенсивном использовании оперативной памяти. Если у вас 2 или 4 гига оперативки, и медленный жёсткий диск воспользуйтесь ZRAM, если памяти больше и нужен запас на случай активного её использования - используйте ZSWAP.

Регулировка порога включения подкачки. Если вы не собираетесь использовать ZSWAP или ZRAM, то можете увеличить порог, после которого система начинает задействовать подкачку. По умолчанию, в большинстве дистрибутивов, этот порог установлен на 60, то есть при исчерпании 40% оперативки, включается подкачка. Для того чтобы порог уменьшить:


sudo nano /etc/sysctl.conf

В конец этого файла добавляем строку vm.swappiness=10, сохраняем и выполняем:

sudo sysctl -p

Теперь подкачка будет включаться при исчерпании 90% оперативной памяти.

Preload и Prelink. 1) Preload - это демон, который считывает статистику часто используемых приложений, и заранее готовится их подгрузить, поэтому запуск становится быстрее. Установка на примере Debian-based дистрибутивов:

sudo apt install preload

Настройка не требуется.

2) Prelink - утилита для связывания исполняемых файлов с разделяемыми библиотеками. Дело в том, что обычно программа не содержит в себе весь необходимый для работы код. Вместо этого, данный код помещается в так называемые разделяемые библиотеки (файлы с расширением .so, то есть shared object), которые могут использовать сразу несколько запущенных программ. Но при запуске программы, она начинает искать на диске и подгружать эти библиотеки, и в зависимости от их размера и количества, время запуска программы может оказаться весьма большим. Тут и поможет Prelink, который заранее "свяжет" все исполняемые файлы и необходимыми им библиотеками. Установка в Debian:

sudo apt install prelink sudo prelink -avfmR

В случае возникновения проблем, можно отключить линковку:

sudo prelink -au


Запускать prelink нужно после каждого обновления или установки программ. Можно включить периодическую перелинковку:

sudo nano /etc/default/prelink

Меняем параметр PRELINKING=unknown на PRELINKING=yes. Сохраняем и запускаем:

sudo /etc/cron.daily/prelink

В Ubuntu и её производных необходимости в Prelink нет, так как там используется другой механизм линковки под названием DT_GNU_HASH.

Если вы используете графическое окружение KDE, то можно ощутимо увеличить скорость его загрузки, если сообщить ему что его библиотеки слинкованы и запускать kdeinit не нужно. Для этого нужно создать малюсенький скрипт:

touch ~/.kde4/env/kde_prelink.sh

Вписываем туда:

#!/bin/bash export KDE_IS_PRELINKED=1

Сохраняем и даём права на выполнение:

chmod +x ~/.kde4/env/kde_prelink.sh

Увеличение отзывчивости системы в пиковые нагрузки. 1) Бывают ситуации, когда в момент очень высоких нагрузок, система ведёт себя не


слишком отзывчиво, вплоть до подвисания курсора. Особенно это актуально если на компьютере весьма слабый процессор, а также мало оперативной памяти. Но можно улучшить ситуацию. Начиная с ядра Linux 2.6.38, в его состав включён знаменитый 200-строчный патч, который серьёзно повышает отзывчивость системы, путём динамической регулировки приоритетов процессорного времени для интерактивных и фоновых процессов. Что это значит? Допустим вы запустили компиляцию программы, и в этот момент включили плеер. Плеер получит больший приоритет процессорного времени, так как является интерактивным процессом, с которым работает пользователь, в то время как компиляция будет являться фоновым процессом, и если она начнёт "тянуть на себя одеяло", то ей понизится приоритет, в результате чего, плеер (либо другое интерактивное приложение) не будет тормозить от нехватки ресурсов процессора. Таким образом, даже при сильной загрузке системы, вы можете без проблем запускать любые ваши программы, такие как плееры, браузеры и даже игры. Однако несмотря на наличие этого патча в ядре, функция, которую он обеспечивает, не включена по умолчанию в некоторых дистрибутивах. Убедиться в её включении можно командой:

cat /proc/sys/kernel/sched_autogroup_enabled

Если вывод 1 - то всё включено, если 0 - то нет. Включается она просто. Открываем файл /etc/sysctl.conf

sudo nano /etc/sysctl.conf

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

kernel.sched_autogroup_enabled = 1

Теперь выполните:

sudo sysctl -p

и снова проверьте включение. Вывод должен быть 1.

2) Демон ulatencyd. Как и "ядерный патч", ulatencyd использует механизм cgroups для группировки интерактивных процессов и изменения их приоритетов, но на этом


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

Демон поддерживает плагины, поэтому можно очень сильно расширить его функционал. Например, уже сейчас доступен плагин (причем в стандартной комплектации), который следит за работой пользователя в графическом интерфейсе и назначает самые высокие приоритеты вновь открытым приложениям и процессам, окна которых находятся на переднем плане. Нечто подобное есть в Windows, но работает на том же уровне, что и сама Windows :) Данный демон доступен в большинстве дистрибутивов, в Debian и Ubuntu ставится командой:

sudo apt install ulatency ulatencyd

Правила пишутся на языке LUA. Если вы писали скрипты для какой-нибудь игры, например Warcraft, то вы его знаете :). По умолчанию параметры оптимальны для большинства задач. Если запустить ulatency с параметром --gui, то откроется окно со статистикой процессов, а также станет возможным сменить профиль на game, default или desktop как с самого интерфейса, так и с панели задач:


Оптимизация дисковых операций. 1) Это самое узкое место любой системы, не только Linux. Дело в том, что жёсткий диск является самым медленным устройством в компьютере. Если у вас установлен SSD, то это решает многие проблемы, но кое-что всё равно остаётся. Первой оптимизацией, является изменение размеров дискового кэша. При операциях копирования или перемещения, данные сначала записываются в оперативную память, а затем кучей скидываются на диск. В результате, особенно при нехватке памяти, это может привести к сильным задержкам. Исправить ситуацию поможет уменьшение дискового кэша до разумной величины. Также стоит уменьшить кэш файловых систем. Открываем уже знакомый нам /etc/sysctl.conf и в конец добавляем строки:

vm.dirty_bytes = 2097152 vm.dirty_background_bytes = 2097152 vm.vfs_cache_pressure = 50

Прошу обратить внимание на последнюю строку: этот параметр отвечает за кэширование объектов файловой системы в оперативную память. При значении 0, объекты не высвобождаются и так и остаются в оперативной памяти. Чем больше значение, тем чаще ядро будет проводить "зачистку" оперативной памяти. Поэтому если у вас оперативной памяти меньше 2 гигов, то оставьте значение 50, дабы сократить число дисковых операций в разделе подкачки. Это также полезно в случае если у вас SSD. Но если у вас больше 2 гигов оперативки, и обычный жёсткий диск, то выставьте значение этого параметра на 1000. Это позволит более агрессивно кэшировать дисковые операции, тем самым повысив быстродействие при достаточном количестве оперативной памяти. По умолчанию значение этого параметра равно 100.

2) Следующим шагом может стать смена стандартного планировщика ввода-вывода. В Ubuntu по умолчанию задействован Deadline, в Debian - CFQ. Посмотреть какой планировщик используется, можно командой:


cat /sys/block/sda/queue/scheduler

Вместо "sda" подставьте значение вашего диска (это может быть sdb, sdc и т.д.). Вывод будет таким:

noop deadline [cfq]

В квадратных скобках тот планировщик, который используется в данный момент. Планировщик можно сменить на лету, как для всей системы, так и для одного конкретного диска. Здесь хорошо описаны различия между доступными в Linux планировщиками ввода-вывода. Выбрать же оптимальный под свою систему, поможет следующий скрипт: #!/bin/bash sudo clear DISC="sda"; \ cat /sys/block/$DISC/queue/scheduler; \ for T in noop deadline cfq; do \ echo $T | sudo tee /sys/block/$DISC/queue/scheduler; \ cat /sys/block/$DISC/queue/scheduler; \ sync; \ echo 3 | sudo tee /proc/sys/vm/drop_caches; \ sudo /sbin/hdparm -tT /dev/$DISC;\ echo "----"; \ sleep 10; \ done

Сохраните его под любым именем, например scheduler.sh, дайте права на выполнение (по правому клику в свойствах, вкладка Права) либо в терминале: chmod +x scheduler.sh Затем запустите. Вот результат:

noop deadline [cfq] noop


[noop] deadline cfq 3 /dev/sda: Timing cached reads: 8646 MB in 2.00 seconds = 4323.92 MB/sec Timing buffered disk reads: 558 MB in 3.01 seconds = 185.41 MB/sec ---deadline noop [deadline] cfq 3 /dev/sda: Timing cached reads: 8436 MB in 2.00 seconds = 4218.59 MB/sec Timing buffered disk reads: 552 MB in 3.01 seconds = 183.37 MB/sec ---cfq noop deadline [cfq] 3 /dev/sda: Timing cached reads: 8194 MB in 2.00 seconds = 4097.49 MB/sec Timing buffered disk reads: 444 MB in 3.17 seconds = 140.11 MB/sec ----

Как видим, noop показал лучший результат, однако лучше всего протестировать на практике (к примеру у меня при переключении на Deadline, появлялись сильные задержки при открытии программ). Для того чтобы сменить планировщик по умолчанию:

sudo nano /etc/default/grub

В строку GRUB_CMDLINE_LINUX_DEFAULT= дописываем elevator=имя нужного планировщика. Сохраните и обновите загрузчик:

sudo update-grub

Для того чтобы указать другой планировщик одному из дисков (например noop для


SSD), выполните:

echo noop | sudo tee /sys/block/sda/queue/scheduler

при условии что ваш SSD - это /dev/sda. Если вы не уверены, введите lsblk, для вывода иноформации обо всех дисках в системе.

Наилучшим вариантом при серьёзных дисковых нагрузках, считается планировщик BFQ (усовершенствованный CFQ). Но есть одна проблема - его пока нет в ядре (разработчики активно работают над патчами для добавления его в основную ветку ядра с плавной заменой CFQ). Нужно ставить патч и пересобирать ядро. Либо воспользоваться одним из кастомных ядер, таких как PF-Kernel или Zen-Kernel. Об этом чуть позже. Правда в некоторых дистрибутивах (например Manjaro и Calculate Linux), BFQ уже включён по умолчанию. Советую к прочтению мою старую статью об избавлении симптомов, похожих на баг 12309 (даже если такого у вас нет, рекомендую ознакомиться).

3) Начиная с ядра 3.16, доступна поддержка блочного слоя blk-mq (multiqueue block layer), рассчитанного на организацию многопоточного доступа к данным на многоядерных системах и позволяющего эффективно использовать возможности современных SSD-накопителей. Архитектура нового блочного слоя основана на двухуровневой модели очередей: на первом уровне функционируют очереди для передачи запросов ввода/вывода, привязанные к каждому процессорному ядру. Из данных очередей запросы направляются в очереди второго уровня, которые координируют обращение к оборудованию. В зависимости от конфигурации системы, числа ядер и накопителей соотношение между очередями первого и второго уровня может составлять от 1 к 1 до N к M. Таким образом значительно повышается скорость чтения/записи, а также равномерно распределяется нагрузка. Для включения:

sudo nano /etc/default/grub

В строку GRUB_CMDLINE_LINUX_DEFAULT= добавляем параметр scsi_mod.use_blk_mq=1

4) Дополнительно можно указать некоторые опции монтирования для файловых систем. Указывать их нужно в файле /etc/fstab. Например:


#Entry for /dev/sdf3 : UUID=980ee669-4a50-4035-a6d4-0d3c7ffc609e

/home ext4

defaults

0

2

defaults - набор параметров, соответствующий набору rw, suid, dev, exec, auto, nouser, async. Подробнее о параметрах монтирования вы можете прочитать по ссылке. Для файловой системы Ext4, рекомендуется указать такие параметры (записывайте через запятую после defaults). Наличие источника бесперебойного питания крайне желательно.

relatime - Включает запись информации о последнем времени доступа при чтении файла, если предыдущее время доступа (atime) меньше времени изменения файла (ctime). Включено по умолчанию на Linux начиная с v.2.6.30 barrier=0 Код файловой системы обязан перед созданием записи фиксации [журнала] быть абсолютно уверенным, что вся информация о транзакции помещена в журнал. Просто делать запись в правильном порядке недостаточно; современные диски имеют кэш большого объёма и меняют порядок записи для оптимизации производительности. Поэтому файловая система обязана явно сообщить диску о необходимости записать все журнальные данные на носитель перед созданием записи фиксации; если сначала будет создана запись фиксации, журнал может быть повреждён. Блокирующая система ввода-вывода ядра предоставляет такую возможность благодаря использованию механизма «шлагбаумов» (barriers); проще говоря, «шлагбаум» запрещает запись любых блоков, посланных после него, до того момента, как всё, что было прислано перед «шлагбаумом», будет перенесено на носитель. При использовании «шлагбаумов» файловая система может гарантировать, что всё, что находится на диске, целостно в любой момент времени. Отключая шлагбаум barrier=0, мы ускоряем операции записи на разделы ext4. commit – время между сбросами буферов на диск. Рекомендуется commit=100

Tmpfs. Tmpfs - это так называемый RAM-диск, то есть виртуальный диск, расположенный в оперативной памяти. В располагают какие-нибудь кэши или временные файлы, для мгновенного доступа к ним. В Линуксе (да и в других Unix-подобных ОС), в нём чаще всего располагают каталог с временными файлами - /tmp. Это позволяет очень значительно повысить скорость работы, например, пакетного менеджера или любой другой программы, которая складывает туда временные файлы. Командой df можно посмотреть какие каталоги куда смонтированы:


Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в udev

10240

0

10240

0%

/dev

tmpfs

1607944

9724

1598220

1%

/run

25065036

17965136

5803520

76%

tmpfs

4019852

38168

3981684

1%

/dev/shm

tmpfs

5120

8

5112

1%

/run/lock

4019852

0

4019852

0%

/dev/sdc1

tmpfs /sys/fs/cgroup

/dev/sda3 828078076 /media/DISK_D

519617888 308460188

63%

33621380 61908888

36%

/media/KVM /home

/dev/sdc5

100666964

/dev/sdc3

374818504

348472472

7283260

98%

803972

8

803964

1%

tmpfs /run/user/1000

/

Как видим, в tmpfs уже по умолчанию смонтированы некоторые каталоги, к которым часто обращается система или программы. К слову, Tmpfs - не единственная реализация рамдиска в Linux. Популярной альтернативой ему является Ramfs. Чем они отличаются:

• Ramfs никогда не использует подкачку, а заполняет оперативку до предела; • Ramfs, в отличии от Tmpfs, не поддерживает никаких параметров монитрования и всегда монтируется с правами root; • Tmpfs может использовать подкачку, поддерживает параметры монтирования и позволяет жёстко указать размер файловой системы.

Для того чтобы смонтировать /tmp в Tmpfs, делаем так:

sudo nano /etc/fstab

В конец добавляем строку (обратите внимание, что вместо пробелов используется табуляция. То есть нужно нажимать клавишу Tab):


tmpfs /tmp

tmpfs defaults,size=2G,mode=1777

0

0

Таки образом мы смонтировали /tmp в tmpfs, указали ему размер в 2 гига, после чего он начнёт использовать подкачку, а также выставили права доступа 1777, чтобы не было проблем в работе некоторых приложений. Сохраните и перезагрузитесь. После перезагрузки, снова введите df

Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в udev

10240

0

10240

0%

/dev

tmpfs

1607944

9724

1598220

1%

/run

25065036

17965136

5803520

76%

tmpfs

4019852

38168

3981684

1%

/dev/shm

tmpfs

5120

8

5112

1%

/run/lock

tmpfs

4019852

0

4019852

0%

/sys/fs/cgroup

tmpfs

2097152

744

2096408

1%

/tmp

/dev/sdc1

/dev/sda3 828078076 /media/DISK_D

519617888 308460188

/

63%

/dev/sdc5

100666964

33621380

61908888

36%

/media/KVM

/dev/sdc3

374818504

348472472

7283260

98%

/home

803972

8

803964

1%

tmpfs

/run/user/1000

Как видим, /tmp смонтирован в tmpfs и работает. Если вы используете дистрибутив Gentoo, можете смонтировать туда кэш portage (/var/tmp/portage).

Ядро. Вот мы и подошли к самой главной части системы - ядру. Здесь я снова дам ссылку на недавнюю статью по самостоятельной сборке и конфигурированию ядра, и дам небольшой комментарий. Для большинства пользователей, более чем достаточно стандартного дистрибутивного ядра. Кое-какие настройки ядра можно проводить через /etc/sysctl, без необходимости в его пересборки. Ядро - это центральный и самый важный компонент системы, поэтому в него нужно лезть с крайней


осторожностью и только если вам это действительно нужно. В каких ситуациях предпочтительно использовать кастомное ядро:

• Если вы работает со звуком и видео, то вам лучше собрать ядро с патчами для работы в режиме реального времени (PREEMPT_RT); • В случае если необходимо добавить патч (например на вышеописанный BFQ), либо включить какой-либо дополнительный функционал; • В случае если вы хотите выкинуть из ядра всё лишнее и оставить только то, что нужно вашему компьютеру; • В случае если дистрибутивное ядро работает плохо и вы хотите использовать "ванильное" ядро без дистрибутивных патчей; • Для "заточки" ядра под конкретное оборудование (к примеру сервер).

Ядра PF-Kernel и Zen-Kernel создаются для десктопов, и их применение на серверах нежелательно. Потому вы можете собрать PF-Kernel и иметь в наличии многие компоненты, которые не входят в стандартное ядро Linux, плюс бОльшую отзывчивость за счёт дополнительных "ядерных" оптимизаций. Готовых пакетов с ядром PF-Kernel к сожалению нет (раньше были, если вы готовы помочь мне с репозиторием и сборкой - пишите, буду рад взяться за эту работу), а вот с Zen-Kernel для Debian-подобных доступен репозиторий Liquorix Kernel.

Вот в принципе и всё. Используя рекомендации из этой статьи, можно добиться максимум производительности особо не напрягаясь. Разумеется, я не мог здесь учесть всё, поэтому если я что-то упустил - пишите в комментариях и я добавлю это в статью. Только прошу не писать про использование USE-флагов в Gentoo, так как уже есть для этого хендбук :)

Ссылки:

Сборник рецептов оптимизации Linux


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.