rtsDDr (1158447), страница 3
Текст из файла (страница 3)
| MesPtr | | указатель на передаваемое сообщение или указатель области памяти, в которую необходимо принять сообщение. |
| Count | | число элементов, содержащихся в сообщении. |
| Size | | длина в байтах одного элемента сообщения. |
| SenderProcNum | | внутренний номер посылающего процессора. |
| *PSRefPtr | | ссылка на процессорную систему, процессорам которой осуществляется передача. |
Функция осуществляет передачу, если внутренний номер текущего процессора равен SenderProcNum, и приём в противном случае.
Все процессоры системы, заданной параметром PSRefPtr, должны принадлежать текущей процессорной системе. Равное NULL значение указателя PSRefPtr или нулевое значение ссылки *PSRefPtr задают текущую процессорную систему.
Процессор с номером SenderProcNum не обязан входить в состав процессорной системы, заданной ссылкой *PSRefPtr, но должен принадлежать текущей процессорной системе.
6Синхронизация программ, выполняющихся на разных процессорах
long bsynch_(void);
Выполнение функции заключается в том, что центральный процессор (см.п.4) принимает синхросообщения от всех остальных процессоров, а затем рассылает им синхросообщения-ответы. Любой другой процессор передает синхросообщение центральному процессору, после чего принимает от него синхросообщение-ответ. Синхросообщение это слово (integer), содержимое которого несущественно.
Функция возвращает нулевое значение.
long tsynch_(void);
Функция tsynch_, как и функция bsynch_, выполняет барьерную синхронизацию процессоров текущей процессорной системы, но дополнительно производит выравнивание времен процессоров. Под выравниванием времен понимаются такие действия системы поддержки, в результате которых функция dvm_time (см.п.3) в один и тот же момент астрономического времени будет возвращать на всех процессорах одно и то же время время, возвращаемое функцией dvm_time на центральном процессоре задачи до выполнения функции tsynch_ .
Выравнивание времен осуществляется следующим образом. Пусть центральный процессор в момент времени t1 (по своему датчику времени) посылает сообщение процессору P, находящемуся в состоянии приёма этого сообщения. Процессор P, получив сообщение от центрального, посылает ему время приёма этого сообщения T (по своему датчику времени). Центральный процессор, отослав сообщение процессору P, переходит к приёму от него сообщения со временем T и принимает его в момент времени t2 по своему датчику времени. После этого центральный процессор отсылает процессору P время (t1+t2)/2 T , которое при выполнении им функции dvm_time всегда будет добавляться к показанию его датчика времени.
Такая операция осуществляется центральным процессором со всеми остальными процессорами. Чтобы избежать случайных помех, операция выравнивания времен повторяется несколько раз, и для каждого процессора в качестве результата принимается та величина (t1+t2)/2 T, для которой время передачи сообщения, равное (t1-t2)/2, минимально.
Функция возвращает нулевое значение.
7Трассировка программы пользователя и системы поддержки
7.1Общие сведения о накоплении информации трассировки
Будем называть внутренним событием (или просто событием) выполнение определённой точки или участка пользовательской программы или системы поддержки при определённых условиях. Системная трассировка является накоплением информации о происходящих событиях в их временной последовательности.
Событиями являются обращения ко всем функциям системы поддержки, доступным программе пользователя. Кроме того, прохождение некоторых внутренних участков системы поддержки и обращения к части ее внутренних функций также являются событиями. Примером трассируемых внутренних функций могут служить функции доступа к коммуникационным библиотекам. Трассируемое обращение к функции влечет трассировку и возврата из неё.
Полный список событий трассировки содержится в файле events.def исходных текстов системы поддержки, в котором имени каждого события сопоставлен его номер. Событие обращения к функции имеет имя call_<имя функции>, а событие возврата из неё имя ret_<имя функции>.
Трассировка каждого события может быть включена и выключена по его номеру.
Накапливаемая при трассировке информация содержит также все информационные сообщения системы поддержки и все сообщения об обнаруженных ею ошибках (см. п.8).
Накопление трассировочной информации система поддержки осуществляет с помощью функций, рассмотренных в п.7.3. Информация, выводимая этими функциями в текстовом виде, может поступать в три независимо включаемых (открываемых) и выключаемых (закрываемых) потока трассировки:
-
поток информационных сообщений системы поддержки (трассировка на "видеомонитор", стандартно это поток stdout);
-
буфер оперативной памяти;
-
файл.
Трассировка в поток информационных сообщений осуществляется согласно общим правилам управления выводом информационных сообщений (см.п.8). Информация, поступающая в этот поток, не содержит информационных сообщений и сообщений об ошибках системы поддержки.
При трассировке в буфер оперативной памяти информация накапливается в буфере каждого процессора до завершения выполнения программы, а затем выгружается в файл (свой для каждого процессора). Инициализация буферов трассировки производится при инициализации системы поддержки.
Трассировка в буфер предусматривает два варианта. В первом исчерпание размера буфера влечет останов трассировки (вариант сохранения начала трассировки). Второй вариант обеспечивает сохранение последней информации за счет уничтожения наиболее старой (вариант трассировки "по кольцу").
Трассировка в файл осуществляется выводом информации непосредственно в свой для каждого процессора файл по мере ее поступления. Файлы для непосредственного вывода трассировки открываются при инициализации системы поддержки и закрываются при завершении выполнения программы.
Все файлы с накопленной трассировкой система поддержки помещает в одну директорию (как при трассировке в буфер, так и при трассировке непосредственно в файлы). Имя этой директории, а также расширения файлов для каждого потока задаются в файле параметров systrace.* (см. п.7.2.2). Имена файлов с трассировкой имет вид <внутренний номер процессора>_<внешний номер процессора>.
Состав накапливаемой при трассировке информации определяется режимом трассировки. При кратком режиме выводится:
-
имя события;
-
время, прошедшее с предыдущего события;
-
имя файла пользовательской программы и номер строки в нём, определяющие точку произошедшего события в программе.
При подробном режиме трассировки сохраняемая информация расширяется и зависит от типа события. Если событием является обращение к функции, то выводятся ее входные параметры. При возврате из функции выводятся ее выходные параметры. Для каждого события может быть задан подробный режим трассировки вне зависимости от общего режима.
ЗАМЕЧАНИЕ. Системная трассировка функционирует только при ненулевом значении параметра Is_DVM_TRACE, содержащегося в файлах systrace.* (см. п. 7.2.1). Часть функций, тем не менее, при этом не трассируется. К таким функциям относятся функции, требующие высокой эффективности выполнения из-за предполагаемой большой частоты обращений к ним (например, функция tstelm_ проверки принадлежности заданного элемента распределённого массива его локальной части). Включение трассировки такого рода функций осуществляется заданием ненулевого значения параметра Is_ALL_TRACE (файлы systrace.*). Кроме того, для трассировки функций обращения к DVM-отладчику необходимо задание ненулевого значения параметра Is_DEB_TRACE, а для трассировки функций обращения к подсистеме сбора инфомации для анализа производительности – ненулевого значения параметра Is_STAT_TRACE (см. п. 7.2.1).
7.2Управление накоплением трассировки с помощью файлов параметров
Управление режимами трассировки и составом трассируемых событий осуществляется с помощью параметров, содержащихся в файлах systrace.* и trcevent.* . Рассмотрим основные из них. По умолчанию считается, что параметр содержится в файлах systrace.* .
7.2.1Включение и выключение трассировки
-
Is_DVM_TRACE ненулевое значение этого параметра является общим признаком включенной трассировки.
-
Is_ALL_TRACE – признак трассировки всех функций системы поддержки (кроме функций обращения к DVM-отладчику и подсистеме сбора статистики).
-
Is_DEB_TRACE – признак трассировки функций обращения к DVM-отладчику.
-
Is_STAT_TRACE – признак трассировки функций обращения к подсистеме сбора информации для анализатора производительности.
-
TraceProcList список внутренних номеров процессоров с включенной трассировкой. При общем включении трассировки она функционирует только на тех процессорах, которые заданы в этом списке. Трассировка на главном процессоре (см. п. 4) накапливается всегда, вне зависимости от наличия его номера (нулевого) в списке TraceProcList. Признаком конца списка TraceProcList является номер, равный -1.
-
IsTraceProcList признак включённого списка TraceProcList. При нулевом значении этого параметра трассировка накапливается на всех процессорах.
-
IsEvent[<номер события>] равное 1 или 2 значение этого параметра является признаком включённой трассировки события с номером <номер события>. Значение 2 задает трассировку заданного события в расширенном режиме вне зависимости от наличия общего режима расширенной трассировки. Нулевое значение параметра выключает трассировку заданного события. Параметр содержится в файлах trcevent.* . Стандартно (т. е. в базовых наборах параметров) трассировка всех событий включена, а трассировка событий с номерами 0, 1, 2 и 3 включена в расширенном режиме.
-
DisableTraceEvents список номеров событий (через запятую), трассировка которых выключена. Список DisableTraceEvents отменяет трассировку заданных в нём событий, включённую ранее параметром IsEvent. Признаком конца списка DisableTraceEvents является номер события, равный -1. Отмена трассировки событий с номерами 0, 1, 2 и 3 не допускается.
-
IsDisableTraceEvents признак включённого списка DisableTraceEvents. При нулевом значении этого параметра отмена трассировки событий не производится.
-
BlockTrace признак отложенного включения трассировки. При общем включении трассировки накопление начинается только по специальному указанию, осуществляемому с помощью функции void tron(void). Включенная трассировка может быть выключена функцией void troff(void) (а затем снова включена и т. д.).
7.2.2Задание открытых (включенных) потоков трассировки
-
TracePath имя директории, в которую помещаются файлы с трассировкой (как при трассировке в буфер, так и при трассировке непосредственно в файл). Если задается не пустое имя директории, то оно должно заканчиваться символом "\" или "/".
-
ScreenTrace ненулевое значение этого параметра означает вывод трассировки в поток информационных сообщений (признак вывода трассировки на "видеомонитор"). Трассировка, выводимая в поток информационных сообщений, не содержит информационных сообщений и сообщений об ошибках системы поддержки.
-
BufferTrace признак накопления трассировки в буфер оперативной памяти.
-
TraceBufLength длина буфера трассировки в байтах.
-
TraceBufferExt расширение файлов с трассировкой при трассировке в буфер.
-
FileTrace признак накопления трассировки непосредственно в файлах.
-
FatTraceNoOpen признак завершения работы при неудачном открытии файла для непосредственного накопления трассировки. При нулевом значении этого параметра неудачное открытие файла будет отмечено предупреждением.
-
TraceFileExt расширение файлов с трассировкой при трассировке непосредственно в файлы.
7.2.3Задание режимов трассировки
-
DelSysTrace – признак уничтожения "старых" (оставшихся от предыдущего запуска) файлов с трассировкой при инициализации системы поддержки.
-
FullTrace общий признак расширенного режима трассировки.
-
FullTraceEvents список номеров событий (через запятую), трассируемых в расширенном режиме (вне зависимости от общего признака расширенного режима трассироки, задаваемого параметром FullTrace). Признаком конца списка FullTraceEvents является номер события, равный -1. Список FullTraceEvents изменяет режим трассировки заданных в нём событий, но не включает ранее отменённую их трассировку.
-
IsFullTraceEvents признак включённого списка FullTraceEvents. При нулевом значении этого параметра изменение режима трассировки событий, заданных в списке FullTraceEvents, не производится.
-
MaxTraceLevel общая максимальная трассируемая глубина обращений к функциям. Нулевое значение этого параметра означает трассировку функций, непосредственно вызываемых программой пользователя.
-
MaxEventLevel[<номер события>] максимальная трассируемая глубина обращений к функциям для события с номером <номер события>. Данный параметр имеет приоритет над параметром MaxTraceLevel. Параметр содержится в файлах trcevent.*
-
FullBufferStop признак останова трассировки при исчерпании буфера. Нулевое значение этого параметра устанавливает сохранение последней информации при исчерпании буфера путем замещения ею наиболее старой информации.
-
BufferTraceUnLoad – признак выгрузки в файлы накопленной в буферах трассировки перед завершением выполнения программы. При нулевом значении этого параметра система поддержки не выгружает в файлы накопленную в буферах трассировку, возлагая эту работу на запускаемую при необходимости автономную программу-дамп.
-
LowDumpLevel – признак выгрузки в файлы накопленной в буферах трассировки с помощью функций ввода/вывода нижнего уровня. Выгрузка буферов с трассировкой функциями ввода/вывода верхнего уровня осуществляется несколько медленнее.
-
SetTraceBuf признак трассировки непосредственно в файлы с буферизацией, осуществляемой операционной системой. Режим трассировки с буферизацией устанавливается с помощью функции setbuf сразу после открытия потока трассировки.
-
TraceFlush признак выталкивания информации трассировки из буфера операционной системы в файл после каждого события (при трассировке непосредственно в файлы). Режим, задаваемый данным параметром, функционирует только в том случае, если трассировка осуществляется с буферизацией (параметр SetTraceBuf задан ненулевым). Параметр TraceFlush может принимать два ненулевых значения: 1 и 2. В первом случае выталкивание трассировки осуществляется с помощью функции fflush. Во втором случае дополнительно осуществляется закрытие файла с трассировкой и последующее его открытие в режиме записи с добавлением информации в конец файла.
-
DisableTraceTime – признак вычитания времени работы программ трассировки из временного расстояния между выводимыми в трассировку событиями.
7.2.4Управление формой накапливаемой информации
-
KeyWordName признак вывода последовательности символов "NAME=" перед именем каждого события.
-
PreUnderLine признак подчеркивания заголовка каждого события (заголовок события это строка трассировки, содержащая имя события, время, имя файла и номер строки).
-
PreUnderLining строка подчеркивания заголовка каждого события.
-
PostUnderLine признак подчеркивания строки, завершающей выводимую по каждому событию информацию.
-
PostUnderLining строка подчеркивания выводимой по каждому событию информации.
-
BufferTraceShift – коэффициент сдвига вправо выводимой информации при трассировке в буфер. Каждой выводимой строке будет предшествовать пробелы в количестве, равном произведению данного параметра на текущую глубину обращений к трассируемым функциям.
-
FileTraceShift коэффициент сдвига вправо выводимой информации при трассировке непосредственно в файлы.
-
TimePrecision – число знаков после запятой при выводе времени, прошедшего c предыдущего события.
7.2.5Управление механизмами внутреннего самоконтроля системы поддержки, функционирующими при накоплении трассировки
В процессе накопления трассировочной информации система поддержки может контролировать определённые области оперативной памяти, при изменении содержимого которых она завершает выполнение программы с выводом соответствующего сообщения об ошибке. К таким областям относятся:
-
левые (нижние) и правые (верхние) контрольные части каждого динамически запрошенного блока памяти;
-
область памяти, явно задаваемая в файлах параметров systrace.* своими начальным и конечным адресами;
-
область памяти с программным кодом пользовательской программы и системы поддержки (память команд).
Контрольные части динамически запрашиваемых блоков памяти создаются при специальном указании в файлах параметров sysdebug.* и расписываются задаваемым там же кодом при выделении блока. Контроль их содержимого может осуществляться при каждом запросе и освобождении блока памяти, а также в процессе трассировки.














