The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Оптимизация и тюнинг в Linux

   Корень / Администратору / Система / Linux специфика / Оптимизация и тюнинг в Linux

----* Использование LTTng для прозрачной трассировки приложений в Ubuntu Linux (доп. ссылка 1)   [комментарии]
  Система трассировки LTTng (http://lttng.org/) работает на уровне Linux-ядра и отличается минимальным влиянием на работу профилируемого приложения, что позволяет приблизить условия работы данного приложения к его выполнению без использования трассировки (например, позволяет выявлять проблемы с производительностью в программах, работающих в реальном режиме времени).
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Часто используемые параметры sysctl, касающиеся настройки сети в Linux (доп. ссылка 1)   Автор: zersh  [комментарии]
  ++ От переводчика (@zersh).
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Запуск процесса с совсем-совсем IDLE приоритетом в Linux   Автор: СеменСемныч777  [комментарии]
 
Скрипт для запуска процесса в Linux с минимальным влиянием на работу других процессов:

   #!/bin/sh
   # куда бы еще /usr/bin/nice впихнуть?
   /usr/bin/chrt --idle 0 /usr/bin/ionice -c 3 $* &
   XPID=$!
   /usr/bin/cpulimit -l 1 -c 1 -b -p $XPID
   wait $XPID

В chrt "--idle 0" выставляет режим планировщика SCHED_IDLE с минимальным приоритетом.

В ionice  "-c 3" активирует 3 класс (idle) планирования ввода/вывода.

В cpulimit опцией "-l" задаётся допустимый процент использования CPU (в
диапазоне от 0 до 100 * на число процессорных ядер), - "-c" ограничивает число
ядер CPU, "-b" - запускает процесс cpulimit в фоне, "-p" применяет ограничение
для PID уже запущенного процесса. При помощи опции "-i" можно распространить
ограничение и на все дочерние процессы.

Вариант в форме однострочника:

   /usr/bin/cpulimit -l 1 -c 1 -f -q -- /usr/bin/nice -19 /usr/bin/chrt --idle 0 /usr/bin/ionice -c 3 $* 
 
----* Гитара в Debian и борьба с XRUN   Автор: Павел Отредиез  [комментарии]
  Опыт настройки Debian для повышения качества обработки звука с электрогитары.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Сравнение работающих в пространстве пользователя обработчиков нехватки памяти (доп. ссылка 1)   Автор: кек  [комментарии]
  ++ earlyoom https://github.com/rfjakob/earlyoom
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Оптимизация работы на SSD-накопителе рабочей станции с Fedora Linux  (доп. ссылка 1)   [комментарии]
  Включаем для SSD-накопителя поддержку TRIM и отключаем обновление метаданных со временем доступа к файлу. Добавляем в список флагов /etc/fstab опции discard и noatime:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Сокращение времени загрузки Fedora 17 c 15 до 3 секунд (доп. ссылка 1)   [комментарии]
  Изложенные в данной статье инструкции позволяют сократить до трёх секунд загрузку дистрибутива Fedora 17 с NetworkManager до экрана приглашения входа в систему от GDM. Указанная конфигурация опробована на ноутбуке Lenovo T420s (2x2x Intel Core i5-2540M CPU @ 2.60GHz) и SSD-накопителем Intel SSDSA2BW160G3L.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Советы по увеличению автономной работы ноутбука с Debian/Ubuntu (доп. ссылка 1) (доп. ссылка 2)   [комментарии]
  1. Включение ALPM позволит сэкономить 1-2 Вт энергии, но может привести к повреждению данных для некоторых устройств.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Управление ресурсами с помощью cgroups  (доп. ссылка 1) (доп. ссылка 2) (доп. ссылка 3)   Автор: Ivan Pogudin  [комментарии]
  Cgroups (Control Groups) - обеспечивают механизм для агрегирования множества задач и их будущих потомков в иерархические группы с определенным поведением. Так начинается документация посвященная cgroups поставляемая с ядром Linux. Собственно это и есть достаточно ёмкое описание технологии. Но конечно же его не достаточно. Небольшое отступление, необходимо привести конфигурацию программного обеспечения на которой выполнялись примеры - это ОС Debian GNU/Linux 6.0.1.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Оптимизация отзывчивости десктоп-системы через использование cgroup в Linux (доп. ссылка 1) (доп. ссылка 2)   Автор: Stax  [комментарии]
  По заявлению одного из разработчиков из компании Red Hat добиться эффекта существенного повышения отзывчивости десктоп-систем в условиях большой фоновой нагрузки, связанной с запуском ресурсоемких задач, можно через использование cgroup без [[https://www.opennet.ru/opennews/art.shtml?num=28671 дополнительных патчей]] Linux-ядра. Более того, [[http://lkml.org/lkml/2010/11/16/392 утверждается]] что cgroup-метод работает даже лучше патча с привязкой групп планирования к TTY.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Тюнинг нагруженного CentOS севера при помощи ktune (доп. ссылка 1)   [комментарии]
  В репозитории CentOS присутствуетпакет ktune, содержащий набор готовых настроек для оптимизации работы ядра на машинах с большим размером ОЗУ в ситуациях повышенной сетевой и дисковой нагрузки. Например, ktune увеличивает размер TCP/IP буферов, включает планировщик ввода/вывода deadline, устанавливает оптимальные значения для pagecache и т.п. Полный список настроек можно найти в файлах /etc/sysctl.ktune и /etc/sysconfig/ktune
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Решение проблемы с потерей пакетов в tcpdump в Linux (доп. ссылка 1)   Автор: Kirill Korinsky  [комментарии]
 
При записи пакетов используя tcpdump на больших скоростях возможна потеря пакетов.

Для 1 гигабита помогли такие изменения в /etc/sysctl.conf:

   net.core.rmem_default = 33554432
   net.core.rmem_max = 33554432
   net.core.netdev_max_backlog = 16384
 
----* Уменьшение времени загрузки Ubuntu Linux (доп. ссылка 1) (доп. ссылка 2)   [комментарии]
  1. Уменьшение таймаута в grub,
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Уменьшение времени запуска программ в Ubuntu при помощи prelink и preload (доп. ссылка 1) (доп. ссылка 2)   [комментарии]
  Prelink позволяет уменьшить время загрузки приложений, слинкованных со множеством динамических библиотек, путем оптимизации на уровне структуры ELF файла.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как минимизировать влияние бэкап-скрипта на интенсивность ввода/вывода в Linux (доп. ссылка 1)   [комментарии]
  Задача сделать так, чтобы выполнение скрипта для бэкапа не сказывалось на производительности приложений с интенсивными дисковыми операциями. Решение - понижение приоритета скрипта в планировщике ввода/вывода CFQ, который включен в Linux ядро, начиная с версии 2.6.13, и используется по умолчанию начиная с 2.6.18.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как в Linux привязать процесс к CPU и установить атрибуты планирования (доп. ссылка 1)   [комментарии]
  При необходимости увеличить производительность определенного процесса в системе, можно жестко привязать его к определенному CPU (CPU affinity), исключив ситуацию мигрирования между процессорами, а также изменить для него алгоритм работы планировщика задач и увеличить приоритет.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Оптимизация структуры директорий в файловых системах ext2 и ext3 (доп. ссылка 1)   [обсудить]
 
Опция "-D" утилиты e2fsck позволяет выполнить переиндексацию при использовании
dir_index (tune2fs -O +dir_index),
иначе выполнить перекомпановку с сортировкой (когда было создано или удалено 
большое количество директорий) и сокращением размера (когда в
директории было много файлов, а потом их удалили).

Пример запуска (/dev/sdb1 должен быть отмонтирован или переведен в режим только для чтения):
   # e2fsck -D -f /dev/sdb1
 
----* Ускорение работы сетевого интерфейса в Linux на SMP системах (доп. ссылка 1)   Автор: Kir Kolyshkin  [комментарии]
 
Если привязать прерывание от сетевой карты на один CPU, то пропускная способность Fast Ethernet 
возрастает примерно на 15% (измерения проводились на 2.4 ядре, но справедливо и для ядер 2.6).

Определяем прерывание сетевой карты:
   cat /proc/interrupts
Привязываем к определенному CPU:
   echo 2 > /proc/irq/NNN/smp_affinity
где NNN -- прерывание от сетевухи, 2 - битовая маска для выборка CPU.
если сетевухи две, для второй
   echo 4 > /proc/irq/MMM/smp_affinity

Битовые маски: 1 - CPU1, 2 - CPU2, 4 - CPU3 и т.д.

Подробнее см. Documentation/IRQ-affinity.txt

При включении демона irqbalance значения smp_affinity выбираются динамически.
 
----* Приоритезация ввода/вывода в Linux (доп. ссылка 1)   Автор: Андрей Авраменко  [комментарии]
 
Приоритеты для использования Disk I/O

С выходом CFQ v3 в Linux 2.6.13 появилась возможность выставлять 
приоритеты использования дисковой подсистемы для процессов, чего
 раньше так не хватало. Подобно утилите nice для назначение 
приоритетов использования процессора появилась утилита ionice. 

Синтаксис команды прост: 

   ionice -c класс -n приоритет -p PID

Класс: 

3 - Idle - Получает приоритет на использование жесткого диска только 
     когда другие программы ничего не пишут. Приоритеты не используются. 

2 - Best Effort - Класс по-умолчанию. Доступные приоритеты [0-7]. 

1 - Real Time - Дает преимущественный доступ к диску процессу, не
     смотря на другие процессы. Доступные приоритеты [0-7].
 
----* Как очистить кэш файловой системы в Linux ядре (доп. ссылка 1)   [комментарии]
 
Начиная с Linux ядра 2.6.16 появилась возможность принудительной очистки системных кэшей:

Чистим pagecache:
   echo 1 > /proc/sys/vm/drop_caches

Чистим dentrie и inode кэши:
   echo 2 > /proc/sys/vm/drop_caches

Чистим pagecache, dentrie и inode кэши:
   echo 3 > /proc/sys/vm/drop_caches

Перед выполнением операции необходимо запустить команду sync
 
----* Тюнинг TCP стека в Linux (доп. ссылка 1)   [комментарии]
  Увеличиваем максимальный размер памяти отводимой для TCP буферов: (16Мб на порядок больше, чем нужно, следует экспериментальным путем подобрать оптимальные значения, понеменогу увеличивая параметры заданные по умолчанию)
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Привязка процесса к определенному CPU в SMP системе под Linux (доп. ссылка 1)   Автор: nixcraft  [комментарии]
 
Пример использования жесткой привязки процесса к определенному процессору  (CPU affinity).

Устанавливаем пакет schedutils
(Debian: apt-get install schedutils, Red Hat: up2date schedutils или rpm -ivh schedutils*)

Привязка процесса с pid 13545 к первому CPU (#0):
   taskset -c 1 -p 13545
к 3 и 4 CPU (#2 и #3):
   taskset -c 3,4 -p 13545

Загрузку процессоров в SMP системе удобно оценивать через утилиту mpstat из пакета sysstat.
    mpstat -P ALL

Утилизацию подсистемы ввода/вывода можно посмотреть через команду iostat
 
----* Как преодолеть ограничение в 32 группы на пользователя в Linux   [обсудить]
 
В 2.2.x и 2.4.x Linux ядрах максимальное число групп в которые может входить
один пользователь ограничено 32. Для 2.6.x лимит снят.
Решение - пересборка ядра, при необходимости glibc и других утилит.
Инструкции:
  http://radu.rendec.ines.ro/howto/32groups.html
  http://www.ussg.iu.edu/hypermail/linux/kernel/9907.1/0074.html
 
----* Как увеличить максимальное число процессов для 2.2.x Linux ядра   [обсудить]
 
vi /usr/src/linux/include/linux/tasks.h
  #define NR_TASKS        512
  #define MAX_TASKS_PER_USER (NR_TASKS/2)
 
----* Чем хороши LVM, ext3, reiserfs и xfs (доп. ссылка 1)   Автор: Денис Смирнов  [комментарии]
 
LVM - позволяет гибко создавать, удалять и изменять размеры разделов без потери данных. 

ext3 - расширение ext2 для журналирования. Поддерживает журналирование данных,
а не только метаданных (при data=journal).

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

xfs - быстрая работа с файлами большого размера, великолепная надёжность, поддержка ACL.
 
----* Включение Hyper-Threading scheduler в Linux, для CPU Xeon. (доп. ссылка 1)   [комментарии]
 
Linux поддерживает Hyper-Threading начиная с ядра 2.4.17. 
   Ядро должно быть собрано как SMP,
   При загрузке, передаем параметр acpismp=force (в lilo: append=" acpismp=force")
    проверка работы: 
cat /proc/cpuinfo, если среди flags есть "ht", то Hyper-Threading активирован.
 
----* Как оптимизировать подсистемы распределения памяти в Linux.   [обсудить]
 
/usr/src/linux/Documenation/sysctl/vm.txt
/usr/src/linux/Documenation/filesystems/proc.txt
Параметры для работы демона bdflush (vm.bdflush)
   echo "100 2000 128 512 500 5000 60 0 0" > /proc/sys/vm/bdflush
Управление объемом ОЗУ (в %) выделенного для системных буфферов (лучше не трогать)
   echo "70 10 60" > /proc/sys/vm/buffermem
Максимальный размер сегмента shared memory.
   echo 167772160 > /proc/sys/kernel/shmmax # (def: 33554432)
 
----* Оптимизация TCP/IP стека в Linux для нагруженного сервера.   [комментарии]
  /usr/src/linux/Documenation/filesystems/proc.txt /usr/src/linux/Documenation/networking/ip-sysctl.txt Далее в скобках указаны значения по умолчанию для 2.2.x/2.4.x ядер. Если ядро собрано с CONFIG_SYNCOOKIES для защиты от syn флуда (net.ipv4.tcpsyn_cookies)
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Оптимизация дисковой подсистемы в Linux   [обсудить]
 
man hdparm (например: /sbin/hdparm -c3 -d1 -X34 /dev/hda)
man elvtune           
man tune2fs
   echo 128000 > /proc/sys/fs/inode-max # def 16384
   echo 64000 > /proc/sys/fs/file-max  # def 4096 Число одновременно открытых файлов.
  cd /proc/sys/fs/ (в 2.4.x работает автотюнинг)
  /usr/src/linux/Documentation/sysctl/fs.txt
  /usr/src/linux/Documentation/filesystems/proc.txt
 
----* Как под Linux создать ramdisk большого размера для использования в качестве временного хранилища.   [комментарии]
 
Советую использовать tmpfs или ramfs
(разница в том, что данные tmpfs подвержены своппингу, ramfs  создана для
тестов, а ramdisk всегда хранится в ОЗУ)
/usr/src/linux/Documentation/filesystems/tmpfs.txt
    mount -t tmpfs -osize=256M /dev/shm1 /mnt1
Для ramfs:
     mount -t ramfs -omaxsize=256M none /mnt1
Если желание использовать ramdisk осталось, читаем 
/usr/src/linux/Documentation/ramdisk.txt
    mkdir /ramdisk
Для 256Мб ramdisk в lilo.conf добавляем:
    append="ramdisk_size=256000"
Запускаем lilo и перезагружаем машину.
   mke2fs /dev/ram0
   mount -t -ext2 /dev/ram0 /ramdisk
 
----* Как увеличить количество shared memory для работы высоконагруженного PostgreSQL   [комментарии]
  В linux: echo 134217728 >/proc/sys/kernel/shmall echo 134217728 >/proc/sys/kernel/shmmax В конфиге ядра FreeBSD: options SYSVSHM
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Эксперименты по борьбе с утечками памяти Telegram Desktop (доп. ссылка 1)   Автор: nuclight  [комментарии]
 
Известны жалобы о больших утечках памяти в Telegram Desktop на Linux, не
наблюдаемых в таких же объемах на других ОС, в частности Windows и FreeBSD. В
рамках проверки гипотезы о том, что дело в реализации системного аллокатора и
настройках автопроигрывания медиа, помогающие автору TDesktop энтузиасты
создали канал https://t.me/tdesktop_crash, продолжительная прокрутка которого
должна приводить к утечкам памяти. При этом при нормальном поведении закрытие
этого окна (переключение на другой чат) должна освобождать память.

Выяснилось, что на Windows при переключении чата память освобождается, на
обычном Linux glibc - не освобождаются несколько Гб, но происходит почти полное
освобождение через некоторое время, если запустить Telegram Desktop с
аллокатором jemalloc из FreeBSD (пример для Debian, подробности
см. в документации jemalloc):

  LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 telegram-desktop

Аналогичные (или даже лучше) результаты были получены на дистрибутивах без
glibc, например Alpine, где применяется musl.

Поскольку в разных дистрибутивах могут быть разные политики по сборке
(статически и без), и майнтейнеры могут испытывать проблемы с включением
решения, а современные аллокаторы сложны, и, возможно, glibc malloc может быть
соответствующим образом настроен, к экспериментам и помощи приглашаются знатоки.
 
----* Решение проблемы с повышенным энергопотреблением при использовании Linux-ядер 2.6.38 и 2.6.39 (доп. ссылка 1)   [комментарии]
 
В используемом в Ubuntu 11.04 и Fedora 15 Linux-ядре 2.6.38, а также в 2.6.39 и
тестовых версиях 3.0-rc наблюдается возрастание энергопотребления на 10-30%.
Кроме Phoronix подобная тенденция наблюдалась в тестах издания Tom's Hardware.

По предварительным данным, одна из приводивших к повышению энергопотребления проблем
связана
 с изменением в коде поддержки ASPM (Active-State Power Management) для плат
PCI Express, который стал активироваться только при сигнализации о поддержке
ASPM со стороны BIOS (определенные реализации BIOS указывают, что ASPM  не
поддерживается, но все равно инициализирует данную поддержку для некоторых устройств).

Экспериментальным путем был выявлен обходной путь решения проблемы, который
позволяет уменьшить энергопотребление в среднем на 15%. Для решения проблемы
систему следует загрузить передав ядру в интерфейсе загрузчика GRUB параметр "pcie_aspm=force".
 

 Версия для печати





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру