воскресенье, 31 марта 2013 г.

Производительность fglrx

После обновления проприетарных драйверов для карточек AMD fglrx в KDE перестали работать эффекты на движке OpenGL. Установка движка XRender решала проблему лишь частично. Логика подсказывала, что решение существует и оно было найдено.

Решение оказалось довольно простым. Нужно было сгенерировать конфигурационный файл специальной утилитой aticonfig:

# /opt/bin/aticonfig --initial --input=/etc/X11/xorg.conf

Утилита сделает резервную копию старого /etc/X11/xorg.conf и создаст новый для использования с драйвером fglrx. Путь к утилите нужно указывать полностью, так как у вас вряд ли прописан путь /opt/bin/, как каталог для поиска исполняемых файлов.

Еще было обнаружено, что при запуске утилиты glxinfo количество fps не превышало 60. Проблема заключалась в вертикльной синхронизации, которая ограничивает количество кадров величиной равной частоте обновления монитора.

Запускаем Catalyst Control Center, переходим в раздел 3D --> Дополнительные настройки. Ползунок под названием "Ждать вертикального обновления" передвинуть в крайнее положение "Производительность".

Теперь при запуске glxinfo наблюдается fps порядка 2000. Это несколько бодрит.

четверг, 21 марта 2013 г.

Настройка make.conf

В  Gentoo-like дистрибутивах настройки для всех собираемых программ указаны в файле /etc/make.conf. Здесь указаны глобальные флаги компиляции (уровень оптимизации, процессор, набор инструкций процессора, размер кэша и еще всякое), опции для пакетного менеджера, USE-флаги (расширяют или уменьшают функциональность программ), доступные локализации, архитектура ну и еще немного по мелочи.

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

Содержимое моего /etc/make.conf выглядит приблизительно так:

ACCEPT_LICENSE="*"
source /var/lib/layman/make.conf
CFLAGS="-O2 -march=native -pipe -ffast-math"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j3 -s"
EMERGE_DEFAULT_OPTS="--jobs=2 --load-average=5"
LINGUAS="en ru ru_RU"
USE="-cli -libnotify -gimp -ipod -bluetooth -wifi -cups mmx sse sse2 sse3 3dnow 3dnowext mmxext"
VIDEO_CARDS="vesa nouveau fglrx radeon"
FEATURES="ccache"
CCACHE_DIR="/var/tmp/ccache"
CCACHE_SIZE="3G"
PORTAGE_NICENESS="15"


Строка ACCEPT_LICENSE="*" показывает список допустимых лицензий. Здесь звездочка(*) указывает что допустимы любые лицензии - вероятно, наиболее правильный выбор, если вы не заморачиваетесь правильностью свободы софта.

Строку source /var/lib/layman/make.conf не нужно трогать, оставьте как есть.

Следующие две строки задают настройки компиляции программ, использующих компилятор gcc:

CFLAGS="-O2 -march=native -pipe -ffast-math"
CXXFLAGS="${CFLAGS}"


Первый параметр указывает уровень оптимизации программы. Всего таких уровней существует 5.

-O0    оптимизация отключена

-O(-O1)    включает оптимизацию. Компилятор пытается уменьшить размер кода и ускорить работу программы (увеличивается время компиляции).
Активируются следующие флаги (могут использоваться и другие специфичные флаги): -fauto-inc-dec -fcprop-registers -fdce -fdefer-pop -fdelayed-branch -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion -finline-small-functions -fipa-pure-const -fipa-reference -fmerge-constants -fsplit-wide-types -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-sra -ftree-ter -funit-at-a-time
-O2    следующий уровень оптимизации. GCC выполняет почти все поддерживемые оптимизации (кроме ускорения выполнения за счет увеличения кода). Не выполняется раскрутка циклов и подстановка функций. Еще больше увеличивается время компиляции и эффективность кода
Активируются все флаги уровня -O1, а также следующие: -fthread-jumps -falign-functions -falign-jumps -falign-loops -falign-labels -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks -fdelete-null-pointer-checks -fexpensive-optimizations -fgcse -fgcse-lm -findirect-inlining -foptimize-sibling-calls -fpeephole2 -fregmove -freorder-blocks -freorder-functions -frerun-cse-after-loop -fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-overflow -ftree-switch-conversion -ftree-pre -ftree-vrp

