суббота, 26 октября 2013 г.

Как разрезать avi видеофайл

Можно, конечно, воспользоваться каким-нибудь mencoder или другим навороченным кодеровщиком, но логика подсказывает, что данная операция не требует мощных инструментов кодирования/декодирования. И это действительно так.

Существует консольная утилита avisplit (из пакета transcode) специально предназначенная для того, чтобы разрезать файл на куски. Существует также и avimerge, предназначенная для обратной процедуры, но сейчас не об этом.

Например нам нужно разрезать файл kino.avi на части по 700 мегабайт для записи на CD.

$ avisplit -i ~/kino.avi -s 700

Здесь после -i идет имя файла для резки, а после -s - размер частей в мегабайтах.

Или нужно разрезать полторачасовой фильм на части продолжительностью 1 час и 30 минут:

$ avisplit -i ~/kino.avi -t 0:0:0.0-1:0:0.0,1:0:0.0-1:30:0.0

Временные интервалы задаются после опции -t, в форме t1-t2,t3-t4..., где t1,t2,t3,t4 - время в формате hh:mm:ss.ms (милисекунды можно не указывать).

Ну и конечно man avisplit в помощь.

вторник, 10 сентября 2013 г.

Рецепт решения ошибки компиляции ядра из-за bfq

При попытке установить очередное ядро (версии 3.10.9), компиляция прервалась с ошибкой:

make[1]: *** Нет правила для сборки цели `block/bfq-iosched.o', требуемой для `block/built-in.o'.  Останов.
make: *** [block] Ошибка 2


Решение нашлось довольно быстро и оказалось довольно простым. Эти самые правила для сборки находились не там, где должны быть. Поэтому переходим в каталог с исходниками ядра:

# cd /usr/src/linux-3.10.9-calculate/

И уже оттуда копируем нужные файлы в нужное место:

# cp b/block/bfq* block/

Пробуем компилировать ядро - все в порядке, по крайней мере с bfq.

воскресенье, 11 августа 2013 г.

Черезмерное выделение памяти (overcommit)

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

Сейчас в ядре два параметра, отвечающих за overcommit памяти:

vm.overcommit_memory (/proc/sys/vm/overcommit_memory) — отвечает за стратегию overcommit
vm.overcommit_ratio (/proc/sys/vm/overcommit_ratio) — отвечает за уровень в процентах overcommit

Стратегии у vm.overcommit_memory могут быть три:

OVERCOMMIT_ALWAYS (значение выставлено в 1) — ядро всегда удовлетворяет любые запросы на выделение памяти. Реально страницы памяти будут выделяться при первом обращении к ним.
OVERCOMMIT_GUESS (значение 0) — эвристический подход к распределению памяти. Используется по умолчанию, ибо подходит для большинства задач. Система будет отвергать только запросы, которые в принципе не могут быть удовлетворены, остальные — удовлетворять вне зависимости от наличия свободной памяти. На деле практически не отличим от OVERCOMMIT_ALWAYS.
OVERCOMMIT_NEVER (значение 2) — работа вообще без overcommit. Полный объём памяти, исходя из которого будут удовлетворяться или отвергаться запросы на выделение памяти, вычисляется как total_swap + total_ram * overcommit_ratio / 100. Значение параметра vm.overcommit_ratio имеет значение только при этой стратегии. Таким образом, при overcommit_ratio < 100, система всегда будет выделять память только если она подкреплена реальными страницами в ОЗУ или свопе. При overcommit_ratio > 100 мы получаем режим, схожий с OVERCOMMIT_GUESS, но с явно установленным «ограничителем».

Стоит заметить, что операционная система всегда резервирует около трех процентов памяти для процессов пользователя root.

Политики OVERCOMMIT_GUESS и OVERCOMMIT_ALWAYS приводит к ситуациям, когда суммарный размер виртуальной памяти приложений может намного превосходит реально имеющийся объем ОЗУ и свопа. В теории, когда реальная память заканчивается, в Linux срабатывает OOM Killer, убивающий лишние, самые «невыгодные» с точки зрения ядра, процессы. На практике же, OOM Killer отрабатывает далеко не всегда: система может уйти в длительный лаг или зависнуть.

