• Авторизация


Сага о real-time 20-07-2008 18:42 к комментариям - к полной версии - понравилось!


Тонкая настройка Ubuntu Linux

"Только познав UNIX, искатель может,
наконец, открыть консоль своей души
Pи ввести главный вопрос: whoami"...
Бхагаван Шри Константин

Наверное, каждый более или менее опытный пользователь Linux знает, что одно из главных преимуществ свободного ПО перед закрытым состоит в возможности изменить практически любой параметр настройки. Другой вопрос как именно это сделать, ибо редактирование конфигурационных файлов вручную до сих пор остается чуть ли не основным средством настройки окружения. Хотя, безусловно, ситуация меняется, например в моей первой Linux-системе надо было править конфиги ради того, чтобы просто поменять фон рабочего стола. Но это было уже довольно давно.

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

Ядреный Linux

Конечно, все вы уже не раз слышали о том, что в высшей инстанции Linux это лишь голое ядро, которое даже не является операционной системой в нашем понимании этого термина. Ядро надо скомпоновать с другими компонентами, такими как консоль bash, X-сервер, менеджер окон и прикладные программы, для того чтобы получить дистрибутив Linux, который, в свою очередь уже является операционной системой. Вот такая чехарда.

Современные дистрибутивы проделали огромный путь, квинтэссенцией достижений современного Linux'остроения являются дистрибутивы Ubuntu от Canonical Ltd. и Mandriva Linux от компании Manriva. Это два соперника за десктоп обычного пользователя, и если Mandriva предоставляет более низкий порог [вхождения в средуk, то Ubuntu открывает более широкие возможности в дальнейшем обширность репозиториев и хрестоматийное внутреннее устройство системы (в Mandriva наворочено такого, что, пожалуй, без средств графической настройки туда лучше и не соваться) позволяет без труда построить на основе Ubuntu любую систему, будь то офисный компьютер для обработки текстов и таблиц, сервер уровня предприятия или домашняя мультимедиа-система. Особенно, если вы грамотно подбирали оборудование с учетом его совместимости с вероятной ОС.

Однако о первоначальном значении слова Linux пользователи уже забыли, а между тем несколько манипуляций с различными версиями ядра способны, как выразился небезызвестный в среде "убунтоводцев" и "дебианщиков" блоггер Михаил virens Конник, чей блог разместился по адресу http://mydebianblog.blogspot.com, "воткнуть куда следует шило" вашему компьютеру, чтобы он стал в разы быстрее отвечать на ваши действия.

Однако, скажем сразу, из вашего Pentium 4 с частотой 1.5GHz никто Core Quad не сделает и за уменьшение времени отклика вы заплатите небольшим падением производительности. Вот только нужно ли оно вам?

Что дает применение ядер, заточенных под время отклика по сравнению со стандартными? А вот что: Система становится намного "отзывчивей". Теперь реакция, скажем, на нажатие кнопки происходит чуть ли не мгновенно вне зависимости от общей нагрузки на систему. Вы можете рендерить видео, архивировать файлы, компилировать программное обеспечение не ощущая задержек при работе с другим программным обеспечением в это же время на этой же системе. Я пишу эту статью на первом десктопе, а на четвертом у меня распаковывается 1.5 гигабайтный 7z архив, никаких неудобств.

Ни одна программа не отнимет у другой ресурсы, необходимые ей для нормального функционирования. Это значит, что если вы запустите Firefox, OpenOffice.org, Thunderbird, будете ожесточенно крутить кубом рабочего стола ваш XMMS или какой-нибудь Banshee даже не запнется, все также воспроизводя вашу музыку. А если вы потом щелкните на его значке в трее он вылетит оттуда мгновенно, как будто и нет запущенных в фоне прожорливых монстров. Это относится не только к таким относительно "легким" пакетам, как медиа-плееры, но и, к примеру, к такому медленному таракану, как bit-torrent клиент Azureus (Vuze), который, будучи написанным на Java очень любит отъесть половину памяти моего ПК и оттяпать до 30% процессорного времени. Из трея он, при применении нового ядра, он выскакивает за секунду. На стандартном ядре это занимало секунд 10-15 (у меня не самая мощная машина).