-O3    максимальный уровень оптимизации. Еще немного увеличивает время компиляции и немного повышает эффективность кода, но может быть и обратный эффект - производительность программы может упасть.
Активируются все флаги уровня -O2, а также следующие: -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize

-Os    оптимизация по размеру. Компилятор пытается уменьшить размер кода. Активируются в основном те флаги из -O2, которые не увеличивают размер выходного файла.
Отключаются следующие флаги: -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree-vect-loop-version

-Ofast    еще один уровень оптимизации, добавленный в gcc >= 4.6. Как следует из названия, служит для ускорения работы программ.
Активируются все флаги из -O3, а также флаг -ffast-math.

Флаг -ffast-math разрешает компилятору нарушать некоторые ANSI или IEEE правила и/или спецификации в интересах оптимизации кода по скорости выполнения (например, предполагать что параметры функции sqrt - неотрицательные числа). Следует учитывать, что некоторые пакеты могут с этой опцией не собраться.

Флаг -march позволяет оптимизировать код под определенный процессор. Значение флага native предписывает компилятору автоматически определить семейство процессоров - на данном этапе, вероятно, наиболее разумный выбор. Здесь можно указать семейство явно, а можно испльзуя еще десяток-другой флагов вручную настроить процессор более тонко (размер кэшей, наборы инструкций и т. п.), но это потребует на уровень более глубокого погружения в изучение опций компилятора.

Флаг -pipe заставляет компилятор передавать промежуточные данные через конвеер в оперативной памяти (разгружает HDD). Вобщем, нужна почти всегда.

Есть в указании флагов компиляции и свои правила:
    - если флаги противоречат друг другу, то силу имеет флаг указанный последним;
    - опции, начинающиеся с -f, -m, -W можно отключить, добавив префикс no- (например, если есть флаг -f(опция), то отключить его можно так -fno-(опция)).

Строка MAKEOPTS="-j3 -s" задает опции команды make:
    -j3 - задает количество запускаемых копий make, рекомендуемое значение количество_процессоров(ядер, потоков)+1 или удвоенное_количество_процессоров(ядер, потоков)+1;
    -s - уменьшает количество информации, выводимой make - немного ускоряет сборку.