Установим режим выделения памяти не больше, чем есть (OVERCOMMIT_NEVER), по умолчанию стоит выделять сколько запросит процесс (OVERCOMMIT_GUESS):

# sysctl vm.overcommit_memory=2
# sysctl vm.overcommit_ratio=80
Значение параметра vm.overcommit_ratio по-умолчанию равно 50. Чтобы изменения сохранились после перезагрузки пишем:

# echo 2 > /proc/sys/vm/overcommit_memory
# echo 80 > /proc/sys/vm/overcommit_ratio

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

вторник, 30 июля 2013 г.

Настройка /etc/fstab

В файле /etc/fstab перечислены все основные точки монтирования, файловые системы и их опции по умолчанию (обычно defaults). Точки монтирования заносятся в файл построчно. Формат строки следующий:
   
<file_system>   <mount_point>   <type>   <options>   <dump>   <pass>

Поле <file_system> представляет собой диск, раздел диска или файл как они представлены в системе. Т. е. это может быть путь к файлу (например, iso-образу) или файлу устройства (например: /dev/sda1 - первый раздел на первом SATA диске) от корня системы или идентификация устройсва по ID (файл в каталоге /dev/disk/by-id), по метке файловой системы (файл в каталоге /dev/disk/by-label), по UUID (файл в каталоге /dev/disk/by-uuid). Выбор - дело вкуса. Мне нравится вариант с UUID - это уникальные метки разделов, которые не изменяются даже когда меняется номер раздела. Метку и UUID раздела можно узнать с помощью команды blkid:
   
# blkid /dev/sda6
/dev/sda6: LABEL="CLD-12.0.3" UUID="ced7f6cb-7f14-40b6-b7ad-e544ce054dfc" TYPE="ext4"

Помимо файлов устройств аргументом поля <file_system> могут быть виртуальные файловые системы - shm, proc, tmpfs.

Поле <mount_point> представляет собой папку в которую монтируется устройство из поля <file_system>. Путь к папке укажывается абсолютный, начиная от корня.

Поле <type> - это тип файловой системы. Ядро Linux поддерживает множество файловых систем:

  • Ext2 - первая родная для Linux файловая система, не поддерживает журналирование, довольно хорошее быстродействие;
  • Ext3 - это Ext2 с журналированием, из-за чего страдает быстродействие;
  • Ext4 - эволюционное развитие Ext3, улучшены производительность и стабильность, добавлены опции;
  • ReiserFS - хорошая производительность, особенно с маленькими файлами;
  • JFS - хорошая производительность, низкое потребление ресурсов процессора;
  • XFS - хорошо работает с большими файлами и плохо - с  маленькими;
  • Btrfs - отличная производительность, но все еще в разработке (хоть и включена в ядро), когда станет стабильной - стоит попробовать;
  • vfat - Microsoft FAT16,FAT32, старые, нежурналируемые, но все еще широко распространены;
  • ntfs-3g - Microsoft NTFS, более новая и журналируемая ФС от одной мелко-мягкой компании;
  • swap - специальная ФС для раздела подкачки;
  • iso9660 - файловая система для оптических носителей CD/DVD.

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

Примеры опций для некоторых ФС:

ReiserFS: noacl,user_xattr,noatime,nodiratime,notail,barrier=flush
Ext3: noacl,user_xattr,noatime,nodiratime,barrier=0
XFS: noatime,nodiratime,logbufs=8,logbsize=32k,biosize=16,allocsize=512m,barrier

   
Расшифровка значаений опций:
  • user_xattr - расширенные атрибуты файлов (используются для индексирования)
  • barrier - используя "шлагбаум"(barrier) файловая система запрещает запись блоков данных, пришедших после "шлагбаума", пока все предшествующие ему не будут перенесены на диск; таким образом достигается высокая надежность в ущерб быстродействию; отключая "шлагбаум" (barrier=0, nobarrier), мы ускоряем запись на раздел
  • noatime и nodiratime - отключение записи времени последнего доступа (для файлов/директорий), noatime включает в себя nodirtime
  • allocsize - размер заранее резервируемой области на диске. Высокое значение помогает избежать фрагментации
  • biosize - размер I/O-блоков по умолчанию
  • logbufs - количество встроенных буферов для ведения журнала
  • logbsize - размер буфера
  • notail - не упаковывать хвосты больших файлов — улучшает производительность — увеличивает используемое для хранения место(~5%) — для применения этой опции надо желательно перезаписать находящиеся на ней файлы
  • noexec - запрет запуска программ с этой ФС
  • nosuid - запрет на использование бита suid
  • nodev - запрет на символьные или блочные устройства
  • ro - монтирует фс в режиме "только чтение"
  • rw - монтирует фс в режиме "чтение/запись"
  • noauto - не монтировать устройство автоматически при загрузке
  • defaults - эквивалентно: rw,suid,dev,exec,auto,nouser,async
  • users - разрешает монтирование от лица любого пользователя, подразумевает параметры nosuid, noexec и nodev
  • noacl - отключить контроль доступа к файлам

