Главная » Статьи » Прочее | [ Добавить статью ] |
Консолидация серверов в среде Linux на платформе System z сулит множество преимуществ, однако даже бесплатный пингвин не позволит вам получить их даром. Перенос существующих Linux-приложений и серверов на платформу System z потребует особых знаний и некоторых усилий. Данная статья дает скорее общий обзор, нежели детальное руководство по портированию приложений. Для тех, кто хочет глубоко освоить тему, приведены ссылки на подробную информацию. Пакет миграции Migration Kit из ОС Solaris на Linux включает в себя различные интерактивные утилиты, помогающие при портировании, а также некоторый объем документации (например, Руководство по переносу приложений из ОС Solaris в Linux и книгу серии IBM Redbook® Миграция из Solaris в Linux: руководство для системных администраторов). Организация процесса портирования Прежде чем менять что-либо в своем проекте, рекомендуется ознакомиться с отличиями системы System z с Linux от вашей существующей программной и аппаратной платформы. Также полезно изучить темы, описанные в данной статье (порядок байтов, опции компилятора и т.д.). Помимо ссылок, приведенных в этой статье, существует еще много замечательных источников информации об отличиях других ОС и Linux. Книга Перенос Unix®-программ в Linux рассматривает основные идеи портирования приложений из коммерческих систем Unix, таких как AIX®, Solaris и HP-UX, в Linux. Также в ней детально описаны инструменты разработки Linux (в разделе Ресурсы приведены ссылки на эту книгу и другие полезные материалы.) Начав модифицировать приложение, постарайтесь не менять слишком много на каждом этапе. Сначала меняйте среду разработки, а потом -- сам исходный код. Убедитесь, что на вашей текущей платформе доступны инструменты разработки для Linux (самые главные -- компиляторы GCC и GNU make). Информацию о них можно отыскать через любую поисковую систему, однако проще всего -- обратиться к Web-страницам GNU и GCC. Далее попробуйте собрать приложение на существующей платформе с использованием инструментов Linux и проведите полный цикл тестов. Только после этого переносите исходный код в Linux и модифицируйте его по необходимости. Дальнейшие шаги стандартны, как и для любого другого процесса портирования:
Для выполнения этих этапов в Linux доступны различные инструменты. Также имеются средства оптимизации производительности. Linux на платформе IBM System z К счастью, подготовка Linux-приложения для исполнения на мэйнфрейме IBM System z затрагивает всего несколько ключевых моментов. Вспомним, что интерфейсы ядра Linux не зависят от конкретной платформы. Первое основное отличие заключается в виртуализации. В персональном компьютере вся система находится под контролем единственной ОС, запущенной в данное время. В отличие от ПК, машины IBM System z поддерживают механизм виртуализации, который предполагает запуск нескольких ОС в отдельных виртуальных средах, причем в одно и то же время могут работать несколько экземпляров одной и той же ОС (как правило так и происходит). Наличие виртуальных сред добавляет забот в части системного администрирования. Общая структура мэйнфрейма System z На мэйнфрейме IBM System z ОС Linux всегда запускается внутри виртуальной среды. Мэйнфрейм состоит из нескольких логических разделов. Каждый логический раздел (или LPAR, от англ. logical partitions) способен исполнять либо готовую ОС, например ядро Linux, либо несколько образов виртуальных машин (Virtual Machines, VM). Эта схема показана на рисунке 1. Любой образ VM также может содержать Linux, что добавляет еще один способ запуска этой ОС. Рисунок 1. Общая структура компьютера System z с несколькими логическими разделами и виртуальными машинами Такая структура имеет заметные преимущества -- начиная от возможности динамической балансировки нагрузки и планирования мощностей и заканчивая повышенной безопасностью и наличием высокоскоростной виртуальной сети между виртуальными машинами. Виртуальная сеть позволяет узлам отправлять и получать данные как будто по физической сети, причем в реальности данные передаются через память мэйнфрейма, что обеспечивает намного большую скорость. Но сам факт запуска Linux в виртуальной машине System z не является причиной портирования пользовательских приложений, поэтому мы не будем подробно на этом останавливаться. Для ознакомления с этой темой рекомендую обратиться к замечательной книге Linux на мэйнфрейме. Также много полезной и актуальной информации можно найти в серии книг IBM Redbooks, доступных в электронном виде (ссылки найдете в разделе Ресурсы). Платформа IBM System z имела в прошлом несколько названий. Она называлась System/390®, когда Linux был впервые портирован на нее, поэтому ее часто называют S/390® при упоминании вместе с Linux. Если некий исходный код должен зависеть от платформы, то используют следующие встроенные символы препроцессора:
Пожалуй, самое заметное различие заключается в адресном диапазоне. Современные системы System z имеют 64-разрядную адресацию, в то время как ранние модели -- 31-разрядную. Всякий раз, когда нужно подчеркнуть различие в адресации, 31-разрядную платформу принято называть s390, а 64-разрядную -- s390x. Каждый режим адресации имеет свои особенности, рассматриваемые в данной статье. Заметим, что 31-разрядный режим основывается на 32-разрядной архитектуре, в которой старший бит служит для обозначения самого режима. Повторюсь, что в 31-разрядном режиме 32-й бит не используется для адресации, поэтому любой адрес вида:
соответствует адресу:
Таким образом, код, который интерпретирует целые числа как указатели, требует особого внимания. Однако не забудьте, что приведение целых типов к указателям противоречит стандарту языка C. Также отметим, что абсолютные адреса почти всегда платформенно-зависимы. Это означает, что такой код также требует пересмотра. В то же время указатели, созданные "легальными" средствами С, не вызовут ошибок компиляции. Учитывая, что компилятор не обязан игнорировать старший бит, результат выражения ниже будет "ложь":
Схожая проблема возникает, если приложение пытается загрузить исполняемый код по абсолютному адресу путем вызова В Linux принято обозначать отдельные биты байта или слова степенью, в которую возводится двоичное основание. Например, биты 32-разрядного слова выглядят так:
Однако в руководствах по IBM System z применяется нумерация слева направо:
В этом примере самый младший бит, имеющий двоичный вес 2^0, называется 31-м битом. На 64-разрядной системе этот бит называется 63-м битом. Разрядности стандартных типов данных В таблице 1 показаны размеры стандартных типов данных C. Таблица 1. Размеры стандартных типов C в байтах
Выравнивание всегда равно размеру типа: переменная типа Таблица 2. Стандартные типы данных ядра Linux
Размещение данных подробно рассмотрено в приложении к интерфейсу двоичных ELF-программ (ELF Application Binary Interface Supplement).
Порядок байтов
определяет, в каком именно порядке располагаются в памяти отдельные
байты много-байтового слова. Существует несколько вариантов хранения
32-разрядного числа, имеющего значение
В системах Sun SPARC и IBM System z применяется порядок от старшего к младшему, а в процессорах семейства x86 -- от младшего к старшему. К несчастью, многие программы полагаются на физическое расположение данных в памяти, что вызывает несовместимость между платформами и крайне опасно, так как приводит к возникновению ошибок во время выполнения, а не на стадии компиляции. Это серьезная проблема. Перечислим потенциально опасные задачи, чувствительные к порядку байтов:
Пакет миграции Migration Kit из Solaris на Linux содержит утилиту проверки порядка байтов (Endianess Checking Tool), помогающую найти участки исходного кода, которые полагаются на порядок следования байтов. На вход утилите передается исходный код и соответствующий двоичный файл, собранный с определенными опциями компилятора. В руководстве по работе с утилитой приведена более подробная информация. Обычно нахождение проблемного участка выглядит так:
Утилита проверки порядка байтов не привязана к ОС Solaris. Она работает с любым C-кодом. Если
вам все же требуется явная поддержка разных порядков байтов, включите
заголовочный файл asm/byteorder.h ядра Linux, который даст один из двух
соответствующих макросов: Похожие функции существуют для управления порядком байтов для данных, передаваемых по сети. Эти функции определены в файле /usr/include/netinet/in.h и преобразовывают значения между порядком байтов сети и компьютера. Обычно в сетях применяется порядок от старшего к младшему, поэтому приложениям для System z такое преобразование не требуется. В любом случае, хорошим тоном программирования является использование нужных функций преобразования. По историческим причинам операционные системы мэйнфреймов, такие как z/OS® и z/VM®, применяют набор символов EBCDIC. Однако Linux для System z полностью основана на наборе ASCII, поэтому перенос Linux-приложений или данных на другие платформы не вызовет проблем. С другой стороны, взаимодействие Linux на System z с данными или программами под управлением ОС, основанной на EBCDIC, требует преобразования. Для
преобразования файла из одного набора символов в другой в Linux
существует утилита recode. Текущая версия утилиты распознает около 280
кодировок, включая 19 разновидностей EBCDIC с поддержкой национальных
символов. Для того чтобы сделать подобное преобразование, включите в
программу файл /usr/include/iconv.h и используйте функцию Списки переменного числа параметров Обычно для C-программы не важно, как именно реализованы списки переменного числа параметров. Однако может встретиться код, содержащий присвоение, которое непереносимо и не будет работать в Linux на System z. В Linux для System z тип
Вместо этого используйте макрос Библиотеки и системные вызовы, зависимые от платформы Все операционные системы предоставляют прикладным программам некоторый интерфейс, который реализуется посредством большого количества библиотек. Некоторых библиотек может не оказаться в Linux, либо они могут по-другому называться. Сведения о таких различиях можно найти, например, в руководстве Портирование из Unix в Linux. При переносе приложений из Solaris на Linux может пригодится интерактивная утилита проверки исходного кода (Source Checking Tool), имеющаяся в пакете миграции Migration Kit из ОС Solaris на Linux. Она распознает около 3800 различных системных вызовов Solaris, а также файлы, специфичные для Solaris, и директивы компилятора Sun. На рисунке 2 показано, как можно интерактивно выбрать C- и C++-файлы Solaris, подлежащие проверке. Рисунок 2. Интерактивный выбор файлов или целых каталогов Затем утилита находит вызовы, требующие замены, и подсвечивает их (рисунок 3). Рисунок 3. Утилита Source Checking Tool подсвечивает библиотечные вызовы, требующие вмешательства Linux-варианты вызовов и сопутствующая техническая информация доступны интерактивно, либо могут быть вставлены как комментарии, чтобы разработчики могли ими воспользоваться уже без запуска утилиты (рисунок 4). Рис 4. Утилита предлагает заменить специфичные для Solaris вызовы на Linux-аналоги и предоставляет техническую справку К счастью, все же существуют некоторые стандарты и соглашения. Так, в процессе разработки утилиты Source Checking Tool было подсчитано, что 46% всех вызовов идентичны. Один из примеров -- математические функции из math.h, которые не имеют различий. Компиляция, компоновка и отладка Портирование приложения подразумевает использование стандартного для Linux компилятора GCC и связанных с ним утилит. Все эти инструменты так или иначе имеют поддержку System z. Чтобы задействовать все улучшения в области производительности платформы, введенные с 1999 по 2005 год, рекомендуется включить опции оптимизации, характерные для System z и для конкретной модели процессора (рисунок 5). Рисунок 5. Выигрыш в производительности при включении специальных опций оптимизации На рисунке 5 все результаты нормализованы и соответствуют новейшим моделям System z, выпущенным в каждом году. При снятии показателей для каждой модели System z измерения проводились несколько раз. В статье Вклад в развитие компиляторов GCC, опубликованной в IBM Systems Journal, рассказано подробно о проведении упомянутых измерений. GCC и утилиты binutils имеют ряд опций для платформы System z с Linux. Подробное описание всех опций GCC вы найдете в руководстве Использование компиляторов GNU (GCC). Там же есть раздел, посвященный специфичным для System z опциям, поэтому мы дадим только краткий обзор. Очень может быть, что с выпуском новых моделей System z появятся дополнительные опции GCC, а также может быть доработана поддержка существующих моделей. Опции платформы System z показаны ниже:
Некоторые опции для управления и оптимизации работы стека:
В
отличие от других ОС, совместно используемые библиотеки System z могут
существенно различаться в зависимости от того, какая опция была
применена: Если
компоновщик выдает сообщение об ошибке "relocation overflow"
("переполнение при модификации адресов"), проверьте, не была ли сборка
сделана с опцией Реализация операций с плавающей запятой контролируется опциями
В Linux доступно множество средств отладки. Одно из наиболее функциональных -- отладчик GDB (GNU debugger, отладчик GNU). Существует также графическая оболочка для GDB под названием Data Display Debugger, которая может, например, представлять в наглядном виде связные списки. Полезны программы для анализа ошибок при работе с памятью. Так, для многих платформ имеется утилита Electric Fence, способная выявлять нарушения при работе с динамической памятью. Еще один мощный инструмент -- VALGRIND. Способность отлаживать программу даже при отсутствии отладочной информации и исходных кодов делает его поистине незаменимым. Это достигается специальным методом динамической инспекции кода. Можно также использовать опцию При запуске Linux внутри виртуальной машины мэйнфрейма имеется мощная команда Основы отладки изложены в книге Linux на мэйнфрейме, где можно найти подробные сведения об отладке в Linux, взятые из файла /usr/src/linux/Documentation/s390/debugging390.txt. При отладке таких серьезных вещей как использование регистров или организация стекового фрейма вам помогут материалы и стандарты, изложенные в Приложении к двоичному интерфейсу ELF-программ. Кроме того, в руководстве Портирование GCC на платформу IBM S/390 приведены стандарты, характерные для компиляции под System z. Желаю вам успеха в портировании ваших Linux-проектов. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Просмотров: 1063 | |
Всего комментариев: 0 | |
Операционные Системы
[61]
ОС Open Source
|
Мобильный Linux [26] |
Сравнение ОС [7] |
Статьи о Linux [16] |
Свободное ПО [10] |
Програмирование [6] |
Не для нубов [5] |
Ядро [13] |
Хранилище данных [9] |
Устройства [1] |
Установка/конфигурирование/планиров [16] |
Файловые системы [3] |
Управление, основанное на политиках [1] |
Управление инфраструктурой [0] |
Серверы [5] |
Биографии [6] |
Прочее [25] |