Увеличиваем КПД Linux на десктопе до максимума

В этой статье я хочу поделиться почти 10-летним опытом использования Linux на десктопе. За это время я провел много экспериментов над ядром, испробовал различные конфигурации для разных применений и теперь хочу все это систематизировать в длинный пост с рекомендациями как выжать из linux максимум и добиться отличной производительности, без необходимости покупать мощное железо.

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

Итак начнем наш путь.

1. Купите SSD, если у вас его еще нет

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

Серьезно, все что описано дальше в статье даст вам какой-то прирост в сырой производительности и времени отклика, но любой, даже самый дешевый SSD, сократит время запуска большинства программ до 0, что, визуально, будет очень заметно. Почти в любом компьютере главный тормоз это всегда дисковая подсистема и никакой HDD никогда не даст вам нужной скорости поиска (которая у SSD 0 мс). За все время общения с компьютерами и их апгрейда, только переход на SSD дал значительный прирост в скорости работы и отклике. Помните как медленно работают дискеты, какое у них огромное время поиска? Примерно вот так воспринимается классический жесткий диск после SSD.

Так что если у вас еще нет SSD, то продолжать дальше смысла нет, ваш компьютер (хоть даже оснащенный 12-ядерным Xeon’ом) все равно будет работать медленно, так что вперед за покупками.

Касательно надежности: есть миф что SSD умирают спустя год. Его рождению мы обязаны первым SSD на бажных чипах SandForce. Естественно, любой новый SSD из магазина как минимум надежнее и долговечнее современных жестких дисков, так что не стоит беспокоиться по этому поводу вообще. Свой SSD я купил 2 года назад б/у, на то время он был в использовании год. Сейчас у него 11 681 часов наработки и использование ресурса 10%, так что при том же режиме использования, мне его хватит еще на 27 лет. Думаю, к этому времени технологии хранения данных уже несколько раз изменятся. Так что повторюсь, проблемы с надежностью более чем надуманы.

2. Таблица разделов

Не делите диски на разделы.

Для домашнего компьютера это бессмысленно и вредно. На SSD у вас должен быть один раздел для корня, там у вас будет хранится система. На HDD (если нужен) у вас должен быть один раздел с точкой монтирования в /mnt (у меня /mnt/data), где будут хранится большие малоиспользуемые данные (фильмы, музыка, игры). НЕ НУЖНО делать HDD точкой монтирования /home, так как в /home 99% программ хранит свои данные и постоянно к ним обращается, поэтому /home должен быть на SSD.

Повторюсь кратко: на SSD у вас должно быть все, к чему система постоянно обращается (пишет/читает)!

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

Насчет SWAP-раздела: он вам не нужен. Если у вас не хватает оперативной памяти, то OOM-killer будет прибивать ресурсоемкие приложения, если это происходит то докупите оперативки, благо ее цена не сильно кусается. Использование swap как расширителя оперативной памяти значительно замедляет работу компьютера. suspend-to-disk вам тоже не нужен, потому что холодный старт с SSD быстрее чем восстановление из спячки с HDD, так что пользуйтесь suspend-to-ram или выключайте компьютер полностью. Единственный плюс от свапа — возможность уйти в гибридную спячку, это когда система готовится к suspend-to-disk, но выполняет suspend-to-ram, так что позже, если все хорошо, идет простой выход из спячки, а если произошел сбой питания — то система восстановится с диска.

Я использую везде файловую систему ext4, так как с другими мне не удалось получить заметной разницы в производительности, а ext4 наиболее распространена, плюс имеются утилиты для восстановления данных (но не надейтесь на них, а делайте бэкапы). При создании используйте -T largefile или largefile4.

3. Используйте 64-битное ядро

От производительности оперативной памяти мало что зависит, от нее не увеличится FPS в играх и не станут быстрее запускаться приложения. Использование 64-битных приложений тоже не дает никакого прироста для обычных задач, только для очень специфичных математических рассчетов и операций архивирования. Также использование 64 ядра не требуется для адресации более 4 ГБ памяти, PAE позволяет адресовать до 64 ГБ памяти на 32 битной системе.

