Содержание


Запуск Linux на PlayStation 3.

Часть 2. Работа с памятью

Освобождаем память PS3 Linux

Comments

Серия контента:

Этот контент является частью # из серии # статей: Запуск Linux на PlayStation 3.

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Запуск Linux на PlayStation 3.

Следите за выходом новых статей этой серии.

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

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

Если вы привыкли к настольным системам, которым никогда не требовались дополнительные разделы подкачки, вам может показаться странным, что вопросам работы с памятью уделяется такое внимание. Однако в действительности проблема заключается в том, что PS3 не обладает достаточным объемом системной памяти, чтобы обеспечить комфортную работу современной настольной ОС Linux, установленной "из коробки". При использовании стандартной установки Fedora 7 большая часть системного (и вашего) времени уходит на подкачку данных. Подкачка очень сильно снижает производительность системы. В системе PS3, обладающей 2,5-дюймовым жестким диском, доступ к которому осуществляется при помощи гипервизора, и имеющей оперативную память, скорость которой существенно выше, чем у большинства настольных ПК, этот контраст еще более заметен, чем в случае с обычной настольной системой.

Я должен сделать еще одно замечание: при использовании ядра версии 2.6.21, установленного по умолчанию в моей тестовой системе, процесс перезагрузки системы не был стабильным. Установка ядра версии 2.6.23, взятого с компакт-диска "Addons CD" или полученного путем обновления Fedora с помощью стандартного менеджера обновлений, исправляет эту проблему. Вероятно, установить новую версию ядра с компакт-диска "Addons CD" будет лучшим решением.

Освобождаем память

Пришло время раскрыть эту важную тему. Большинство пользователей настольных систем Linux уже давно забыли о необходимости выполнять какие-то специальные действия для освобождения памяти. Несмотря на то, что системные процессы стремились занимать всю доступную память даже в те времена, когда машина с 64 МБ ОЗУ считалась мощным сервером, на тот момент просто не использовалось такое количество программ, как сейчас, и поэтому не было необходимости в установке большого количества памяти. Однако PS3 является системой, в которой объем системной памяти играет существенную роль, а Fedora 7 при всех своих достоинствах не рассчитана на работу в системах с малым объемом ОЗУ.

Чтобы уменьшить загрузку памяти, нужно начать с выявления наиболее ресурсоемких процессов. Проще всего сделать это при помощи команды top, которая в реальном времени отображает на экране список системных процессов. По умолчанию команда top показывает вам процессы, отсортированные по степени их влияния на загрузку CPU, что, безусловно, удобно для выполнения других задач оптимизации, но не очень хорошо подходит для нашего случая. Обратите внимание на то, что команда top выводит суммарную статистику использования памяти. Например, на PS3 с запущенной средой X и некоторыми отключенными службами я получил следующую статистику:

Листинг 1. Неужели моя система действительно использует столько памяти?
Mem:    219192k total,   213692k used,      5500k free,     7232k buffers
Swap:  4192956k total,        0k used,   4192956k free,    89468k cached

Запустите в командной оболочке команду top, нажмите O (это заглавная английская буква, означающая сортировку – "order by"), затем нажмите q и клавишу ввода. В этом примере буква q означает "резидентный размер" и показывает вам фактический объем памяти, используемой процессом. Другим возможным выбором может быть опция o (виртуальный размер).

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

Листинг 2. По-видимому, моя система действительно использует столько памяти
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3259 root      20   0 65424  36m 4996 S    2 17.2   0:01.39 Xorg
 3422 seebs     20   0 92900  24m  20m S    0 11.6   0:01.22 nautilus
 3439 seebs     20   0 58600  24m  22m S    0 11.5   0:00.36 nm-applet
 3473 seebs     20   0 56620  24m  14m S    0 11.4   0:01.22 /usr/bin/sealer
 3420 seebs     20   0 50248  21m  18m S    0 10.2   0:01.90 gnome-panel
 3476 seebs     20   0 48988  14m  10m S    1  6.9   0:00.64 gnome-terminal
 3445 seebs     20   0 33104  14m 9464 S    0  6.7   0:00.40 puplet
 3453 seebs     20   0 45764  13m  12m S    0  6.4   0:00.22 gnome-power-man
 3414 seebs     20   0 41920 9696 8052 S    0  4.4   0:00.29 gnome-settings-
 3418 seebs     20   0 22200 8996 7316 S    0  4.1   0:00.33 metacity
 3297 seebs     20   0 40544 8384 7088 S    0  3.8   0:00.32 gnome-session
 3432 seebs     20   0 20076 6120 5244 S    0  2.8   0:00.10 bluetooth-apple
 3444 seebs     20   0 14692 6060 3532 S    0  2.8   0:00.24 python