Строка EMERGE_DEFAULT_OPTS="--jobs=2 --load-average=8" задает опции для менеджера пакетов:
    --jobs=2 - количество одновременно собираемых пакетов, ведь часто встречаются пакеты, которые собираются в один поток (вероятно, должен равняться количеству процессоров);
    --load-average=5 - число блокирующих процессов в очереди на исполнение (блокирующий процесс - процесс, ожидающий ресурсов (процессор, дисковая подсистема ввода/вывода, сеть) для продолжения работы; соответственно параметр - это максимальное значение при котором emerge будет запускать дополнительные процессы. Параметр не до конца познан - находится в процессе познания. Система может виснуть при 3 и нормально/удовлетворительно работать при 8.
   
Строка LINGUAS="en ru ru_RU" понятна и описывает доступные локализации. ru_RU нужет для smplayer (может еще для чего), иначе он не знает русского.

Строка USE="-cli -libnotify -gimp -ipod -bluetooth -wifi -cups mmx sse sse2 sse3 3dnow 3dnowext mmxext" - так называемые USE-флаги ("-" отключает флаг, без минуса - флаг включен). Они нужны для управления зависимостями и уменьшают/расширяют функциональность приложений:
    - флаги "-cli" и "-libnotify" - это попытка настроить шрифты, отдельная большая тема (следует заметить, что в Calculate со шрифтами все нормально, но неправильно отображаются некоторые pdf файлы - в основном сервис мануалы и даташиты на какие нибудь микрухи, хотя проще установить acroreader);
    - флаги "-gimp -ipod -bluetooth -wifi -cups" отключают то, что написано - я не пользуюсь GIMP, iPod, у меня нет bluetooth и wi-fi, нет принтера (по идее отвалится также экспорт в pdf, например в libreoffice);
    - флаги "mmx sse sse2 sse3 3dnow 3dnowext mmxext" - это наборы инструкций, наличествующие в моем процессоре.
USE-флагов много и все для чего-нибудь нужны - непаханое поле для настройки. Можно также указывать USE-флаги отдельно для пакета, но не здесь.

Строка VIDEO_CARDS="vesa nouveau fglrx radeon" доступные драйвера видеокарт. Скажем, если у вас встроенное видео intel, то вам не нужны драйвера для карт nvidia и AMD. Здесь:
    - vesa - универсальный драйвер для почти любой видеокарты - медленный но должен работать почти везде;
    - nouveau - свободный драйвер для видеокарт nvidia, разрабатывается сообщесвом, не поддерживает 3D (есть еще проприетарый драйвер - там работает все и вроде бы нормально/удовлетворительно) -  держу для встроенного в материнскую плату видео;
    - fglrx - проприетарный драйвер для карт AMD/ATI, работает нормально, но косяки присутствуют;
    - radeon - свободный драйвер для карт AMD/ATI, разрабатывается сообществом, поддержка 3D хреновая.
   
Для ускорения компиляции можно использовать программу ccache. Она прилично ускоряет обновление, установку программ и полную пересборку системы в случае совпадения исходного кода при повторной компиляции, что происходит в большинстве случаев, так как обычно даже в новых пакетах достаточно много не измененного исходного кода. Для этого добавлены следующие строки:
   
FEATURES="ccache"
CCACHE_DIR="/var/tmp/ccache"
CCACHE_SIZE="3G"


Для начала программу ccache нужно установить:
   
# emerge ccache

Строка CCACHE_SIZE="3G" устанавливает размер кэша программы - обычно достаточно 2 ГБ, по умолчанию установлено 1 ГБ.

Для просмотра статистики кэша компиляции можно воспользоваться командой:
   
# CCACHE_DIR="/var/tmp/ccache" ccache -s
Строка PORTAGE_NICENESS="15" указывает с каким приоритетом должен запускаться emerge - это т. н. фактор уступчивости, чем он выше тем ниже приоритет процесса (выше уступчивость). Диапазон параметра от -20 до 19. Обычно программы запускаются с фактром уступчивости равным нулю (такая себе золотая середина), но emerge в процессе компиляции пакетов может нехило подвешивать систему, поэтому было нагуглено значение 15.

В первом приближении с настройкой /etc/make.conf покончено. Теперь предстоит долгий этап тестирования и поиска "неверных" рекомендаций.

среда, 9 января 2013 г.

Драйвера для AMD Radeon HD6870

На сегодняшний день установка драйверов на видеокарты производства AMD (в девичестве ATI) не является сложным занятием, но немного путанным для непосвященных. Ранее компания ATI считалась "плохой" в Linux среде из-за плохой поддержки. Сегодня ситуация с поддержкой приходит в норму. Не последнюю роль здесь играет покупка ATI компанией AMD.

Существует две версии драйверов для видеокарт AMD: свободный - radeon и проприетарный - fglrx.

Свободный драйвер radeon поддерживается сообществом и лишен поддержки 3D (по крайней мере в юзабельном виде). В дистрибутиве Calculate Linux (как и в Gentoo) этот драйвер содержится в пакете x11-drivers/xf86-video-ati и устанавливается командой(из под рута, конечно):

# emerge x11-drivers/xf86-video-ati

Проприетарный драйвер fglrx поддерживается компанией производителем AMD (распространяется в виде бинарного модуля) и в последних версиях вполне стабилен. Таким образом могу порекомендовать использовать именно его к использованию. Драйвер содержится в пакете x11-drivers/ati-drivers. Касаемо версий: если у вас видеокарта серии HD5xxx или более новая - значит вам нужна последняя версия драйвера (это мой случай), если же видеокарта выпущена ранее серии HD5000 - нужна версия 12.6 (можно, конечно и более раннюю).

Установка последней версии:

# emerge x11-drivers/ati-drivers

Установка версии 12.6:

# emerge =x11-drivers/ati-drivers-12.6

Теперь необходимо указать Х-серверу какие драйвера он должен использовать. В дистрибутиве Calculate есть специальная утилита настройки (не только видео, но и другие параметры системы) cl-console и графичесткая оболочка для него cl-console-gui. В графической оболочке в разделе "Видео" можно выставить видеодрайвер для Х-сервера, разрешение экрана, использовать ли композитный менеджер и разрешение фреймбуфера (это отдельная история - далеко не все разрешения получается использовать, лучше начать с 1024х768 - оно работает практически всегда - и пробовать остальные).

Можно указать видеодрайвер из консоли (консоль - наше все), выполнив команду:

# cl-setup-video --video fglrx

Для работы обеих этих способов необходимо, чтобы был запущен сервер утилит - cl-core:

# cl-core --start

В новых версиях дистрибутива сервер запускается автоматически.

Также некоторые интересные вести есть здесь.

воскресенье, 2 декабря 2012 г.

Удаление старых ядер

Если вы хотябы раз в неделю обновляете систему, то имеете большое количество старых версий ядра, которыми чаще всего не пользуетесь. Имеет смысл иметь в запасе возможнось загрузить предыдущую (рабочую) версию ядра, если на новом ядре что-то перестало работать. Но когда их собирается 5 - 10 штук, тогда имеет смысл подумать о том, как бы почистить ситтему от мусора. И здесь оказывается не все просто, потому что каких-то штатных средств для этого не предусмотрено. Но решение есть и оно довольно несложное - несколько команд в консоли от рута.

Первым делом нужно почистить систему от мусора, т. е. не только от старых версий ядра, но и от ненужных пакетов (которые ставились по зависимостям и остались после удаления других пакетов):

# emerge -ac

Эта команда выведет список подлежащих удалению (по мнению команды) пакетов. Если вы найдете в этом списке используемые вами программы, то просто внесите их в файл /var/lib/portage/world, чтобы emerge не пытался в будущем удалить их, после чего перезапустите команду emerge -ac и согласитесь с предложением. Например, чтобы занести в /var/lib/portage/world программу media-video/mplayer нужно выполнить команду:

# echo media-video/mplayer >> /var/lib/portage/world

Команда emerge -ac удаляет только пакеты программ, но не трогает установленные в систему ядра и их модули. Вот для этой цели и нужны дополнительные телодвижения. Нужно удалить исходники старых ядер. Например, для удаления всех ядер ветки 3.5 нужно выполнить следующее:

# rm -rf /usr/src/linux-3.5.*

а затем удалить директорию с модулями этих ядер:

# rm -rf /lib/modules/*3.5.*

Если у вас каталог /boot на отдельном разделе (обычно небольшого размера 100 - 500 MB), то большое количество старых ядер может помешать установке нового (тупо не хватет места). Это, наверное, является главной причиной для чистки старых ядер. Поэтому удаляем ненужные файлы из каталога /boot:

# rm -rf /boot/*3.5.*

Неиспользуемые версии ядер удалены, но при загрузке все они как-бы доступны. Чтобы исправить это недоразумение нужно обновить конфиг загрузчика Grub, выполнив команду:

# grub-mkconfig -o /boot/grub/grub.cfg

которая заново создаст файл /boot/grub/grub.cfg и запишет туда все существующие ядра и обнаруженные ОСи.

вторник, 13 ноября 2012 г.

Гибернация в Calculate Linux

Возвращаемся к теме спящего режима под Linux. После установки дистрибутива CLD Calculate Linux я столкнулся с проблемой неработоспособности спящего и ждущего режимов. А именно: комп как-будто бы уходил в сон, но при попытке просыпания тупо зависал не реагируя ни на какие мои действия (кроме, конечно, кнопочки перезагрузки на системнике :-)).

