Запуск Linux на PlayStation 3: Часть 3. Несколько приемов для разгрузки X11


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

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

Вся проблема с X11 заключается в том, что она вам может понадобиться. Наименьший объем необходимой памяти для X-сервера, который я видел на моей PS3, составлял около 40 МБ, что является большой ценой за нескольких симпатичных картинок (да, я учился работать с UNIX® в текстовом терминале, почему вы смотрите на меня с таким удивлением?). Однако иногда использование графической среды оказывается действительно очень полезным, и есть такие программы, которые не имеет смысла запускать без использования графического режима.

Запуск X11 на отдельной машине

Итак, вам нужна среда X11, а PS3 не обладает достаточным объемом памяти для ее комфортного запуска. На этот случай у вас в запасе есть одна хитрость — запуск X по сети. Можно настроить и запускать на вашей приставке клиент X, который будет соединяться с удаленным X-сервером. Это, конечно, не самый быстрый способ — похоже, гипервизор замедляет работу с сетью, и вы получите немного меньшую скорость по сравнению с заявленной номинальной скоростью гигабитного адаптера PS3. Однако если вам не нужна максимальная скорость, этот способ оказывается достаточно удобным. Чтобы воспользоваться этим способом, необходимо настроить несколько параметров. Прежде всего, вам нужно запустить на отдельной машине X-сервер.

Об этой серии

В этой серии из трех статей Linux рассматривается в качестве перспективной среды разработки приложений.

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

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

До сих пор не прекращаются слухи о том, что на PS3 можно запустить операционную систему Apple OS X. Основанием для этих слухов послужило то, что на одной из торговых выставок на компьютере Mac был показан демо-ролик о технологии Cell/B.E. Люди до сих пор продолжают публиковать фотографии происходившего и настойчиво заявлять о том, что это является доказательством. Что же, настало время еще больше усугубить ситуацию; чтобы продемонстрировать это, я буду использовать встроенный сервер X11 на компьютере OS X. На самом деле, X достаточно независимая от платформы среда, и основные приемы работы одинаковы для всех систем.

Для начала загрузите ваш X-сервер, откройте командную строку и запустите любую программу для работы с терминалом. Я выбрал xterm. Теперь у вас есть два пути. Первый – это использовать возможность ssh, позволяющую выполнять туннелирование X и, таким образом, перенаправлять запросы X от клиента (PS3) к серверу (в нашем случае это Mac). Второй путь – подключаться к X напрямую через сетевой кабель. Каждый из предложенных способов имеет как достоинства, так и недостатки; в случае обычного подключения по локальной сети проще объяснить и использовать последний. Его мы сейчас и рассмотрим. Первым делом вы должны выяснить значение переменной DISPLAY вашего X-сервера. Для этого на вашем X-терминале выведите на экран (с помощью команды echo) переменную среды DISPLAY, значением которой, вероятнее всего будет ":0.0". Это означает, что ваш X-сервер запущен на дисплее с именем "0.0". Двоеточие разделяет имя хоста и имя дисплея. Если бы ваш компьютер назывался "laptop", полное имя дисплея было бы "laptop:0.0". В тех случаях, когда имя хоста не указывается, X использует "умные" приемы для более быстрого доступа к локальному дисплею.

Постойте, что из них сервер?

В большинстве случаев под "сервером" подразумевается программа, не имеющая пользовательского интерфейса, а под "клиентом" — программа, взаимодействующая с пользователем посредством такого интерфейса. Тем не менее, в случае с X все в точности наоборот, и если вас это сбивает с толку – не расстраивайтесь. Многие пользователи были в замешательстве, столкнувшись с этим впервые.

Чтобы понять, почему графическая оболочка является "сервером", а выполняющая все вычисления программа – "клиентом", задайте себе вопрос: какие ресурсы предоставляются в ваше распоряжение? Вы поймете, что X-сервер предоставляет в ваше распоряжение графический дисплей. Соответственно, он обрабатывает поступающие клиентские запросы, такие как "нарисовать несколько пикселей" или "развернуть окно", а клиенты используют службы X-сервера по своему усмотрению.

