Оптимизация Linux-based дистрибутива
Привет всем, первоначально, я хотел вести именно подобный блог, а не делать обзоры на диструбивы, что как оказалось вызывает больше срачей, чем толку. Если кто-то спросит, зачем нужен этот пост, то я могу смело ответить, чем это хуже, чем все посты о "оптимизации" windows, путем отключения сервисов и очистки реестра.
И так, начнем.
Первым делом, Linux, как и Windows можно оптимизировать путем отключения не нужных сервисовдрайверов и тд. тп.
Сделать это можно так команда вашего демона автозапуска (systemctl для systemd и rc-update для openrc) команда для удаления из автозапуска и отключения данного сервиса имя сервиса
К примеру > rc-update rm sshd && service sshd stop
Идем дальше.
Такой же процесс можно провести и с ядром.
Не нужные вам модульные драйвера можно поместить в /etc/modprobe.d/blacklist-циферка
и отключить во время работы системы через команду rmmode имя драйвера
Так же, очень полезно будет пересобрать ядро, убрав из него все не нужные вам драйвера, выбрать более подходящую микроархитектуру и собрать его с определенными флагами для оптимизации.
Самыми оптимальными флагами для оптимизации ядра я считаю:
> CFLAGS= -march=native -mtune=native -O3 -ffast-math -flto -funroll-loops -mfpmath=sse
Аналогично для СXXFLAGS.
Так же, советую использовать последнюю версию компилятора, к примеру для GCC самой новой версией является 4.9.2.
Теперь объясню, что каждый из этих флагов делает.
> march mtune
Флаги, предназначенные, для использования заранее заготовленного набора флагов.
Узнать содержимое этого профиля можно с помощью команды > gcc -c -Q -march=native --help=target
Не всегда заготовленный для вашего процессора профиль является самым лучшим, к примеру в профиле Core2 не включено использование sse1-3, mmx и ssse3, которые значительно повышают производительность.
Включить их можно с помощью -mтип_оптимизации версия оптимизации
Например > -mmmx -msse2 -msse -msse3 -mssse3 -mavx -msse -msse4.1 -msse4.2
Так же можно поиграться с -masm, но далеко не для всех процессоров изменение стандартного assambler-a повышает производительность.
> -O3
Этот флаг включает набор флагов Optimization level 3, который является не совсем стабильным, но адекватно работает в большей части приложений, проблемы возникали только с grub2.
Внутри него целая куча флагов, которые описаны на официальной вики gcc.
> -ffast-math
Флаг из -Ofast (ака -O4), единственный флаг из крайне не стабильного Ofast, который не вызывает сегментационную ошибку, позволяет ускорить все математические операции в разы.
> -flto
Межмодульная оптимизация, позволяет оптимизировать скорость работы программы на определенных моментах кода.
> -funroll-loops
Развертывание циклов, которое позволяет оптимизировать скорость выполнения определенных циклов, если хотите разворачивать все циклы используйте > -funroll-all-loops
> -mfpmath=sse
Устанавливает основным профилем, для математических операций, набор команд sse, вместо стандартного набора команд.
Значительно ускоряет все математические операции.
Таким же образом можно пересобрать все программы в вашей системе, что значительно повысит их производительность.
В следующий раз расскажу о ускорении загрузки системы.
И так, начнем.
Первым делом, Linux, как и Windows можно оптимизировать путем отключения не нужных сервисовдрайверов и тд. тп.
Сделать это можно так команда вашего демона автозапуска (systemctl для systemd и rc-update для openrc) команда для удаления из автозапуска и отключения данного сервиса имя сервиса
К примеру > rc-update rm sshd && service sshd stop
Идем дальше.
Такой же процесс можно провести и с ядром.
Не нужные вам модульные драйвера можно поместить в /etc/modprobe.d/blacklist-циферка
и отключить во время работы системы через команду rmmode имя драйвера
Так же, очень полезно будет пересобрать ядро, убрав из него все не нужные вам драйвера, выбрать более подходящую микроархитектуру и собрать его с определенными флагами для оптимизации.
Самыми оптимальными флагами для оптимизации ядра я считаю:
> CFLAGS= -march=native -mtune=native -O3 -ffast-math -flto -funroll-loops -mfpmath=sse
Аналогично для СXXFLAGS.
Так же, советую использовать последнюю версию компилятора, к примеру для GCC самой новой версией является 4.9.2.
Теперь объясню, что каждый из этих флагов делает.
> march mtune
Флаги, предназначенные, для использования заранее заготовленного набора флагов.
Узнать содержимое этого профиля можно с помощью команды > gcc -c -Q -march=native --help=target
Не всегда заготовленный для вашего процессора профиль является самым лучшим, к примеру в профиле Core2 не включено использование sse1-3, mmx и ssse3, которые значительно повышают производительность.
Включить их можно с помощью -mтип_оптимизации версия оптимизации
Например > -mmmx -msse2 -msse -msse3 -mssse3 -mavx -msse -msse4.1 -msse4.2
Так же можно поиграться с -masm, но далеко не для всех процессоров изменение стандартного assambler-a повышает производительность.
> -O3
Этот флаг включает набор флагов Optimization level 3, который является не совсем стабильным, но адекватно работает в большей части приложений, проблемы возникали только с grub2.
Внутри него целая куча флагов, которые описаны на официальной вики gcc.
> -ffast-math
Флаг из -Ofast (ака -O4), единственный флаг из крайне не стабильного Ofast, который не вызывает сегментационную ошибку, позволяет ускорить все математические операции в разы.
> -flto
Межмодульная оптимизация, позволяет оптимизировать скорость работы программы на определенных моментах кода.
> -funroll-loops
Развертывание циклов, которое позволяет оптимизировать скорость выполнения определенных циклов, если хотите разворачивать все циклы используйте > -funroll-all-loops
> -mfpmath=sse
Устанавливает основным профилем, для математических операций, набор команд sse, вместо стандартного набора команд.
Значительно ускоряет все математические операции.
Таким же образом можно пересобрать все программы в вашей системе, что значительно повысит их производительность.
В следующий раз расскажу о ускорении загрузки системы.