Должен заметить, что это в первую очередь заинтересует пользователей средних по нынешним меркам систем, ибо эффективность работы повысится, а небольшая потеря производительности для таких систем будет незаметна. Обладатели мощных систем или те, кто использует wine для запуска ресурсоёмких 3D-игр будут не в восторге. Лично я перешел на новое ядро и нисколько об этом не жалею. Тем не менее, стандартное ядро дистрибутива все также установлено и я стараюсь держать его обновленным.

Строго говоря, идея пожертвовать немного производительности в угоду отзывчивости системы родилась не на пустом месте, а в среде профессиональных музыкантов и художников, использующих Linux для обработки звука и аудио. Дело в том, что отклик на нажатие кнопки в том же профессиональном звуковом редакторе Rosengarden на стандартном ядре просто не позволяет выделить точно тот или иной участок звукового трека. Точно также в графических утилитах задержка между движением мыши и движением экранного пера может не устраивать тех, кто работает с графикой.

За работу взялись программисты сообщества. Кон Коливас (по специальности он врач-анестезиолог) написал патч для стандартного ядра Linux, который понижал время отклика системы. Ядра с патчами Коливаса поставлялись некоторое время для дистрибутива Ubuntu Studio и имели название linux-lowlatency. Патчи австралийского врача содержат в себя изменения системы ввода/вывода и диспетчера задач. Выигрыш в отклике эти патчи дают, но полностью своё предназначение не оправдывают время отклика все еще достаточно высоко. Патчи Кона Коливаса ранее составляли ветку ядер -ck, но теперь эта ветка не развивается.

Инго Молнар создал свою ветку патчей под названием -rt, что значит Real Time. Установив это ядро вы получаете hard real-time систему, по сравнению с веткой -ck, которая реализует soft real-time. Патчи Инго Молнара отличаются от патчей Кона Коливаса иной реализацией планировщика задач используется CFS (Complitely Fair Scheduler, "полностью честный планировщик", планировщик с полностью справедливым распределением времени). Молнар и Коливас долго спорили, чей патч лучше и где именно, но в конце-концов точка зрения Инго победила (да и отклик системы -rt в среднем в 1.5 раза меньше, нежели -ck). В частности, если для прежних версий Ubuntu Studio применялись ядра linux-lowlatency, то теперь применяются ядра linux-rt.

Ядерный синтез

Давайте вспомним, как устроена наша любимица с четырехцветным логотипом. Windows практически монолитная система, множество компонентов встроено непосредственно в ядро операционной системы, например графический интерфейс. Естественно, что сбои и нестабильности в любом из компонентов ОС приводят к общей нестабильности и падениям. Драйвера устройств выполнены в Windows в виде модулей и поэтому при нестабильности одного драйвера ОС в принципе способна загрузится и работать, но на практике ошибки в драйверах вызывают неработоспособность системы из-за того, что они выполняются на уровне ядра. В то же время, модульное представление многих, зачастую, базовых драйверов неблаготворно сказывается на общей производительности ОС.

Что мы имеем в Linux? А здесь мы видим, что ядро отвечает только за то, за что оно должно отвечать, не включая никаких дополнительных функций. Внутри же ядро также имеет модульную структуру, позволяющую легко модифицировать отдельные компоненты ядра не изменяя другие. В то же время, к примеру, драйвера устройств могут быть как встроены в ядро, так и выполнены в виде модулей. Первый вариант подразумевает высокую производительность и увеличение объема памяти, используемой ядром, а второй подразумевает увеличение объема памяти, используемой модулями ядра (больше, нежели при включении драйвера в ядро) и повышение стабильности, ибо ядро Linux меньше зависит от своих модулей, нежели ядро Windows. Соответственно, ядро Linux состоит из непосредственно ядра и его модулей.