Но используя 64-битное ядро, приложения могут адресовать больше чем 4 ГБ памяти, что довольно полезно, так как иначе может возникать ситуация когда OOM-killer будет прибивать программы, хотя оперативки еще достаточно. Также на 64-битной системе можно адресовать сразу же всю физическую память, на 32 битной же все что выше ~800 МБ надо постоянно ремапить, что несколько снижает скорость страничного обмена, хотя, как я уже сказал, это особо не влияет на скорость работы.

4. Используйте патсет pf-kernel

pf-kernel — это набор патчей для ядра linux, собранные соотечесвенником Александром Наталенко (aka post-factum) направленные на улучшения desktop-experience linux-систем.

Он состоит из:

  1. Патчсет -ck с BFS
  2. BFQ I/O scheduler
  3. TuxOnIce
  4. UKSM

Наиболее полезными являются патчи BFS и BFQ, про которые уже очень много написано. BFQ борется с проблемой тормозов системы во время выполнения больших дисковых операций (знаменитый баг 12309, который по документам исправлено, но по факту продолжает досаждать), BFS — планировщий процессов, более подходящий для десктопной работы, чем те что идут в ядре. Например CFS, который используется по умолчанию допускает ситуацию, когда 2 процесса, которые требуют приоритет реального времени будут исполнятся на одном ядре, хотя другие ядра заняты низкоприоритетными задачами. Естественно, такое поведение приводит к глобальным тормозам. Зато «честный планировщик». BFS не такой «честный», но зато намного более приближен к реалиям настольных компьютеров с небольшим (большое — это 4096) количеством ядер.

Для установки, я качаю с kernel.org необходимую версию ядра без стабилизационнх патчей (например 3.12 на момент написания статьи) и накладываю на него pf-kernel. В общем случае это выглядит так:

cd /usr/src
wget ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-3.12.tar.xz
tar -xf linux-3.12.tar.xz
cd linux-3.12
wget https://pf.natalenko.name/sources/3.12/patch-3.12.4-pf.bz2
bunzip2 patch-3.12.4-pf.bz2
patch -p1 < patch-3.12.4-pf

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

5. Тюнингуйте ядро!

В ядре по умолчанию используются не очень оптимальные параметры, обусловленные историческим предназначением linux для серверов и доступности для отладки.

Так что делайте make xconfig

Я расскажу о наиболее важных опциях для оптимизации

Выключаем preemption, устанавливаем низкую частоту таймера и выключаем dynticks

ДА! Мы действительно, даже вопреки документации к BFS отключаем «жизненно важные» опции для повышения отзывчивости системы. А причина в том что они — устарели, толку от них никакого и к тому же preemption негативно влияет на производительность.

Было время, когда у меня был одноядерный процессор, тогда еще в готовых ядрах не включали preemption и высокочастотный таймер, вот тогда, после включения этих опций был огромный эффект. А именно, тяжеловесное приложение, занимающее 100% CPU, даже при наличии дискового ввода-вывода и нехватке ОЗУ никак не влияло на интерактивность и отзывчивость. В те времена, еще кроме WinXP ничего не было, а подробно рассказывать как ужасно себя ведет XP в таких ситуациях, думаю, не надо, она просто обычно намертво виснет, заставляя тянуться к кнопке reset. Так что иметь систему, которая почти никогда не тормозит и не зависает было приятно.

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

Так что идем в Processor type and features и выбираем для параметра Preemption Model значение No Forced Preemption (Server). Не пугаемся фразы «ocasional longer delays are possible» потому что данную проблему у нас эффективно решает BFS и многоядерный процессор. Как и написано в описании, мы выигрываем в «raw processing power».

Также, в целях оптимизации, для параметра Processor family выберите свой процессор.

Далее, устанавливаем для параметра Timer frequency значение 300 HZ. 100 все же будет маловато, да и смысла особого нет (читайте в описании почему), но вы можете поэкспериментировать. Также, 300 Гц нацело делится и на 25 и 30, что является типичными частотами для видео, это вносит свой вклад в борьбу с тирингом.

В этом разделе есть немало интересных опций, посмотрите, например можно выключить hot-plug для cpu и памяти, так как на десктопе это просто невозможно сделать.