Теперь, если вы просто сядете за PS3, настроите переменную среды DISPLAY (предположим, задав ей значение "laptop:0.0") и запустите xterm, то столкнетесь с ужасным фактом: вам будет отказано в доступе. По умолчанию X запрещает работу произвольных удаленных клиентов на локальном дисплее. Это является мерой безопасности, и, вероятно, вы захотите исправить эту ситуацию. Самый простой путь – это позволить клиентам, запущенным на вашей PS3, получать доступ к X-серверу. На локальной машине выполните команду xhost +<имя>, где <имя> – это имя хоста или IP-адрес вашей PS3. Я никогда не утруждал себя настройкой DNS для моей немаршрутизируемой системы, поэтому я использовал команду xhost +10.10.10.134. После того, как вы сделаете это, вы сможете выполнять на PS3 команды X, а результаты выполнения будут отображаться на экране вашего Mac; при этом память PS3 не будет существенно загружена, как это было бы в случае запуска X-сервера непосредственно на самой приставке.

Перенаправление запросов X11

Теперь рассмотрим этот способ. Команда ssh (вы ведь не удалили процесс sshd, верно?) может перенаправлять запросы X11. Когда вы запускаете команду ssh с опцией -X для доступа к X-серверу, эта опция указывает на необходимость перенаправления запросов X. На самом деле, использование опции -Y может оказаться более предпочтительным, поскольку эта опция обеспечивает "доверенное" перенаправление, которое обходит большее количество проверок безопасности (возможно, вы будете использовать именно эту опцию, поскольку иначе существует вероятность, что вы не сможете, скажем, открывать окна). Кроме того, вы могли бы присмотреться к опции -C, включающей сжатие данных, в том числе и пакетов X11. Использование этой опции может оказаться полезным в медленных сетях, но не таким полезным в быстрых. Попробуйте оба варианта, чтобы посмотреть и сравнить, какой окажется лучше в вашем случае. Синтаксис команды перенаправления запросов немного проще: просто наберите ssh -X <ps3> на PS3 и начните выполнять команды, которые используют X. При использовании этого способа память PS3 не перегружена серверными компонентами – запущены только клиентские процессы. Настало время запустить konqueror, не так ли? Но для konqueror требуется примерно 20 МБ памяти, плюс 7,5 МБ для kded, 5,8 МБ для klauncher, 5 МБ для kio_file, 4,7 МБ для kdeinit…

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

Попытаемся разгрузить сервер

Удаленный доступ может не обеспечивать достаточной скорости работы, или же у вас может не оказаться под рукой подходящего X-сервера. Поэтому существует другой способ: запускать сервер локально, но без KDE или Gnome. Вероятно, для этого вам придется отказаться от использования менеджера дисплея X и окна входа уровня runlevel5, а вместо этого самостоятельно запускать X из консоли. Классический способ сделать это – запустить программу xinit, которая выполняет все команды файла .xinitrc, расположенного в вашем домашнем каталоге. Обратите внимание, что эти команды выполняются последовательно; если вы хотите, чтобы несколько команд выполнялись одновременно, то все из них, кроме последней, должны запускаться в фоновом режиме (для этого в конце строки поставьте знак "&"). Ниже приведен пример файла .xinitrc, который может оказаться для вас полезным:

Листинг 1. X-сервер – простой, то что нужно

                
xterm &
exec twm

X заканчивает свою работу, когда завершается программа, запущенная в качестве сеанса сервера ("session"); в нашем случае этой программой является twm, выполняющаяся в последнюю очередь в соответствии с конфигурацией файла .xinitrc. Некоторые пользователи, наоборот, предпочитают использовать xterm в качестве сеансовой программы, а оконный менеджер запускать в фоновом режиме. Вы можете поступить на свое усмотрение.

