Запуск Linux на PlayStation 3. : Часть 2. Работа с памятью

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

Приставка Sony PlayStation 3 (PS3) может работать под управлением операционной системы Linux®, но для ее нормального функционирования требуется дополнительная настройка. В этой статье, второй из серии, автор рассматривает вопросы оптимизации системной памяти PS3.

Питер Сибах, автор, Независимый

Питер Сибах (Peter Seebach) работает с компьютерами много лет и постепенно приспособился. Хотя он до сих пор не понимает, почему мышку надо чистить так часто.



28.04.2008

В первой статье я рассказал о том, что представляет собой операционная система 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 рассматривается в качестве перспективной среды разработки приложений.

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

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

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

Пришло время раскрыть эту важную тему. Большинство пользователей настольных систем 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:

Существует семь уровней запуска – от 0 до 6. Уровень 0 – это режим остановки системы ("System halt"); перейти в этот режим можно, послав системе команду завершения работы. Уровень 1 – однопользовательский ("Single user mode") режим, который используется в основном для диагностики и устранения неполадок в системе. Уровень 2 – многопользовательский ("multiuser") режим, уровень 3 – многопользовательский режим с поддержкой сети (обычно под этим подразумевается NFS). Уровень 4 не используется, уровень 5 – это XDM (графический менеджер дисплея X) и уровень 6 – перезагрузка системы ("System reboot").

Согласно информации, содержащейся в файле /etc/inittab, вы вряд ли захотите сделать уровнем запуска по умолчанию уровень 0 или 6. После этого может оказаться очень сложно восстановить систему, хотя дружественный загрузчик ОС или компакт-диск восстановления системы, конечно, позволит вам исправить ситуацию. Практически во всех современных настольных системах Linux уровнем запуска по умолчанию является runlevel 5. Некоторые системы используют другие уровни запуска, но в Fedora 7 используется именно этот.

Формат строки сформировался исторически, и все, что на самом деле нужно знать для успешного изменения уровня запуска – это то, что вы можете изменить цифру 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, в которой было бы можно выполнять простую работу с графикой, не потеряв при этом возможности запускать компилятор.

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


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