Так как у меня не ноутбук, я выключаю все что связано с энергосбережением, то есть к примеру выключаю поддержку CPU Frequency scaling вообще.

Теперь отключим динамический таймер. Не уверен точно, так как не проверял конкретно, но похоже именно эта опция приводит к постоянным «подергиваниям» на некоторых видео и особенно в играх. Так что идем General setup -> Timers subsystem и для опции Timer tick handling выбираем Periodic timer ticks (constant rate, no dynticks). 

Включаем BFQ

По умолчанию BFQ выключен и его надо включить а также выбрать используемым по умолчанию.

Идем Enable the block layer -> IO Schedulers включаем опции BFQ I/O scheduler и BFQ hierarchical scheduling support, для опции Default I/O scheduler выбираем, очевидно, BFQ.

6. Заключение

Данный список не исчерпывающий, есть еще ньюансы, описанные, например, тут (продолжаем бороться с 12309).

В моей ситуации наложение патчсета pf-kernel и тюнинг ядра помогли избавится от ненавистных подергиваний при скроллинге экрана в Dota 2 (а также FPS поднялся с 30 до 40!); теперь копирование больших файлов слабо влияет на запущенные игры и они спокойно сосуществуют, а также вцелом поднялась отзывчивость и от этого восприятие стабильности.

Пожалуйста, если у вас есть что дополнить, пишите в комментарии.

0.00 avg. rating (0% score) - 0 votes
  • Сползший_под_стол

    Лучше не советуй никому ничего, такого количества ламерозного бреда я не видел давно.

  • Бляяяяяя!

    Ёбаный стыд Т_Т

  • Суп с ЛОРа.

    Ну и хуйня.

  • твомать

    У автора тяжелый приступ олигофрении.
    > НЕ НУЖНО делать HDD точкой монтирования /home, так как
    в /home 99% программ хранит свои данные и постоянно к ним обращается,
    поэтому /home должен быть на SSD
    Посе этой шизы можно дальше не читать. Пристрелить и выкинуть

    • Все жду что хоть кто-нибудь напишет конструктивную критику. Но нет, расслабься, это же Россия. Только жирнейшие трали.

      • Бляяяяяя!

        Невозможно писать конструктивную критику неконструктивной неаргументированной несистематизированной ахинеи

  • sorrymak

    1. SSD слишком дорогие.
    2. Это вообще вредный свет, фу-фу-фу.
    3. Из-за amd64 программы потребляют больше оперативки.
    4. Допустим.
    5. Аналогично пункту 5.

    • sorrymak

      Т.е. пункт 5 аналогичен пункту 4.

    • 1. я купил свой за 2000 руб, это копейки

      2. почему?

      3. но когда ее сами былопрограммы не экономят, что мне сидеть на 32 просто потому что «потребляют больше». кстати насколько больше? Кстати, у большинства оперативки 8 Гиг http://store.steampowered.com/hwsurvey/

      Сидел на 32 битах, пока не столкнулся с тем что разжиревшему софту не хватает 4 гиг на процесс, плюнул, докупил еще 8 гиг памяти (хотя планировал вообще 16) и поставил 64 бита. С тех пор все идеально.

      4,5 ок)

      • sorrymak

        1. И какой же у него объём?
        2. Можно будет переустановить дистрибутив (в случае катастрофы) без потери своих данных (если на второй раздел вынесен /home).
        3. По результатам каких-то тестов с Phoronix (ссылку найду не быстро), в 1,2-1,5 раза. Статистика по ссылке же ничего не может говорить за большинство, т.к. Steam’ом явно пользуются люди не бедные.

  • Козлик

    По оптимизации linux вот хороший рускоязычный ресурс: http://optimization.hardlinux.ru/. А статью надо было назвать так: «Увеличиваем КПД Linux на десктопе до максимума посредством покупки нового компа».

    • qwerty

      Поддерживаю, лучше Мегабакса на эту тему никто ничего не писал.

  • ненужно

    Так как у меня не ноутбук, я выключаю все что связано с энергосбережением, то есть к примеру выключаю поддержку CPU Frequency scaling вообще. ЧТО? Вотэто херня, как и PF