Практически всю первую десятку "пожирателей" памяти составляют процессы среды X. Вот почему, если вы действительно хотите освободить память, одним из первых ваших действий могло бы стать закрытие X. Принимая во внимание количество GNOME-приложений в вышеприведенном списке, у вас может возникнуть желание попробовать работать с KDE, но, боюсь, это вам не даст ровным счетом ничего, поскольку KDE занимает примерно столько же памяти PS3, что и GNOME.

Фактически, если вам крайне необходимо работать в среде X, то лучше всего поступить следующим образом: не пользоваться всеми возможностями, предлагаемыми графическим окном входа в X, а вместо этого запускать X из консоли, с менее ресурсоемким оконным менеджером и меньшим количеством дополнительных программ. Но как это сделать? Вашим первым шагом будет выход из программы top обратно в командную строку — для этого просто нажмите q.

Использование уровней запуска

Уровни запуска (runlevels) — это функциональная возможность, для изучения которой у многих пользователей Linux никогда не было повода. Уровни запуска главным образом унаследованы от операционной системы System V UNIX®, хотя, конечно, некоторые отличия имеются. Уровень запуска— это определенный набор совместно выполняемых системных служб. По историческим причинам обычная настольная среда Linux, которая работает с графической оболочкой входа в систему, запускающей менеджер Gnome или KDE, называется runlevel 5. На обычных изолированных рабочих станциях без X часто используется уровень runlevel 2. Теоретически вы можете изменить системный уровень запуска, просто выполнив команду init , расположенную в папке /sbin. Например, выполнив (от имени пользователя root) команду /sbin/init 2, вы переведете систему на уровень runlevel 2 (обычно это достигается путем остановки всех служб, не используемых на уровне runlevel 2, и последующего запуска всех служб, используемых на этом уровне).

Уровень запуска по умолчанию указан в строке файла /etc/inittab, которая выглядит примерно следующим образом:

Листинг 3. Уровень запуска по умолчанию
id:5:initdefault:

Формат строки сформировался исторически, и все, что на самом деле нужно знать для успешного изменения уровня запуска – это то, что вы можете изменить цифру 5 на цифру 2 или 3. После этого при следующей загрузке системы вместо среды X вы увидите строку приглашения в текстовой консоли.

Неоспоримый факт заключается в том, что текстовая консоль является гораздо лучшим выбором для работы в системе с ограниченным объемом памяти, нежели полновесная среда X. А сейчас наступил подходящий момент для того, чтобы разобраться и посмотреть, от чего же мы можем избавиться. Измените значение параметра initdefault в файле /etc/inittab на 3 и перезагрузите систему (для смены уровня вы можете использовать команду init, но бывают случаи, в которых она не работает). Вы сразу же заметите, насколько быстрее будет загружаться система. Сразу же после входа в систему снова запустите команду top. Результаты могут варьироваться, но вы увидите, что память используется примерно наполовину, а не почти полностью, как это было раньше. Это уже достижение!

Освобождаем еще немного памяти

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

Листинг 4. Извините, я этого не заказывал
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2204 root      39  19 30056  12m 5632 S    0  5.7   0:00.70 yum-updatesd
 1825 root      20   0 19220 5052  972 S    0  2.3   0:00.00 python
 2238 haldaemo  20   0  6648 2728 2180 S    0  1.2   0:00.27 hald
 1909 root      20   0 13480 2236 1564 S    0  1.0   0:00.02 cupsd
 2015 root      20   0 12352 1976 1272 S    0  0.9   0:00.02 console-kit-dae
 1958 root      20   0 12132 1796  748 S    0  0.8   0:00.01 sendmail
 2301 root      20   0  5548 1792 1484 S    0  0.8   0:00.02 login
 2141 xfs       20   0  5388 1776  884 S    0  0.8   0:00.05 xfs
 2425 seebs     20   0  5392 1732 1480 S    0  0.8   0:00.08 bash
 2371 seebs     20   0  5392 1728 1480 S    0  0.8   0:00.08 bash
 1966 smmsp     20   0 10356 1576  696 S    0  0.7   0:00.00 sendmail
 2221 avahi     20   0  3772 1520 1344 S    0  0.7   0:00.07 avahi-daemon
 1751 root      20   0 11332 1348  588 S    0  0.6   0:00.43 pcscd
 1796 root      20   0 29652 1304 1032 S    0  0.6   0:00.02 automount