Все эти неприятности продолжались до обновления ядра до версии 3.6.6. Методом проб и ошибок была выявлена причина - ветка ядра 3.5 как-то хреново работает с питанием. По крайней мере 4 редакции были протестированы в процессе обновлений - все корявые. Конечно же правка ядра мне пока не под силу, поэтому я сильно порадовался переходу на ветку 3.6.

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

В Calculate для управления питанием используется pm-utils - набор скриптов для взаимодействия с подсистемой управления питанием ядра. Коллекция скриптов свободно модифицируема и позвляет довльно тонко управлять как всей системы так и отдельных модулей. Но в моем случае всех этих тонкостей не понадобилось. А понадобилось найти основной умолчальный конфиг - /usr/lib/pm-utils/defaults и отредактировать его изменив (или добавив) одну строчку:

# nano /usr/lib/pm-utils/defaults

Оказалось достаточным раскоментировать одну строчку, со вполне понятным названием:

HIBERNATE_MODE="shutdown"

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

Мне кажется странным выбор умолчального местоположения конфига, тем более, что в каталоге /etc/pm/config.d/ могут быть расположены дополнительные файлы конфигурации. Но разрабам, конечно же, виднее :-)

По этой ссылке расположено чуть более подробное описание pm-utils.

воскресенье, 11 ноября 2012 г.