Если вы воспользуетесь вышеприведенным файлом .xinit, то при запуске программы xinit, скорее всего, вы увидите серый фон и указатель мыши с некоей дополнительной, хм, штуковиной с девятью панелями. Это и есть xterm, который ждет, пока вы решите, куда его поместить. Основная особенность оконного менеджера twm заключается в его крошечном размере; он не делает за вас многого и в основном рассчитан на то, что вы сами знаете, чего вы хотите. Но зато он занимает в памяти всего около 2 МБ, что значительно меньше по сравнению, например, с Gnome или KDE. В моей системе xterm занял больше памяти, чем twm, хотя, конечно, основной объем выделялся под X-сервер. В итоге объем виртуальной памяти составил 62 МБ, а резидентная часть реально используемой памяти – 34 МБ. Это довольно много. Что же еще мы можем сделать?

На самом деле, не очень много. Самая очевидная задача, которую нужно выполнить – это отключить модули. Если вам приходилось делать это раньше, вы, несомненно, знакомы с этим процессом. Перейдите в папку /etc/X11, откройте для редактирования файл xorg.conf (для этого вам потребуются привилегии пользователя root) и закомментируйте ненужные вам модули.… Вот только незадача – в файле xorg.conf нет никаких модулей. В современных серверах X.org по умолчанию загружается все подряд, а затем выясняется, что же из этого работает. Однако это можно легко исправить: если вы создадите раздел модулей (Section "Module"), будут загружены только те из них, которые вы укажете в этом разделе. В системе с неработающей графической аппаратной частью различные опции, относящиеся к GL, довольно бесполезны. Вот что в итоге осталось у меня:

Листинг 2. Меньше модулей

                Section "Module"
Load "extmod"
Load "type1"
Load "freetype"
EndSection

Однако в действительности это мало что меняет. Вместо 34 МБ мой X-сервер стал занимать в памяти, обождите-ка… 33 МБ. На самом деле проблема, конечно же, заключается в том, что огромный объем используемой памяти составляет буферная память, которая записывается в устройство видеобуфера: 1280×768 пикселей или около того, причем видеобуфер работает только в 32-разрядном режиме. Уменьшение размера видеобуфера в действительности может немного помочь — разумеется, ценой значительного уменьшения видимой области вашего дисплея. Например, переключившись в не полноэкранный режим 480p (что значительно меньше, чем 480 пикселей по вертикали), я обнаружил, что X использует только около 10 МБ физической памяти. Даже не полноэкранный режим 720p использует меньше памяти (25 МБ) по сравнению с режимом WXGA. Если в вашей системе почти не остается свободной памяти, небольшое уменьшение масштаба может пойти на пользу. Просто стыдно, что PS3 не поддерживает более широкий диапазон видеорежимов.

Другие способы освободить память

Есть кое-что еще, что поможет вам освободить немного памяти. Если вы не пользуетесь несколькими консолями входа в систему на вашей PS3, вы можете отключить ненужные. В отличие от других возможностей, связанных с использованием уровней запуска, эта функция управляется непосредственно из файла /etc/inittab. В стандартной конфигурации Fedora по умолчанию включены шесть консолей, хотя я считаю более полезной команду screen. В листинге 3 показано, как можно отключить пять из шести консолей, отредактировав файл /etc/inittab.

Листинг 3. Спасибо, одной консоли вполне достаточно

                
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:off:/sbin/mingetty tty2
3:2345:off:/sbin/mingetty tty3
4:2345:off:/sbin/mingetty tty4
5:2345:off:/sbin/mingetty tty5
6:2345:off:/sbin/mingetty tty6

Файлы уровней запуска считываются при переключении на новый уровень. А что насчет изменений в файле inittab? Чтобы все изменения в файле inittab вступили в силу, запустите команду /sbin/init q. Здесь аргумент q не соответствует никакому уровню запуска, а указывает команде init перезагрузить конфигурационные файлы (я полагаю, что буква q означает "query" – т. е. "запрос", хотя это нигде не документировано).

