Site Mascot
 

Не удивляйтесь, сайт переехал: был http://smacker.fatal.ru, стал http://smacker.heliohost.org.

Linux в стеснённых условиях

28.03.2006 12:59

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

 
Что есть «стеснённые условия»?
В моём случае речь идёт о использовании Linux на моём старом ноутбуке (как говорят злопыхатели, «лэптопе»), со следующей конфигурацией:

 

Pentium-I MMX @ 166 MHz;
32 Mb RAM;
4 Gb HDD;
8х CDROM;
Video NeoMagic «Magic Graph 128ZV»: LCD TFT 12', 800х600;
Sound Yamaha OPL3-SA2;
3 x PCMCIA, type I и II; PCMCIA Modem Option International 33.6
LPT (Bidirectional);
COM (9 pin);
PS/2;

 

Многие говорят, что на такую машину поставить что-то более-менее свежее нельзя, разве что какой-нибудь ASP 7.3. В то же время, я уже давно использую ASP 9.2 для своих задач и даже нахожу его более «быстрым» дистрибутивом, нежели упомянутый выше. Разумеется, поклонники Slackware скажут, что дистрибутив от Патрика работал бы быстрее и лучше, а Gentoo-шники будут утверждать, что их системы в среднем на 5% производительнее прочих, но я следую своим симпатиям. В конечном итоге, значительное количество софта, которым я пользуюсь, я собирал из исходных кодов прямо на ноутбуке, а установленную «базовую» систему чистил от мусора, так что к классу «поставил что дали — и всё работает» я свою машину не отношу.
Главной проблемой в данном случае является прежде всего малый объм оперативной памяти. На 4 гигабайта жёсткого диска пожаловаться сложно, а процессор сам по себе совсем не плох. Купить же дополнительную плитку мне не позволяет жаба-удушительница, так как по моим данным за удвоение памяти мне придётся заплатить около тысячи рублей, или почти 20% стоимости всего агрегата в целом. В принципе, по нынешним временам это отнюдь не большие затраты, но — во-первых, по сравнению с общей ценой машины всё-таки довольно существенные, а во-вторых, я не вижу смысла тратить дополнительные средства на улучшение и без того устаревшей машины (особенно когда можно обойтись и без этого).
Далее я по пунктам расскажу о том, что и как я пытался оптимизировать, чтобы уменьшить запросы системы к оперативной памяти.

 

Ядро
Пересборка ядра была сделана далеко не в первую очередь, но я постараюсь соблюдать не хронологический, а логический порядок изложения. Долгое время я пользовался ядром «из коробки» и считал его работу вполне приличной.
Однако у коробочного ядра есть и много недостатков: во-первых, в нём включено очень много опций, которыми я никогда не буду пользоватся: начиная от поддержки SCSI или VoIP-плат и заканчивая USB, Bluetooth и ISDN. Во-вторых, некоторые полезные функции оставлены без внимания (так как ядро собирается без частей типа EXPERIMENTAL), прежде всего — нет поддержки фреймбуфера, который может весьма и весьма скрасить работу в чистой консоли.
Коробочное ядро имеет размер сжатого образа 1199.2 Кб и резервирует для себя почти 3.5 Мб: таким образом, доступными остаются только 29172 Кб памяти.
Я пересобрал ядро (2.4.22), отключив все не используемые мной функции (включая даже поддержку инфракрасного порта), а теоретически полезные (поддержка файловых систем, оборудования) вынес в модули. Из ранее отсутствовавших функций я в итоге добавил, пожалуй, только фреймбуфер VGA-16 (как показал опыт, «родной» фреймбуффер для NeoMagic не может быть инициализирован, так как требуемый им диапазон ввода-вывода оказывается занят). Сборку ядра я проводил с флагами -Os, -march=pentium-mmx и -mmmx.
Получившееся в итоге ядро имеет размер образа bzImage 900 Кб и оставляет свободными 29788 Кб памяти, таким образом я выиграл более пол-мегабайта памяти, или примерно 2%. Это, разумеется, не так уж и много, но в принципе неплохо.
Образ Initrd для загрузки не используется (собственно, и поддержка RAM-дисков в ядре отключена).

 

Файловая система
В пылу своего увлечения XFS я когда-то перевёл на неё не только десктопную систему, но и ноутбук. Однако, когда я стал думать о оптимизации использования памяти ядром, оказалось, что модуль xfs.o имеет размер в 600 Кб. Встал вопрос: стоят ли преимущества в скорости чтения-записи и поиска лишних полумегабайта оперативной памяти? Я решил, что не стоят, и при сборке ядра включил в него только поддержку ext2 (ext3 — модулем), на которую и перевёл ноутбук. Призрачная угроза потери данных меня не очень пугает (по большому счёту, такое у меня было как раз только с XFS — дважды я сохранял файлы и как раз в эту секунду у меня отключали свет), так как пользуюсь ноутбуком я всё-таки не очень интенсивно, а в случае чего даже его старая батарея даст мне возможность спокойно его отключить... минут через 40 работы...
Кстати говоря, резкого падения производительности жёсткого диска я пока не заметил...

 

