оценки корректности оптимизации необходимо зафиксировать эталонную модель вычисления.
Чтобы ввести количественные оценки эффективности для последующей оптимизации, необходимо ввести внутренние переменные для оптимизации и задать соотношения, описывающие затраты на каждый переход из состояния су в состояние CTj и действия т-С(т, су, су'). Соответственно изменяется внутренняя спецификация:
СР= V _ С(т, су, СУ'),
теА, ctgv, o'ev
П(Р)=© v D[Np] v vD[Rp] v vD[Cp] v.
Полная модель приложения
Расширяя описание приложения, получим следующую формальную модель.
Определение. Программа описывается такими сущностями:
- программа без времени P( v, x , 0, A);
- набор сбоев F и соответствующая программа со сбоями с условием F(P,F)cP:
- счетчик часов now со свойствами времени (1);
- внутренние состояния, описывающие наличие ресурсов, таких как доступная память;
- функции расхода ресурсов Lj(x) и Щт), задающие границы потребления ресурсов для каждого действия из Р;
- ценовые функции С(т, су, су'), используемые для оптимизации;
- внутренние и внешние спецификации П(Р) иФ(Р).
Для подобного описания можно сформулировать свойства в терминах временных выражений Ф и доказать их: Ф(Р)—нр, в том числе и для набора спецификаций Pt, ..., Pn, оценить корректность оптимизации с помощью эталонной модели Pe и вычислить результат оптимизации с помощью ценовой функции.
В данной работе была представлена формальная модель процесса вычислений, позволяющая описывать и доказывать свойства распределенных, устойчивых к сбоям вычислений. Эта модель может стать основой для применения формальных методов в среде контролируемого выполнения и обеспечить разработку и выполнение встраиваемых приложений [5].
Литература
1. Liu Z., Joseph M. Real-Time and Fault-Tolerant Systems. Specification, verification, refinement and scheduling, UUNU/IIST, 2005.
2. Pnueli A. The temporal logic of programs // 18th Annual Symposium on Foundations of Computer Science, 1977.
3. Lamport L. The temporal logic of actions // ACM Transactions on Programming Languages and Systems, 1994. Vol. 16 (3).
4. Manna Z., Pnueli A. The Temporal Logic of Reactive and Concurrent Systems: Specification, Springer-Verlag, 1991.
5. Организация отладочного комплекса для целевых систем со сложной архитектурой / Н.И. Вьюкова [и др.] // Информационная безопасность. Микропроцессоры. Отладка сложных систем; под ред. В.Б. Бетелина. М.: НИИСИ РАН, 2004.
УДК 004.416.2
ПРОГРАММИРОВАНИЕ, ОРИЕНТИРОВАННОЕ НА МОНИТОРИНГ, В КОНТЕКСТЕ КОНТРОЛИРУЕМОГО ВЫПОЛНЕНИЯ
В.А. Галатенко, д.ф.-м.н..; К.А. Костюхин, к..ф.-м.н.; Н.В. Шмырев, к.ф.-м..н.
(НИИСИРАН, г. Москва, [email protected], [email protected], [email protected])
Формальные методы верификации программ, основанные на статической проверке соответствия модели, доказательстве теорем, статическом анализе, не позволяют в полной мере решать задачи, связанные с контролем количественных характеристик выполнения приложений. В статье предлагается подход, включающий как статический анализ программного кода на соответствие модели, так и динамическую верификацию программы в ходе ее выполнения.
Ключевые слова: контролируемое выполнение, мониторинг, распределенные системы.
Под контролируемым выполнением [1] понимается такая организация функционирования аппаратно-программного комплекса, при которой осуществляются сбор и анализ информации о процессе функционирования и выполняются управляющие воздействия на этот комплекс.
Контролируемое выполнение направлено на реализацию комплексом его миссии, несмотря на наличие ошибок и вредоносных воздействий.
Понятие контролируемого выполнения включает следующие основные положения:
интеграция средств информационной безопасности, отладки, управления;
- наличие целостного набора средств контролируемого выполнения, возможность взаимодействия между ними;
охват всех этапов жизненного цикла аппаратно-программных комплексов, включая этап эксплуатации.
В [1] представлена среда контролируемого выполнения (система отладки/мониторинга -СОМ), которая поддерживает возможности инте-
рактивной отладки, мониторинга систем, самоконтроля систем, детерминированного воспроизведения в рамках многопроцессорной конфигурации, применения средств управления информационными системами.
Эти возможности позволяют пользователям и разработчикам аппаратно-программных комплексов получать разнообразную информацию о работе приложений и при необходимости выполнять отладочные и управляющие действия. Однако поведение такого рода комплексов описывается множеством сложных взаимозависимых характеристик, поэтому оценка качества функционирования комплекса в целом может быть непростой задачей даже при наличии детальной информации о различных аспектах его выполнения.
В данной работе показано развитие концепции контролируемого выполнения, основанное на использовании парадигмы программирования, ориентированного на мониторинг (monitor-oriented programming, MOP [2]).
Контролируемое выполнение,
основанное на моделировании и верификации
Формальные методы верификации программ, основанные на статической проверке соответствия модели, доказательстве теорем, статическом анализе, в силу определенных ограничений [2] не позволяют в полной мере решить задачи, связанные с контролем количественных характеристик выполнения приложений. Авторы предлагают подход, включающий как статический анализ программного кода на соответствие модели, так и динамическую верификацию программы в ходе ее выполнения. В качестве средства описания модели выбран язык C ACSL (ANSI/ISO C SPECIFICATION LANGUAGE [3]), который позволяет описывать поведение программ на языке C в виде аннотаций. Инструмент Why [4] вместе со средствами для доказательства утверждений используется для проверки свойств в статическом режиме. Свойства, задающие количественные характеристики выполнения приложения, описываются с использованием средств профилирования инструментального комплекса СОМ и проверяются динамически в ходе выполнения программы.
Механизм динамической верификации основан на парадигме MOP. В данной работе механизмы наблюдения и верификации MOP рассматриваются как компоненты среды контролируемого выполнения. Механизм наблюдения включает средства мониторинга и реализованные в рамках данной работы средства профилирования, позволяющие отслеживать использование приложением целевых ресурсов. Механизм верификации реализован как сопоставление результатов наблюдения с моделью на основе средств самоконтроля.
Сбор и анализ информации средствами контролируемого выполнения
Контролируемое выполнение подразумевает наличие средств, осуществляющих постоянный сбор информации о ходе работы целевой системы. К их числу относятся средства самоконтроля программ, мониторинга и измерения количественных характеристик (профилирование). Для верификации свойств целевой системы могут использоваться данные, собранные при помощи любых из указанных средств.
Библиотека средств самоконтроля (БСС). Реализована в виде набора функций и макровызовов, которые вставляются в исходный текст программы. Разработчик, исходя из логики поведения программы, может встроить в ее код вызовы БСС для выявления признаков некорректного поведения программы. Для таких ситуаций он может предусмотреть вызов отладочных средств, выдачу диагностики или, возможно, корректирующие действия для исправления выявленных отклонений от эталонного правильного поведения.
Средства самоконтроля обеспечивают минимальное вмешательство в работу целевой системы, поэтому они широко применяются в приложениях, где важно время выполнения отдельных участков, например обработчиков прерываний, остановка в которых может сделать дальнейшее функционирование бессмысленным. В отличие от средств мониторинга средства самоконтроля не требуют внешних программ для взаимодействия с пользователем.
В настоящее время реализован контроль следующих аспектов поведения программ:
- изменение хода выполнения программы в результате некорректных значений внутренних переменных программы и входных параметров вызываемых функций;
- невозможность завершить выполнение фрагмента кода в установленное время (особенно актуально для контроля приложений в системах реального времени);
- сбой в работе программы/системы в результате некорректной работы с динамически выделяемой памятью.
Вызовы БСС разделяются на три основные категории: сенсоры, актуаторы и средства протоколирования. Сенсором называется пассивный датчик, фиксирующий изменения в системе на внутреннем уровне. Под актуатором будем понимать активный датчик, имеющий средства реагирования на происходящие изменения. Средства протоколирования доводят до конечного пользователя информацию о состоянии системы и происходящих в ней изменениях.
Рассмотрим основные группы вызовов БСС.
Актуаторы. Запуск актуаторов осуществляется при помощи вызова UEL_ACTUATOR. Исполь-
зование актуаторов позволяет проверить значение некоторого выражения и в зависимости от результата выполнить определенные отладочные действия. Если значение выражения ложно, вызывается стандартный обработчик или обработчик, заданный пользователем. Стандартный обработчик выполняет следующие действия:
- помещает в протокол сообщение вида
ASSERT (выражение):
[имя исходного файла'.номер строки];
- генерирует событие типа INVALID STATE, которое может быть отображено средствами мониторинга инструментального комплекса;
- останавливает выполнение потока/процесса, что позволяет осуществить над ним действия интерактивной отладки. Поскольку исключительной ситуации при этом не возникает, возможно продолжение выполнения потока в пошаговом или обычном режиме.
Сенсоры. Данная группа делится на следующие типы.
• Будильник. Сенсоры этого типа позволяют проверить, укладывается ли некоторая последовательность вычислений в заданный временной интервал. Сенсор UELSENSORGUARD (START) устанавливает интервал времени в секундах. Если за это время управление не достигает вызова UELSENSORGUARD (STOP), в протокол помещается соответствующее сообщение и генерируется событие, отображаемое средствами мониторинга.
• Профилирование. Сенсоры этого типа отмечают начало (UELSENSORPROFILER (START)) и конец (UELSENSORPROFILER (STOP)) профилируемого участка кода. Время выполнения участка (вместе с текстовым описателем) выводится в протокол.
• Контроль использования динамически распределяемой памяти. Функции запроса и освобождения памяти UELcalloc, UELmalloc, UELrealloc и UEL_free аналогичны стандартным, но регистрируют проходящие через них объекты, сохраняя их адреса, размеры и позицию исходного кода, где они были вызваны. Они также порождают событие INVALID STATE и выдают в протокол сообщения в случае некорректных ситуаций, например, если функции UEL_free или UEL_realloc передан указатель на свободную память.
Сенсор UELSENSORCHECKMEMORYINTEG-RITY позволяет запомнить текущее состояние памяти, а позже вывести в протокол отчет об изменениях с момента последнего сохранения.
• Динамическая проверка указателей. Сенсоры типа UEL_SENSOR_CHECK_MEMORY_ACCESS служат для проверки корректности указателей. Их можно использовать, например, для проверки аргументов функции в сочетании с актуатором.
Возвращаемые значения - UELERR (ошибка при проверке), UEL_BAD (некорректный указатель), UELGOOD (корректный указатель).
При помощи вызовов данной группы можно проверить, что указатель содержит адрес корректной для потока области памяти, содержащей программный код, из которой можно прочесть заданное число байтов, в которую можно записать заданное число байтов или в которой находится строка печатных символов заданной длины (или до символа конца строки).
Средства протоколирования. В любой точке программы можно вывести отчет о текущем состоянии динамически распределяемой памяти с помощью вызова UELLOGMEMORY.
Чтобы поместить интересующую пользователя информацию в протокол, надо воспользоваться вызовом UELLOGEXPRESSION.
Вызов UEL_LOG_DEBUG_ONLY служит для вычисления заданного выражения только при включенной отладке. Таким способом удобно задавать, например, отладочную печать.
Прочее. UELinit, UEL_fini - инициализация и терминирование БСС.
Такой набор функций БСС был выбран авторами на основе опыта, полученного при отладке распределенных приложений. Некоторые компоненты приложений работают под управлением системы реального времени. В частности, необходимо иметь средства контроля времени выполнения определенных фрагментов кода, причем как пассивные (сенсоры), так и активные (актуаторы), реагирующие на соответствующие данные сенсоров. Контроль изменения и доступа к памяти необходим, если отлаживается приложение, активно использующее память, то есть практически любое довольно большое приложение. Механизмы, предоставляющие различные вспомогательные средства (например, средства протоколирования), удобно использовать при управлении отладкой (их можно одновременно включить или выключить одним действием).
Система профилирования. В рамках инструментального комплекса СОМ создана система профилирования целевых систем, функционирующих в условиях дефицита ресурсов. Возможности данной системы включают в себя:
- поддержку единого способа хранения информации, получаемой из разных источников (система профилирования должна интегрироваться в инструментальный комплекс СОМ, работающий с разными источниками информации, такими как агенты мониторинга, профилирования и т.п.);
- сбор количественных характеристик, а именно:
• процессорное время для выполнения определенных фрагментов кода программы,
• память, используемая программой,
• аппаратные события (при их наличии), возникающие в ходе выполнения программы,
• сетевые интерфейсы, используемые программой;
использование аппаратных возможностей профилирования при условии наличия соответствующей поддержки;
- использование стандартных средств и механизмов для возможности последующей интеграции с существующими решениями.
В силу специфики рассматриваемого класса целевых систем понятие профилирования в данной работе используется в более широком смысле, чем сбор информации только об использовании процессорного времени. Под профилированием понимается сбор любых количественных характеристик выполнения приложения, связанных с расходованием ресурсов вычислительной среды, таких как память, полоса пропускания сети и др.
Результаты профилирования служат входными данными для средств верификации, осуществляющих сравнение фактического поведения приложения с эталонным. Помимо этого, они могут использоваться традиционным способом, то есть для построения профилей с целью оптимизации приложений, что особенно важно, если целевой аппаратно-программный комплекс содержит узлы, работающие в реальном масштабе времени в условиях дефицита ресурсов.
С этой точки зрения важно, чтобы результат работы средств профилирования был представлен в унифицированном формате, позволяющем использовать не только средства инструментального комплекса, осуществляющего контролируемое выполнение целевой системы, но и внешние инструменты обработки данных профилирования.
Необходимо также использовать стандартизованные (в том числе аппаратные) интерфейсы для получения информации о ходе выполнения программы, а именно: интерфейсы доступа к аппаратным счетчикам событий процессора, стандартные библиотеки компилятора и целевой ОС, обес-
печивающие поддержку построения профилей выполнения программы.
Применение стандартизованных подходов, существующих в различных предметных областях, является одной из важных характеристик среды контролируемого выполнения, поскольку это повышает переносимость ее инструментальных средств и позволяет наращивать функциональность за счет применения средств сторонних разработчиков.
На основании изложенного можно сделать следующие выводы. В представленной работе понятие контролируемого выполнения расширено за счет внедрения парадигмы программирования, ориентированного на мониторинг, введения средств динамического моделирования целевых аппаратно-программных комплексов, а также новых средств профилирования. Под профилированием в контексте данной работы понимаются сбор и анализ информации о различных количественных характеристиках выполнения комплексов, включая данные об использовании как процессорного времени, так и других целевых ресурсов.
Необходимость введения этих средств продиктована и сложностью рассматриваемых аппаратно-программных комплексов, и критичностью предъявляемых к ним требованиям по обеспечению должного качества обслуживания.
Литература
1. Костюхин К.А. Организация контролируемого выполнения для разнородных распределенных программно-аппаратных комплексов. М.: НИИСИ РАН, 2006.
2. Chen F., Rosu G. MOP: Reliable software development using abstract aspects: Tech. rep.: Dept. of Computer Science, University of Illinois, 2006.
3. Baudin P., Filliatre J.-C., Marche C. Et al. ASCL: ANSI/ISO C Specification Language, 2008.
4. Filliatre J.-C., Marche C. The why/krakatoa/caduceus platform for deductive program verification, OOPSLA, 2004.
УДК 51.7, 519.1, 519.2, 519.6
АНАЛИЗ ОТКАЗОУСТОЙЧИВОСТИ ПАРАЛЛЕЛЬНЫХ КОЛЬЦЕВЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ
(Работа выполнена при поддержке РФФИ, проект № 07-01-00101-а)
А.В. Коганов, к.ф.-м..н. (НИИСИРАН, г. Москва, [email protected]); А.Н. Сазонов (ООО «Дойчеббанк», г. Москва, [email protected])
Вводятся понятия модели кольцевой вычислительной системы (КлВС), представленной в виде ненаправленного кольцевого раскрашенного графа, а также набора одинаковых кольцевых моделей (НКлВС). В качестве модели задачи для НКлВС используется задача, граф которой полностью совпадает с графом КлВС. Исследуется возможность выполнения задачи на разрушенной КлВС, а также ее зависимость от количества цветов в графе и длины кольца. Методом имитационного моделирования исследуется зависимость наработки НКлВС от параметров графа КлВС и закона роста НКлВС.
Ключевые слова: вычислительные системы, наработка на отказ, дублирование.
Одной из классических схем организации вычислительных систем была кольцевая модель,
имеющая свои преимущества и недостатки. На современном этапе чаще используются модели типа