Размер командной оболочки

Хотя командная оболочка bash имеет много преимуществ — обширный набор функций, о которых не расскажешь вкратце, широкая совместимость, несколько режимов работы с различными стандартами и многое другое, для ее работы требуется достаточный объем памяти.

Альтернативной оболочкой, особенно полезной для запуска скриптов (хотя и не идеальной в плане интерактивности), является dash – прямой потомок оболочки ash Кеннета Альмквиста (Almquist's shell), разработанный группой поддержки Debian с целью получить в распоряжение небольшую и быструю среду для выполнения скриптов. Оболочка dash не обладает таким широким функционалом, как bash, но обеспечивает быстрое выполнение почти любых shell-скриптов, занимая при этом небольшой объем памяти.

К тому моменту, как я получал в моей тестовой системе первое приглашение командной строки, bash занимал в памяти 1,7 МБ, в то время как dash занимал около 560 КБ. Это обстоятельство может оказаться особенно полезным, если у вас есть возможность подготовить скрипты или make-файлы для их выполнения в среде dash и, таким образом, отказаться от использования bash. К сожалению, при запуске некоторых программ могут возникать проблемы совместимости, если ссылка /bin/sh в действительности не указывает на интерпретатор bash. Тем не менее, если вам необходим дополнительный объем свободной памяти, вы вполне можете поискать его здесь.

Если вам не нужно запускать по расписанию фоновые процессы, вы можете остановить службы anacron и crond; если вы можете самостоятельно задать статическую конфигурацию сетевых параметров, вы можете остановить службу dhclient. Особенно многообещающим способом освободить память может стать замена командной оболочки bash на оболочку dash (обратитесь к разделу Размер командной оболочки). Ну вот, пожалуй, и все. В этом месте мы практически достигли предела, и единственный способ освободить память еще больше – это изменить аппаратную структуру видеобуфера или гипервизора PS3, что вряд ли возможно на практике.

С другой стороны, изначально имея систему, которая начинала выгружать данные на диск еще до того, как вы могли получить доступ к командной строке, в итоге мы получили систему с более чем 100 МБ свободной памяти, несколькими командными оболочками и запущенными процессами top и sshd. Это уже большой подвиг. Хотя на это легко смотреть с высоты владельцев систем с двумя или более гигабайтами памяти, факт заключается в том, что разработка огромной части программного обеспечения становится реально осуществимой на платформе, имеющей 100 МБ свободной памяти. Этого объема вполне достаточно для того, чтобы многие программные модули полностью оставались в памяти, что, за исключением крайних случаев, позволяет практически полностью избежать использования файлов подкачки, тем самым экономя вам кучу времени.

Заключение

В этой серии из трех статей мы рассмотрели приемы, с помощью которых вы можете превратить PS3 в жизнеспособную и даже, в некотором роде, просторную среду разработки приложений (одну из самых доступных для тех, кто хочет начать знакомство с Cell Broadband Engine). Вы можете продолжать работать в системе даже во время процесса компиляции приложений, причем выполняется этот процесс значительно быстрее, чем в обычных системах. Хотя объем доступной памяти не позволяет использовать PS3 в качестве настольной системы, в которой можно было бы одновременно запускать видеопроигрыватель, Web-браузер и почтовый клиент, этого объема вполне хватает для задач разработки приложений. А отказавшись от использования GNOME и KDE, вы даже сможете выполнять некоторые задачи с использованием графики. Вполне возможно, что следующие обновления прошивки PS3, а также новые версии ядра или драйверов изменят ситуацию в лучшую сторону, а пока просто сосредотачивайтесь на том, что вам необходимо получить от системы, и отключайте неиспользуемые функции.

 

Оставьте комментарий