Поле <dump> указывает нужно ли делать резервную копию. Считается устаревшим и, как правило, равно 0.

Поле <pass> - это порядок, в котором файловая система должна быть проверена. Значение:

0 - не проверять;
1 - проверяется, устанавливается для корня;
2 - проверяется, для остальных разделов.

Для примера вот содержимое моего файла fstab:

UUID=ced7f6cb-7f14-40b6-b7ad-e544ce054dfc    /        ext4    noatime                            0 1
UUID=11ba9b21-4a1f-4329-a2f4-07299dd0af5f    /boot        ext2    noatime                            0 0
UUID=748569b2-68a0-41f1-9d8b-84ae26529d89    /home        ext4    noatime,nodiratime                    0 0
UUID=5f1cbcf1-10f9-47a9-a4d5-3d4498eb452f    none        swap    sw                            0 0
proc                        /proc        proc    defaults                        0 0
shm                        /dev/shm    tmpfs    nodev,nosuid,noexec                    0 0
tmpfs                        /tmp        tmpfs    defaults,nodev,nosuid,mode=1777                0 0
tmpfs                        /var/lock    tmpfs    defaults,nodev,nosuid,noexec,mode=1777,size=10m        0 0
tmpfs                        /var/run    tmpfs    defaults,nodev,nosuid,noexec,mode=0755,size=10m        0 0
tmpfs                        /var/calculate/tmp/portage tmpfs    noatime,mode=1777,nr_inodes=30M        0 0