Для каждой версии ядра существует свой набор модулей. Соответственно, в виде пакетов в репозиториях Ubuntu это выглядит как: linux-image-версия пакет, содержащий образ ядра. Linux-ubuntu-modules-версия пакет, содержащий модули ядра от сообщества независимых разработчиков linux-restricted-modules-версия пакет, содержащий модули ядра, поставляемые сторонними разработчиками. Linux-headers-версия пакет, содержащий заголовочные файлы ядра. Опционален, требуется лишь для установки некоторых модулей.

Например, в моей системе установлено:

  • linux-image-2.6.24-16-generic
  • linux-image-2.6.24-19-generic
  • linux-image-2.6.24-19-rt
  • linux-restricted-modules-2.6.24-16-generic
  • linux-restricted-modules-2.6.24-19-generic
  • linux-restricted-modules-2.6.24-19-rt
  • linux-ubuntu-modules-2.6.24-16-generic
  • linux-ubuntu-modules-2.6.24-19-generic
  • linux-ubuntu-modules-2.6.24-19-rt

Как видно, в моей системе присутствую ядра версий 2.6.24-16 и 2.6.24-19 (стандартная ветка generic) и ядро версии 2.6.24-19-rt (ветка real-time, т.е. с патчами Инго Молнара).

Установка и запуск

Не мудрствуя лукаво, скажу, что в Ubuntu Linux установка нового ядра никаких катастроф за собой не влечет. Даже если ядро не заработает, то вы всегда сможете запустить прежнее и удалить неугодное. Три ядра в моем случае, это еще не так много. Итак, видимо, после расписанных вкусностей вы захотели испробовать ядро с патчами от Инго Молнара на своей системе. Для этого введите:
sudo apt-get install linux-rt
или
sudo aptitude install linux-rt

Особой разницы между командами нет, но я рекомендую пользоваться второй, ибо Aptitude гораздо лучше разбирается с зависимостями между пакетами, нежели apt-get. Разница настолько существенна, что команда разработчиков Debian рекомендует полностью отказаться от использования apt-get.

После скачивания и установки вы можете перезагрузится и увидите, что в списке начального загрузчика появились два новых пункта. Выбирайте свежеустановленное ядро и пробуйте. Понравилось используйте. Не понравилось удаляйте командой
sudo aptitude remove linux-rt Вот и всё. Теперь вы можете похвастаться перед друзьями real-time системой.

Диалог с ядром

Конечно, Linux стабильная система и ввести её в состояние "не отвечает" обычными методами не так-то просто. Но Linux'оиды народ неугомонный, то, что они делают, порой, вводит в ступор даже сверхстабильную Slackware. Поэтому необходимо средство, позволяющее корректно завершить работу в случае сбоя. "Почему бы просто не нажать на Reset, как обычно?" Да просто потому, что подобные вещи для Linux чаще всего означают смертельный исход файловые системы Linux не приспособлены к таким нагрузкам и если выключить их не размонтировав, вы вполне можете получить "Unable to mount root file system. System halted". Но выход есть. Вспомните, что ядро Linux не "висит" никогда. Даже если система никак не реагирует на клавиатуру и мышь, ядро Linux готово воспринимать ваши команды. Другое дело дойдут ли они до него.

Есть способ сделать так, чтобы дошли! Для этого и существует клавиша SysRq (Print Screen). Если вы думаете, что она предназначена лишь для скриншотов, то глубоко ошибаетесь. Ядро Linux слушает эту клавишу лично, в обход любых приложений.