Безоговорочно, самым ресурсоемким процессом является yum-updatesd, по-видимому, представляющий собой службу программы обновления yum. К счастью, мы с легкостью можем обойтись без этой службы – при необходимости можно в любой момент запустить yum вручную.

Редактирование уровней запуска

К сожалению, не существует таких специальных уровней запуска, как например "уровень runlevel 3 без службы yum-updatesd". Это означает, что настало время приступить к самостоятельному отключению служб. Есть несколько способов сделать это. Каждый уровень запуска представлен соответствующей подпапкой в папке /etc/rc.d, называющейся rcN.d (где N – номер уровня). Например, уровень runlevel 3 определяется файлами, расположенными в папке /etc/rc.d/rc3.d (в Fedora 7 для этих папок существуют символьные ссылки, расположенные в папке /etc, но лучше приучиться использовать полные пути).

В каждой из этих папок находятся файлы с довольно загадочными именами, такими как "K74nscd" или "S88nasd". На самом деле правила именования этих файлов простые: имена, начинающиеся с буквы K, являются службами, которые будут остановлены при переходе на данный уровень запуска (предположительно переход осуществляется с более высокого уровня, на котором эти службы могли использоваться), а имена, начинающиеся с буквы S – это службы, которые будут запущены при переходе на данный уровень. Двузначное число используется для указания очередности запуска служб: так, служба S13rpcbind запускается раньше, чем служба S14nfslock, которая, в свою очередь, запускается раньше, чем служба S25netfs. Просто и эффективно.

Как правило, эти имена не являются именами файлов, а представляют собой символьные ссылки к скриптам, хранящимся в папке etc/rc.d/init.d. Обычно для каждой службы пишется простой скрипт, запускающий либо останавливающий ее, а затем для этого скрипта создаются соответствующие ссылки. Когда команда init изменяет уровень запуска, происходит вызов тех или иных скриптов с указанным аргументом "start" или "stop".

Если вы чувствуете себя готовым к бою, вы можете просто удалить ненужные ссылки (как K*, так и S*) из папки соответствующего уровня. Точно также, вы можете добавить свои собственные ссылки. Другим способом редактирования уровней запуска является использование утилиты chkconfig — очень гибкой и мощной утилиты для управления символьными ссылками. Предупреждение: если случится так, что вы удалите какую-то критически важную службу, вам может понадобиться компакт-диск для восстановления системы, например, установочный диск Fedora (обратитесь к разделу Ресурсы), с помощью которого вы сможете выполнить чистую загрузку. Поэтому, прежде чем удалять какую-либо службу, вы должны понимать, для чего она предназначена, и какие другие процессы от нее зависят.

В качестве примера рассмотрим удаление службы yum-updatesd уровня runlevel 2. Для этого вы можете просто удалить ссылку /etc/rc.d/rc2.d/S97yum-updatesd. Если вы хотите отключить эту службу с помощью утилиты chkconfig, вам нужно выполнить следующую команду: /sbin/chkconfig yum-updatesd off.

Поиск дополнительного количества свободной памяти

При помощи команд chkconfig и top можно обнаружить достаточное количество процессов, существенно потребляющих память, узнать, для чего они предназначены, и при необходимости удалить их. Но что насчет процесса Python? Службы Python не существует. Команда ps показывает нам следующее:

Листинг 5. Информация о Python
	 $ ps ax | grep python
	  1825 ?        S      0:00 python ./hpssd.py

При помощи удобного инструмента grep можно обнаружить, что Python является частью службы hplip – "HP Linux Imaging and Printing". Если у вас есть определенные модели принтеров или сканеров производства HP, вы можете использовать эту службу, в противном случае она не нужна. Поэтому, отключите ее, если вы еще не сделали этого.

В итоге на самой обычной системе, которую мы собираемся использовать для разработки приложений, объем используемой памяти составил 49 896 КБ против первоначальных 213 692 КБ. Таким образом, объем свободной памяти увеличился с 5 500 КБ до 169 296 КБ, что существенно добавляет пространства для работы компилятора. Получаемый от этого выигрыш будет зависеть от рабочей нагрузки вашей системы. Многие фоновые процессы могут быть выгружены системой в swap-файл на жестком диске и в дальнейшем оставаться в этом состоянии все оставшееся время, не занимая память. Благодаря этому, данные процессы никаким образом не будут оказывать влияние на быстродействие вашей системы, а при долгой работе даже самый небольшой прирост в скорости работы компилятора имеет значение.

Далее: настройка среды X для приемлемой работы

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


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=304741
ArticleTitle=Запуск Linux на PlayStation 3.: Часть 2. Работа с памятью
publish-date=04282008