Вывод с заданной точностью в C++

Цель: вывести число с заданной точностью n стандартными средствами C++, т.е. не используя сишную библиотеку stdio.

Для начала установим режим вывода с фиксированной точкой, что делается модификатором std::fixed. Затем, с помощью модификатора std::setprecision(n), устанавливаем точность вывода n. Для работы последнего модификатора необходимо подключить заголовочный файл iomanip. Таким образом код будет выглядеть приблизительно так:
   
#include <iomanip>
//...
std::cout << std::fixed << std::setprecision(n) << something;

Или, чтобы не писать постоянно "std::", так:
   
#include <iomanip>
using namespace std;
//...
cout << fixed << setprecision(n) << something;

воскресенье, 7 октября 2012 г.

Проблемы с Х-ами после обновления

В одной из предыдущих заметок был описан процесс обновления системы Calculate Linux. Если во время этого процесса обновляется также и ядро, то необходимо проделать еще дополнительные действия.

В моем случае после обновления перестала загружаться графика. Это произошло потому, что драйвера для моей встроенной видеокарты Nvidia представлены в виде модуля ядра. Модуль был собран для предыдущей (не обновленной) версии ядра и с новым ядром перестал запускаться. В этом случае помогает пересборка модулей ядра, выполняемая командой:

# module-rebuild -X rebuild

Но такой фокус проходит не всегда. Например, для видеокарты intel (драйвера встроены в ядро) нужно пересобрать несколько пакетов: xorg-server, xorg-drivers и xf86-video-intel. Делается это командой:

# emerge -1 xorg-server xorg-drivers xf86-video-intel

Флаг -1 нужен, чтобы не записывать в world имена устанавливаемых пакетов, поскольку эти пакеты уже содержатся в мета-пакетах дистрибутива. 

Переустановка одного только драйвера xf86-video-intel ситуацию не исправляет.

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

суббота, 6 октября 2012 г.

Добавление Windows в меню загрузки Grub2

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

После недолгих поисков было выяснено, что в дистрибутиве установлен Grub2. Как известно этот загрузчик не позволяет напрямую редактировать файл конфигурации (вообще-то позволяет, просто при очередном обновлении он его перезапишет) - он создает его автоматически с помощью скриптов, расположенных в каталоге /etc/grub.d. Посмотрим, что там есть:

# ls /etc/grub.d

00_header
10_linux
20_linux_xen  
30_os-prober
39_memtest86+
40_custom
41_custom

Скрипты из этого каталога выполняются по порядку от меньшего номера к большему.

Скрипт 00_header считывает настройки из файла /etc/default/grub. Там содержатся общие настройки вроде разрешения экрана при загрузке, фоновой картинки и т.п.

Скрипт 10_linux проверяет какие есть ядра linux и добавляет их в меню загрузки. 20_linux_xen - специфический скрипт для систем, работающих с XEN виртуализацией.

Скрипт 30_os-prober проверяет наличие других операционных систем, таких как Windows (требует наличия установленного  sys-boot/os-prober), и добавляет их в меню.

Скрипт 39_memtest86+ добавляет в меню пункты для проверки памяти. Ну а номера 40 и 41 предназначены для дополнительных пользовательских скриптов.

Поскольку все скрипты на месте, то нам осталось только сгенерировать конфигурационный файл. Делается это командой:


# grub-mkconfig -o /boot/grub/grub.cfg

которая пересоздаст файл /boot/grub/grub.cfg. Это тот самый файл, который можно отредактировать и вручную, но прийдется это делать после каждого обновления. 