Итак, приведем список сочетаний клавиш:

  • Alt+SysRq+r перехватывает у X-сервера клавиатуру и мышь. Полезно, когда висят X-ы и волшебное сочетание Ctrl+Alt+BackSpace не срабатывает. Вы можете переключится на консоль и убить X-сервер.
  • Alt+SysRQ+k убивает все процессы данной консоли. Не используйте, когда вы находитесь в графическом режиме! Х-ы повиснут и вы не будете видеть, что печатаете.
  • Alt+SysRQ+b работает также, как и кнопка Reset. Просто перезагружает систему без синхронизации файловых систем и без их размонтирования. Не используйте это без предварительных шагов!
  • Alt+SysRQ+o выключает компьютер через APM (Advanced Power Management)
  • Alt+SysRQ+s записывает все данные из кеша диска на диск, т.е. выполняет синхронизацию.
  • Alt+SysRQ+u перемонтирует все смонтированные файловые системы в состояние "только для чтения". После этого вы можете жать Reset без риска для системы.
  • Alt+SysRQ+m выводит информацию о памяти в консоль.
  • Alt+SysRQ+e посылает сигнал SIGTERM всем процессам кроме init. Этот сигнал позволяет процессам корректно завершиться (с сохранением данных).
  • Alt+SysRQ+i посылает сигнал SIGKILL всем процессам кроме init. Это убьет все процессы, даже те, которые не успели завершится или зависли.
  • Alt+SysRQ+L посылает SIGKILL всем процессам, т.е. даже init ключевой процесс будет убит. Естественно, после этого система окажется неработоспособной.

По умолчанию, в Ubuntu не включена возможность использования Magic SysRq, поэтому нам следует включить её. Нажмите Alt+F2, наберите:
sudo gedit /etc/sysctl.conf. Добавьте в конец этого файла строку:
kernel.sysrq = 1 и перезагрузите систему.

Теперь при фатальном зависании системы вы можете выполнить следующее:

  1. Alt+SysRQ+e (корректно завершит ваши процессы)
  2. Alt+SysRQ+u (размонтирует ваши файловые системы, при этом синхронизация будет выполнена автоматически)
  3. Alt+SysRQ+i (убьет зависшие процессы, не отреагировавшие на команду SIGTERM)
  4. Alt+SysRQ+b (перезагрузка).
Фактически это повторяет работу скрипта завершения работы, только на низком уровне. Это гарантирует сохранность ваших данных в случае непредвиденных зависаний и сбоев.

И в завершение: команда whoami возвращает в консоль имя текущего пользователя (Who Am I? - Кто я?)

От автора: эта статья будет опубликована в одном из ближайших номеров газеты "Мой друг компьютер".

Сообщение добавлено через MovableType API

вверх^ к полной версии понравилось! в evernote
Комментарии (3):
Leonardo19 21-07-2008-17:31 удалить
Спасибо. Узнал много нового и важного для себя.
napaM-naM-naM 30-07-2008-00:12 удалить
отличная статья! =) спасибо
napaM-naM-naM 30-07-2008-00:28 удалить
хммм... поставил это ядро -rt ... Грузилось порядочно дольше обычного. После загрузки даже подумалось мне, что я неправильно ввёл логин или пароль, ибо комп призадумался. Дальше, открыл png'шку. Нажал F11, чтобы развернуть на весь экран и... как бы это сказать-то... она "перерисовалась" 4 раза, пока получилась действительно на весь экран. Также как-то размазанно изменяются размеры окон, даже при развёртывании и восстановлении. Вообщем, работать как-то неприятно. Система моя: Intel Core2 Duo T8100 @ 2100 (x2), 2Gb RAM. Ноутбук от Fujitsu Siemens "AMILO" Ubuntu 8.04 обновленная. Ядро generic работает очень хорошо - пожаловаться не могу. Вот такой вот мой тест :)
PaladinOfSky 30-07-2008-08:11 удалить
Странно. У меня все отлично. Хотя время загрузки ядра и вправду увеличилось. Возможно имеет место недостаточная оптимизация под многоядерные процессоры?


Комментарии (3): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Сага о real-time | PaladinOfSky - Путь радикала | Лента друзей PaladinOfSky / Полная версия Добавить в друзья Страницы: раньше»