понедельник, 16 декабря 2013 г.

И снова глюки fglrx

Установлена последняя доступная на сегодняшний день версия проприетарных драйверов AMD - ati-drivers-13.11_beta6. С завидной регулярностью (приблизительно, раз в день) экран КДЕ превращался в набор наложенных друг на друга треугольников разных размеров или даже превращался в набор полос при загрузке. Избавиться от этого можно было только перезапуском иксов.

Изучение логов показало, что драйвер fglrx ищет файл fglrx_dri.so в каталоге /usr/X11R6/lib64/modules/dri, а такого каталога вообще не существует. Файл же fglrx_dri.so был найден в каталоге /usr/lib64/dri.

Решение, конечно, костыльное, но какое есть. Просто создадим символическую ссылку из несуществующего пути на существующий. Недостающие каталоги создаем с помощью команды mkdir:

# mkdir /usr/X11R6 /usr/X11R6/lib64 /usr/X11R6/lib64/modules /usr/X11R6/lib64/modules/dri

# ln -s /usr/lib64/dri/fglrx_dri.so /usr/X11R6/lib64/modules/dri/fglrx_dri.so

Теперь, вроде как, все работает и ошибок в лог не сыпется.

воскресенье, 15 декабря 2013 г.

Windows 7 загрузочная флешка из под Linux

Если у вас возникла ситуация, когда на комп без дисковода нужно установить или  попрввить испорченую Windows 7, то эта заметка вам поможет. Здесь будет рассказано как сделать загрузочную флешку имея образ диска Windows 7, и сделать это из Linux. Все действия нужно производить из-под root.

Для начала нужно отформатировать флешку в NTFS. Если флешка определяется как /dev/sdb1, то имеем:

# mkfs.ntfs -f /dev/sdb1

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

# mkdir /mnt/mustdie /mnt/flash
# mount -o loop mustdie7.iso /mnt/mustdie
# mount /dev/sdb1 /mnt/flash
# cp -r /mnt/mustdie/* /mnt/flash

где
    mustdie7 - образ Windows 7;
    /dev/sdb1 - флешка для записи образа.

И наконец самое главное - устанавливаем программу ms-sys, которая умеет создавать MBR на диске в стиле разных версий Windows. Установка для Gentoo:

# emerge sys-block/ms-sys
и записываем Windows 7 MBR на флешку:

# ms-sys -7 /dev/sdb

Всё. Теперь перезагружайтесь, выбирайте в БИОСе загрузку с usb-накопителя и ... Ну, вы меня поняли - винда мастдай.

воскресенье, 8 декабря 2013 г.

Автоматическая загрузка модулей ядра

После установки VirtualBox, столкнулся с проблемой запуска виртуальной машины. При запуске ВМ ругалась на незагруженный модуль ядра vboxdrv. Можно, конечно, загрузить модуль и вручную:

# modprobe vboxdrv

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

А нужно всего лишь отредактировать файл /etc/conf.d/modules

# nano /etc/conf.d/modules

и дописать в переменную modules требуемые модули ядра (vboxdrv и it87 в моем случае)

modules="vboxdrv it87"

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

среда, 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

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

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