пятница, 5 октября 2012 г.

Обновление системы

Для поддержания системы в актуальном состоянии необходимо обновлять установленные программы. Для установки программ (равно как и их обновления) используется программа emerge. Но сначала необходимо обновить локальную базу прорграмм с помощью команды

# eix-sync

Эта команда выполняет последовательно обновление оверлеев, портежей и базы пакетов eix.

По умолчанию в Calculate используется бинарный профиль - он подойдет для тех, кто не любит особенно заморачиваться, поскольку отлично работает. Но настоящий линуксоид хочет получить все. Чтобы узнать какой профиль выбран в нашей системе нужно выполнить команду

# eselect profile list

Она выдаст нумерованный список доступных профилей, где звездочкой помечен выбранный для нашей системы. Бинарные профили помечены "binary". Чтобы изменить профиль выполним команду

# eselect profile set X

где X - номер профиля.

Теперь можно обновлять систему. Запускаем команду

# emerge -uDNa --keep-going world

Флаг -u, собственно, и означает, что мы хотим обновить систему.

Флаг -D (или --deep) заставляет emerge обновлять не только явно установленные нами пакеты, но и их зависимости.

Если мы меняли USE-флаги, то нужно добавить флаг -N (или --newuse). Тогда Portage проверит требует ли изменение устрановки новых пакетов или перекомпиляции существующих.

Флаг -a (--ask) перед обновлением выведет список пакетов и спросит разрешения продолжить установку.

Обычно при установке если какой-нибудь пакет собирается с ошибкой, команда emerge выводит эту ошибку в консоль и завершается. Флаг --keep-going заставляет emerge пересчитать зависимости заново после ошибки и продолжить установку тех пакетов, для которых ошибочный пакет не является необходимым.

После обновления может случиться нарушение зависимостей. Чтобы найти и исправить их можно (или даже нужно) выполнить команду:

# revdep-rebuild

Также во время обновления могут изменятся файлы настроек, но они не заменяются сразу, а предлагается воспользоваться специальной утилитой:

# dispatch-conf

После запуска программа будет выводить на экран содержимое подлежащего изменению файла с пометками "+", если эта строка добавлена в новом файле и "-", если строка в новом файле удалена. Чтобы согласится с изменениями и использовать новый конфигурационный файл нужно нажать "u", а чтобы пропустить изменение настроек - "z".

Источник здесь.

четверг, 4 октября 2012 г.

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

На днях удалил Debian со своего домашнего копа и установил дистрибутив Calculate Linux 12.0.3 (номер версии не важен - у дистриба непрерывный цикл обновлений). Не потому, что Debian так уж плох, просто Gentoo-подобные дистрибутивы вызывают в моей душе больший трепет.

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

Начнем настройку производительности с инструкции на сайте дистрибутива.

Первым делом прописываем параметр rc_parallel="YES" в файле /etc/rc.conf, что позволит (как обещают разработчики) выиграть несколько секунд при загрузке благодаря "распараллеливанию" запуска процессов.
  
Добавляем PRELINKING="yes" в файл /etc/conf.d/prelink, но там уже все есть :-) Prelink - это механизм предварительного связывания пакетов.

И, наконец, самое главное - флаги компиляции. Это то, в чем вся сила Gentoo-подобных дистрибутивов - возможность влиять на зависимости, размер, доступные функции (и т. п.) устанавливаемого (точнее, компилируемого) ПО. В общем, вся та гибкость которую предоставляет Linux (свободное ПО). Начать стоит с настройки файла /etc/make.conf.

Для повышения быстродействия большое значение имеют параметры жесткого диска HDD. Здесь есть два пути. Первый - настройка таблицы разделов, файловых систем на разделах, и файла /etc/fstab. Второй - настройка параметров жесткого диска с помощью программы hdparm. Если у вас диск SSD, то настройка производится по другим правилам - многое не имеет смысла, что-то работает по другому, присутствуют параметры отсутствующие для HDD.

Следующий не менее важный, но самый сложный этап - настройка ядра.

Получаем слудующее оглавление:

  1. Настройка /etc/make.conf.
  2. Настройка HDD.
  3. Настройка ядра.