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

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

Пакет миграции
Migration Kit из ОС Solaris на Linux включает в себя различные
интерактивные утилиты, помогающие при портировании, а также некоторый
объем документации (например, Руководство по переносу приложений из ОС Solaris в Linux и книгу серии IBM Redbook® Миграция из Solaris в Linux: руководство для системных администраторов).

Ресурсы приведены ссылки на эту книгу и другие полезные материалы.)

Начав
модифицировать приложение, постарайтесь не менять слишком много на
каждом этапе. Сначала меняйте среду разработки, а потом — сам исходный
код. Убедитесь, что на вашей текущей платформе доступны инструменты
разработки для Linux (самые главные — компиляторы GCC и GNU make).
Информацию о них можно отыскать через любую поисковую систему, однако
проще всего — обратиться к Web-страницам GNU и GCC.

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

  • Провести исчерпывающее тестирование.
  • Найти и исправить дефекты.

Для выполнения этих этапов в Linux доступны различные инструменты. Также имеются средства оптимизации производительности.

Ресурсы).

Ресурсы).

  • -msmall-exec и
    -mno-small-exec: Использовать или нет оптимизируемую инструкцию безусловного перехода, если исполняемый файл укладывается в 64 КБ.
  • Некоторые опции для управления и оптимизации работы стека:

    • -mwarn-framesize=framesize и
      -mwarn-dynamicstack: Опции выводят предупреждения на этапе компиляции, если какая-либо функция захватит больший, чем framesize,
      стековый фрейм или задействует динамически выделяемые стековые фреймы
      соответственно. Эти опции полезны в случаях, когда размер стека
      ограничен (как в ядре Linux), а также для программ, страдающих
      переполнением стека.

    • -mstack-guard=stack-guard и
      -mstack-size=stack-size:
      Еще пара опций, помогающих выявлять проблемы с размером стека путем
      включения в исполняемый файл специального проверяющего кода.

    • -mpacked-stack и -mno-packed-stack:
      Опции контролируют, будет ли задействован механизм, при котором
      содержимое регистров хранится в стековом фрейме в упакованном виде для
      экономии места. Уточните в справочнике GCC совместимость с другими
      опциями, а также совместимость (при вызове функций) с кодом, полученным
      компилятором GCC версии до 3.0.

    • -mbackchain и -mno-backchain:
      Опции контролируют, нужно ли хранить в стековом фрейме вызываемой
      функции указатель на стековый фрейм вызывающей функции. Этот указатель
      называется указателем обратного списка (backchain pointer). За
      подробной информацией о совместимости с другими опциями и особенностях
      отладки обратитесь к справочнику GCC.

    В
    отличие от других ОС, совместно используемые библиотеки System z могут
    существенно различаться в зависимости от того, какая опция была
    применена: -fpic или -fPIC. Обе опции
    приводят к генерации позиционно-независимого кода, что необходимо для
    создания совместно используемых реентерабельных библиотек. Если указать
    опцию -fpic, компоновщик создаст глобальную таблицу смещений маленького размера, поэтому для библиотек большого размера применяют -fPIC.

    Если
    компоновщик выдает сообщение об ошибке «relocation overflow»
    («переполнение при модификации адресов»), проверьте, не была ли сборка
    сделана с опцией -fpic. Если это так, замените ее на -fPIC,
    и проблема должна исчезнуть. Обратите внимание, что нельзя смешивать
    использование обеих опций при компиляции одного и того же приложения. В
    разделе Ресурсы есть ссылки на эту тему.

    Реализация операций с плавающей запятой контролируется опциями -mfused-madd, -mno-fused-madd, -mhard-float и -msoft-float. Полное описание архитектуры и набора команд System z можно найти в руководствах Архитектура z и Принципы работы платформы ESA/390. Также имеется техническая документация (см. раздел Ресурсы), где детально описаны внутренние механизмы GCC, лежащие в основе генерации кода для System z:

    • «Компилятор 64-разрядного языка PL8 от GNU: на пути к разработке микропрограмм в открытой среде».
    • «Портирование GCC на платформу IBM S/390».
    • «Вклад в развитие компиляторов GNU».

    Отладка

    В
    Linux доступно множество средств отладки. Одно из наиболее
    функциональных — отладчик GDB (GNU debugger, отладчик GNU). Существует
    также графическая оболочка для GDB под названием Data Display Debugger,
    которая может, например, представлять в наглядном виде связные списки.

    Полезны
    программы для анализа ошибок при работе с памятью. Так, для многих
    платформ имеется утилита Electric Fence, способная выявлять нарушения
    при работе с динамической памятью.

    Еще один мощный
    инструмент — VALGRIND. Способность отлаживать программу даже при
    отсутствии отладочной информации и исходных кодов делает его поистине
    незаменимым. Это достигается специальным методом динамической инспекции
    кода.

    Можно также использовать опцию MUDFLAP,
    которая заставляет GCC вставлять в исполняемую программу проверочный
    код, отслеживающий все важные операции с памятью. Диагностика MUDFLAP весьма информативна, так как проверочный код снабжается информацией об исходном коде.

    При запуске Linux внутри виртуальной машины мэйнфрейма имеется мощная команда TRACE, предоставляющая удобные средства для отладки Linux-системы целиком.

    Основы отладки изложены в книге Linux на мэйнфрейме, где можно найти подробные сведения об отладке в Linux, взятые из файла /usr/src/linux/Documentation/s390/debugging390.txt.

    При
    отладке таких серьезных вещей как использование регистров или
    организация стекового фрейма вам помогут материалы и стандарты,
    изложенные в Приложении к двоичному интерфейсу ELF-программ. Кроме того, в руководстве Портирование GCC на платформу IBM S/390 приведены стандарты, характерные для компиляции под System z.

    Желаю вам успеха в портировании ваших Linux-проектов.

    Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34