Показаны сообщения с ярлыком оптимизация. Показать все сообщения
Показаны сообщения с ярлыком оптимизация. Показать все сообщения

среда, 19 марта 2014 г.

Работа с tar архивами и не только

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

Упаковать, распаковать, просмотреть содержимое tar.gz или tgz архива:

user $ tar cvzf *.tar.gz path/to/folder
user $ tar xvzf *.tar.gz
user $ tar tvzf *.tar.gz

Упаковать, распаковать, просмотреть содержимое tar.bz2 или tbz2 архива:

user $ tar cvjf *.tar.bz2 path/to/folder
user $ tar xvjf *.tar.bz2
user $ tar tvjf *.tar.bz2

Упаковать, распаковать, просмотреть содержимое tar.xz архива:

user $ tar cvJf *.tar.xz path/to/folder
user $ tar xvJf *.tar.xz
user $ tar tvJf *.tar.xz

Упаковать, распаковать, просмотреть содержимое tar архива:

user $ tar cvf *.tar path/to/folder
user $ tar xvf *.tar
user $ tar tvf *.tar

Команды bz2 и gz не могут применяться к директории, только к отдельным файлам. Кроме того исходный файл, после применения данных команд будет удален, т. е. при упаковке останется только архив, а при распаковке останется только распакованый файл.

Упаковать, распаковать bz2 архив (исходный файл удаляется):

user $ bzip2 some_faile some_faile.bz2
user $ bunzip2 *.bz2

Упаковать, распаковать gz архив (исходный файл удаляется):

user $ gzip some_faile some_faile.gz
user $ gunzip *.gz

Распаковка Z архива:

user $ uncompress *.Z

Распаковка rar архива:

user $ unrar x *.rar

Распаковка zip архива:

user $ unzip *.zip

Распаковка xz архива:

user $ unxz *.xz

Распаковка 7z архива:

user $ 7z x *.7z

Распаковка exe архива:

user $ cabextract *.exe

Используемые в командах ключи имеют следующее значение:
    c - создать архив;
    x - позволяет извлекать файлы из архива;
    v - делает вывод tar подробным. Это означает, что на экран будут выведены все найденные в архиве файлы (если эта опция опущена, информация, выводимая в процессе обработки, будет ограничена);
    f - (эта опция всегда идет последней в списке опций) является обязательной опцией для команды tar, без неё tar пытается использовать магнитную ленту вместо файла архива;
    z - позволяет вам обрабатывать архив, сжатый gzip'ом (с расширением .gz);
    j - позволяет вам обрабатывать архив, сжатый bzip2 (с расширением .bz2);
    J - позволяет вам обрабатывать архив, сжатый xz алгоритмом (с расширением .xz).

Для настоящих же сисадминов можно накарябать скрипт вроде приведенного ниже (скопипастен отсюда). Тогда можно будет распаковывать любой из описанных архивов одной командой. Этот код можно добавить в файл .bashrc в своей домашней директории.
File ~/.bashrc
unpack () {
  if [ -f $1 ] ; then
    case $1 in
      *.tar.bz2) tar xvjf $1    ;;
      *.tar.gz)  tar xvzf $1    ;;
      *.tar.xz)  tar xvJf $1    ;;
      *.bz2)     bunzip2 $1     ;;
      *.rar)     unrar x $1     ;;
      *.gz)      gunzip $1      ;;
      *.tar)     tar xvf $1     ;;
      *.tbz2)    tar xvjf $1    ;;
      *.tgz)     tar xvzf $1    ;;
      *.zip)     unzip $1       ;;
      *.Z)       uncompress $1  ;;
      *.7z)      7z x $1        ;;
      *.xz)      unxz $1        ;;
      *.exe)     cabextract $1  ;;
      *)         echo "\`$1': Unknown method of file compression" ;;
    esac
  else
    echo "\`$1' no foud"
  fi
}
Теперь для распаковки достаточно набрать:

user $ unpack  file

воскресенье, 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 стираются.

воскресенье, 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

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

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

четверг, 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. Настройка ядра.