Виртуальные консоли
Пункт маленький, но сказать об этом надо. В файле /etc/inittab я сократил количество виртуальных консолей с 6 до 2. В принципе, можно было бы обойтись и одной — но это «до первой неполадки», а они хотя и редко, но бывают... В итоге сэкономил несколько метров памяти (как утверждалось в «small memory HOWTO», 6 виртуальных консолей съедают до 4 Мб).

 

Загрузочные скрипты
ASP основан на Fedora Core, со всеми вытекающими последствиями. В том числе и системой «тяжёлых» загрузочных скриптов. Разумеется, если частота процессора меряется на гигагерцы, нет большой разницы, будет ли каждый скрипт заново проверять, где именно лежат его конфигурационные файлы (хотя и тут можно усмотреть повод поморщиться). А вот на скромных ресурсах лишние ветвления, открытие дополнительных файлов и т.д. отнимают драгоценное время.
Я отредактировал файл /etc/rc.d/rc.sysinit таким образом, чтобы в нём не оставалось по возможности ничего лишнего: зачем искать в /etc/fstab раздел свопа, если я и так знаю, что это hda1? Кроме того, для выполнения даже самых простых операций он пользовался функциями из отдельного файла functions. Я постарался убрать эти функции (например, там было несколько функций связанных с выводом сообщений, я везде написал просто echo). Также я постарался свести к минимуму чтение дополнительных файлов (в основном конфигов), чтобы процесс шёл быстрее. Я убрал также квотирование, которым я отродясь не пользовался и проверку файловой системы. В случае чего я проверю её вручную, а автоматическая проверка 4-х гигабайтного диска занимает кучу времени. В итоге в файле «из коробке» 831 строка, в моём варианте — 342.
Для загрузки в 3-ий уровень я стал использовать не стандартный скрипт /etc/rc.d/rc, а свой level_3.rc. В нём всего 48 строк, но он устанавливает запускает сервисы syslog, keytable, pcmcia и xfs, причём последний — в фоне, что сокращает время загрузки (да-да, я запускаю xfs по умолчанию, потому что под пользователем сижу в иксах). Все параметры прописаны в самом скрипте.
В результате система вместо 45 секунд (со скриптами «из коробки») грузится 22 секунды — имеется в виду время от GRUB-а до приглашения login.
Выключение и перезагрузка по-прежнему выполняются скриптом rc — благо скорость выполнения указанных операций уже не критична. Впрочем, выключался он всегда заметно быстрее, чем загружался...

 

X
Иксы — это больное место для такой машины, ибо едят ресурсов они очень много (Xserver+XFS могут съесть до трети памяти и даже больше). С другой стороны, отказываться от них совсем — это значит и работать с меньшим удобством, и сделать свою машину менее «презентабельной» в глазах окружающих — а ведь именно «живой пример» Пингвина в действии является, бесспорно, одним из наиболее действенных методов «агитации».
Есть хороший вариант — TinyX, или kdrive — набор серверов, как «в былые времена» заточенных под определённое железо и обладающих заметно усечёнными возможностями по сравнению с полновесными иксами. Но они обходятся без помощи X Font Server-а и заметно менее требовательны к ресурсам. Ходят слухи, что загружаются они за несколько секунд даже на совсем слабых машинах. В версиях XFree 4.2.0 и выше (про то, начиная с какой — могу и напутать) правила для их сборки включены непосредственно в пакет исходных кодов.
Я тоже решил попробовать перейти на TinyX и использовал для сборки XFree 4.5.0. Но обнаружилось, что для NeoMagic специального TinyX сервера нет, а из того, что есть, мне могут подойти или или vesa, или fbdev. На практике выяснилось, что оба эти сервера на моём железе работают из рук вон плохо — собственно, не работают, а только запускаются и показывают «абстракционистские» картинки. Как я не бился, запустить по-человечески даже Xvesa мне не удалось ни в одном режиме. Лучшее, что я смог увидеть — красно-синяя картинка 800х600...
Остался только один выход — пересобрать обычные иксы. Для этого я отредактировал host.def таким образом, чтобы получить сервер только под своё железо, без Xinerama и прочего, и без модулей. В итоге полученный сервер был просто перенесён на ноутбук с десктопа, где и был собран. Новые иксы в среднем занимают на 2 мегабайта памяти меньше, чем «коробочные». А вот «самосборный» XFS, хотя и чуть меньше размером, а вот памяти ест на 3%(от общего объёма) больше коробочного, так что я оставил старый.

 

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

 

Файлы
Очевидно, что «голословный» рассказ о содеянном не представляет значительной ценности для заинтересованного читателя, поэтому я привожу ссылки на файлы, упомянутые в тексте.
kernel-config
rc.sysinit
level_3.rc
host.def
Буду рад сообщениям об ошибках, советам и пожеланиям по данному вопросу.
  1. jamesjames
    URL: http://www.linux.org.ru/people/NaiLi/profile
    ***
    Кое-что почерпнул. Скринсшоты запланированы?
    [ Запись от 07.04.2012, отправлена в 4:54 ]
  2. Я буду рад, если вы оставите свой отзыв об этой заметке:

    Никнейм

    Email

    URL

    Заголовок комментария

    Проверка на человечность
    - Введите буквы:
    The CAPTCHA image