Первые строки вполне понятны. В первой строке описывается монтирование корневой ФС, во второй строке - монтирование каталока /boot, далее /home и swap раздел. Далее идет монтирование proc и shm. Первое - виртальная ФС ядра, второе - нужно для многих программ. Остальные строки помещают временные данные в tmpfs - файловую систему для быстрого и ненадежного хранения данных (расположена в виртуальной памяти(RAM+swap). При монтировании tmpfs ограничивается 50% RAM, поэтому при большом количестве временных данных (например, при интенсивной сборке огромных программ или нескольких одновременно) верхний предел может быть увеличен с помощью опции size=n, где n - необходимый размер. Или же можно уменьшить максимально допустимое значение, как это сделано для директорий /var/lock и /var/run. Опция nr_inodes=30M увеличивает область для идентификаторов файлов - полезна когда создается очень много файлов (чтобы избежать ситуации, когда место для данных еще есть, а файл создать нельзя). После перезагрузки или перемонтирования данные в tmpfs стираются.

вторник, 23 июля 2013 г.

Заметки о weechat

Weechat - консольный irc-клиент для Linux, BSD, MacOS. Удобный, настраиваемый,мультипротокольный, поддерживает модули и скриптовые расширения на нескольких языках. Установка в Gentoo-подобных дистрибутивах производится командой:
# emerge net-irc/weechat

Запуск клиента производится командой:

$ weechat-curses

В дистрибутиве Calculate Linux клиент weechat идет преднастроенным на соединение с каналом #calculate-ru на сервере freenode. И при запуске weechat автоматически подключается к этому каналу. При подключении к каналу irc вы можете общаться в чате, но не можете видеть ответы на ввод управляющих команд. Для этого нужно переключиться на другой буфер(в моем случае alt+1), с помощью хоткеев alt+left/right_arrows либо F5/F6 на предыдущий/следующий буфер или с помощью сочетания alt+N, где N - номер буфера.

Что же такое буфер? Буфер - это компонент, содержащий данные, которые выводятся на экран. Обычно, переключение между буферами означает переключение между каналами. Получить список буферов можно командой /buffer. В свою очередь окно выводит содержимое буфера на экран. По умолчанию у вас будет одно окно. Получить список окон можно командой /window. Окна можно разделять: /window splith - по горизонтали; /window splitv - по вертикали - таким образом вы сможете в одном окне терминала видеть несколько чатов. Делить окна можно сколько угодно раз. Переключаться между разбитыми окнами можно или клавишами F7/F8 или командами /window up, /window down. Склеить два окна в одно можно командой /window merge. Подробнее - /help window.

Справку по всем командам можно получить с помощью команды /help. Например:
    /help set - справка по настройкам
    /help buffer - справка по работе с буферами
    /help filter - использование фильтров
   
Настройка weechat производится путем правки конфигов в папке ~/.weechat. Также можно все настройки делать из самого weechat с помощью команды /set. Возможны также регулярные выражения. Например, чтобы получить список всех настроек irc, пишем:

/set irc.*

и получаем простыню в моем случае со 144 опциями. Все настройки weechat сохраняются при выходе. Или можно использовать команду /save для немедленного сохранения. Если же вы редактируете конфигурационные файлы, то применить настройки можно командой /reload.

Добавить сервер можно командой /server. Например так

/server add oftc irc.oftc.net/6667

Подробнее в справке - /help server.

Подключиться к серверу можно командой /connect:

/connect oftc

Зайти на канал можно с помощью команды /join:

/join #calculate-ru

Выйти из текущего канала:

/leave

Установить статус away(отсутствия):

/away сообщение

Отправить личное сообщение:

/msg ник сообщение

Выход из программы:

/exit

У weechat много хоткеев. Вот наиболее употребительные из них:
    PageUp - скролл вверх
    PageDown - скролл вниз
    Alt-стрелки(или F5/F6) - навигация между буферами
    F7/F8 - навигация между окнами (если окна разбиты)
    F9/F10 - прокрутка топика
    F11/F12 - прокрутка списка пользователей
    alt+a - перейти в "активный" буфер
    alt+r - удалить все из командной строки
    alt+b - перейти на слово назад
    alt+f - перейти на слово вперед
    alt+u - перейти к непрочитанному сообщению
    ctrl+y - вставить текст из буфера обмена
    ctrl+r - поиск
    tab - завершить текст в строке ввода (как в командной оболочке)
   
Также можно назначить свои клавиши с помощью команды /key. Для поиска клавишных кодов можно воспользоваться комбинацией meta+k(alt+k).На пример, что бы назначить на meta-y (alt-y) команду /buffer close:

/key bind (press meta-k) (press meta-y) /buffer close

Команда должна выглядеть так:

/key bind meta-y /buffer close

Что бы удалить:

/key unbind meta-y

Хотелось бы еще сказать пару слов про фильтры. По умолчанию в чате вы видите все служебные сообщения (о входе и выходе пользователей в/из чата). Отключить отображение этих сообщений можно одной строкой, создав фильтр:
   
/filter add jpk * irc_join,irc_joined,irc_part,irc_quit *

соответственно будут отключены сообщения join, joined, part, quit. Подробнее о фильтрах - /help filter

четверг, 13 июня 2013 г.

Установка принтера в Linux

Решил подключить к нетбуку принтер - задача оказалась нетривиальной.
Дано: нетбук с Calculate Linux на борту и принтер Xerox Phaser 3117.
Задание: совместить два устройства до возможности печати с нетбука.

Начать стоит, конечно-же, с подключения принтера к нетбуку посредством USB кабеля.

Далее нужно было бы установить драйвер принтера через CUPS, но это требует подготовительных действий. CUPS - система печати для Linux (и прочих UNIX), поддерживаемая компанией Apple. Предполагается, что CUPS уже установлен. Дополнительно нужно доустановить парочку пакетов:

# emerge net-print/xerox-drivers net-print/splix

Здесь:
  • net-print/xerox-drivers - как ясно из названия пакета, драйвера для принтеров Xerox (линейки CopyCentre, DocuPrint, Phaser, WorkCentre) для системы печати CUPS;
  • net-print/splix - поддержка принтеров SPL (Samsung Printer Language) для CUPS (Xerox свои маленькие лазерники заказывает у Samsung, поэтому принтеры Xerox могут работать с драйверами Samsung);
   
Теперь можно настраивать CUPS. Настраивать будем через веб-интерфейс, для чего пишем в адресной строке браузера: localhost:631/admin. Открывается страница настройки CUPS. Жмем кнопку "Добавить принтер" (Add Printer). Откроется страница с выбором принтеров, где в списке локальных принтеров выбираем нужный и жмем продолжить. Следующая страница (настройки принтера) предлагает выбрать производителя (в данном случае Xerox), а потом модель принтера (Phaser 3117). В идеальном случае все должно заработать.

У меня идеального случая не вышло.

Принтер со своими драйверами работать не захотел. Были выбраны драйвера Samsung ML-1610. Всё работало нормально, пока не понадобилось распечатать из ОпенОфиса листик в альбомной ориентации - упорно печаталась портретная, никакие настройки не помогали. Решилось довольно просто: через пункт "Модификация принтера" в настройках принтера драйвер был заменен на Xerox Phaser 3117, т. е. на родной - и печать альбомных страниц нормализовалась.

среда, 12 июня 2013 г.

Как в Linux узнать сетевое имя коммпьютера

Чтобы узнать свое сетевое имя (hostname) существует как минимум 2 способа.

Первый из них - это воспользоваться командой uname с параметром -n:

$ uname -n
tolstiy

Та же команда, но с параметром -a выводит всю извесную ей информацию одной строкой:

$ uname -a
Linux tolstiy 3.9.4-calculate #1 SMP PREEMPT Sat Jun 8 04:28:26 EEST 2013 i686 Intel(R) Atom(TM) CPU N280 @ 1.66GHz GenuineIntel GNU/Linux

Второй способ узнать имя компьютера - это команда hostname. Введенная без параметров, она выведет искомое имя хоста:

$ hostname
tolstiy

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

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

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

Отключение резервирования с помощью tune2fs

Файловые системы ext* (т.е. ext2, ext3, ext4) по умолчанию резервируют 5% места на разделе для нужд суперпользователя. Даже в том случае, когда ФС забита до отказа, root может наслаждаться этими 5%. В том случае, если у вас /home находится на отдельном разделе, эти 5% - расточительство, т. к. суперпользователю в домашнем каталоге нечего делать с лишним местом. Проблему можно поправить при помщи утилиты tune2fs.

Для начала можно глянуть какая информация содержится в суперблоке раздела:

# tune2fs -l /dev/sda7

Получим что-то вроде этого:

tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /home
Filesystem UUID:          748569b2-68a0-41f1-9d8b-84ae26529d89
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              4546560
Block count:              18177539
Reserved block count:     908876
Free blocks:              2625160
Free inodes:              4537731
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1019
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Sat Sep 29 21:00:15 2012
Last mount time:          Sat Mar 30 16:06:26 2013
Last write time:          Sat Mar 30 16:06:26 2013
Mount count:              85
Maximum mount count:      -1
Last checked:             Sat Sep 29 21:00:15 2012
Check interval:           0 (<none>)
Lifetime writes:          839 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      d4446a19-7622-4ce2-9571-2b8accddffb7
Journal backup:           inode blocks


Здесь строка

Block count:              18177539

показывает общее количество блоков на разделе. Размер блоков показывает строка

Block size:               4096

и он составляет стандартные для ext* 4K. Количество зарезервированных блоков:

Reserved block count:     908876

Это и есть 5% от общего количества блоков.

Уменьшить количество резервных блоков можно с помощью команды:

# tune2fs -m 0 /dev/sda7

Здесь число после опции -m - это новый размер резервной области в процентах от общего размера раздела. В данном случае, резервная область устанавливается равной нулю, что вернуло мне почти 4 ГБ дискового пространства. Проверим:

# tune2fs -l /dev/sda7

и видим размер резервной области равный нулю:

Reserved block count:     0

Очень хорошо!

Производительность 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 покончено. Теперь предстоит долгий этап тестирования и поиска "неверных" рекомендаций.