Спец курс (Автоматизация процесса проектирования)/Практические задания 4 — различия между версиями
ANA (обсуждение | вклад) м |
ANA (обсуждение | вклад) м |
||
Строка 6: | Строка 6: | ||
==== run.log ==== | ==== run.log ==== | ||
Входной файл для задач представляет собой лог пакетов данных, передаваемых по PCIe протоколу между Host`ом и Device`ом. Поверх PCIe протокола передаются пакеты с командами и данными другого протокола - [https://ru.wikipedia.org/wiki/NVM_Express NVMe]. Задания направлены на то, чтобы провести дополнительную обработку данных в логе, чтобы улучшить читаемость данных и ускорить анализ NVMe протокола. | Входной файл для задач представляет собой лог пакетов данных, передаваемых по PCIe протоколу между Host`ом и Device`ом. Поверх PCIe протокола передаются пакеты с командами и данными другого протокола - [https://ru.wikipedia.org/wiki/NVM_Express NVMe]. Задания направлены на то, чтобы провести дополнительную обработку данных в логе, чтобы улучшить читаемость данных и ускорить анализ NVMe протокола. | ||
+ | |||
+ | Рассмотрим основные позиции в лог файле на следующем примере: | ||
+ | [[Файл:PCIe log example.png|1100px]] | ||
+ | * В столбце 1 буквы T и R озаначают направление передачи данных, от хоста к девайсу (T) и от девайса к хосту (R) соответственно. | ||
+ | * В столбце 2 задаётся тип пакета: запрос на запись (MWr32, MWr64), запрос на чтение (MRd32, MRd64), ответ на запрос чтения (CplD). | ||
+ | * В столбце 3 задаётся номер запроса/ответа. Для запроса и ответа на него данный номер должен совпадать, как в примере. | ||
+ | * В поле 4 для запроса на запись или чтение будет указан адрес. | ||
+ | * В поле 5 для ответов на запрос чтения указывается количество байт. Для NVMe команд данное поле равно 64 байт. | ||
+ | * В поле 6 указывается количество двойных слов (4 байта) которые нужно прочитать или записать, в зависимости от запроса. | ||
+ | * В поле 7 указываются передаваемые данные. | ||
==== run.info ==== | ==== run.info ==== |
Версия 01:04, 25 марта 2018
Перед выполнение ознакомиться с правилами оформления задания
Описание входного файла
run.log
Входной файл для задач представляет собой лог пакетов данных, передаваемых по PCIe протоколу между Host`ом и Device`ом. Поверх PCIe протокола передаются пакеты с командами и данными другого протокола - NVMe. Задания направлены на то, чтобы провести дополнительную обработку данных в логе, чтобы улучшить читаемость данных и ускорить анализ NVMe протокола.
Рассмотрим основные позиции в лог файле на следующем примере:
- В столбце 1 буквы T и R озаначают направление передачи данных, от хоста к девайсу (T) и от девайса к хосту (R) соответственно.
- В столбце 2 задаётся тип пакета: запрос на запись (MWr32, MWr64), запрос на чтение (MRd32, MRd64), ответ на запрос чтения (CplD).
- В столбце 3 задаётся номер запроса/ответа. Для запроса и ответа на него данный номер должен совпадать, как в примере.
- В поле 4 для запроса на запись или чтение будет указан адрес.
- В поле 5 для ответов на запрос чтения указывается количество байт. Для NVMe команд данное поле равно 64 байт.
- В поле 6 указывается количество двойных слов (4 байта) которые нужно прочитать или записать, в зависимости от запроса.
- В поле 7 указываются передаваемые данные.
run.info
Дополнительный файл, который требуется в некоторых заданиях, содержит информацию о некоторых конфигурационных параметрах.
Общие требования к интерфейсу программ
- первый параметр обязательный - имя входного файла (может содержать путь к файлу). Если этот параметр не задан, то вывести сообщение о том, как использовать программу (usage)
- второй параметр необязательный - имя выходного файла. Если параметр не задан, то сформировать имя выходного файла из имени входного по шаблону: <имя_вх_файла>_out.<расширение_вх_файла>.
Если входной файл не может быть открыт, либо выходной файл не может быть создан (если задан неправильный путь в командной строке), то вывести соответствующее сообщение об ошибке.
Задание 1. Разворот байт
Во входном файле (лог файл) строки с пометкой "(D)" включают данные - от одного до четырёх двойных слов (двойное слово (DWord) - 32 двоичных разряда, далее DW), заданных в шестнадцатеричной форме. Например:
0 (D) 80000d00 02000000 00000000 00000000 Some comments
Задача развернуть байты в каждом DW`е, как показано ниже
0 (D) 000d0080 00000002 00000000 00000000 Some comments
После данных в строке могут быть какие-либо текстовые комментарии, их необходимо перенести без изменений.
В файле есть строки с данными со слово "LittleEndian", в которых уже проведено данное преобразование, поэтому их не следует изменять. Например:
0 (D) 8020c011 LittleEndian
Остальные строки из входного файла перенести в выходной без изменений.
Задание 2. Распознавание Admin команд
Обработать входной лог файл, найти в логе пакеты с данными, которые задают NVMe команду и дополнить соответствующие строки с данными расшифровкой, записав в строке после данных имена и значения полей команды.
Пакет данных относящийся к команде имеет размер 64 байта, в заголовке пакета должно быть BC:0064. После строки заголовка следует 4 строки с данными, где в первом столбце - номер DWord`а данных пакета, второй столбец - маркер данных "(D)".
test_top 203865.00 203869.00 R MRd32 0x0100/01 355 0 0 0 0 0 0x40008080 f f 16 (H) 00008010 010001ff 40008080 ---- 0x3191b2b4 0xf87188a test_top 203897.00 203917.00 T CplD 0x0100/01 182 0 0 0 0 0 ID:0xffff Stat:SC BC:0064 16 (H) 4a008010 ffff0040 01000100 ---- 0 0xa94d0d83 0x37e1b7df 0 (D) 01000400 02000000 00000000 00000000 4 (D) 00000000 00000000 00900140 00000000 8 (D) 00c00140 00000000 0a000000 00000000 12 (D) 01000000 00000000 00000000 00000000
Данные в логе записываются слева направо - с младшего адреса. В приведённом примере байт 0 нулевого DWord`а равень 01, второй байт - 00, третий 04, четвертый байт - 00 и т.д. Далее идут четыре DWorda данных от младшего к старшему.
Расшифровка команды в спецификации
- Figure 10: Command Dword 0
- Figure 11: Command Dword 0-15: Command Format – Admin Command Set
Например, строка с первыми четырьмя DWord`ами:
0 (D) 01000400 02000000 00000000 00000000
должна быть преобразована согласно таблицы 10 и 11 в следующую строку:
0 (D) 01000400 02000000 00000000 00000000 CMD=01, FUSE=00, PSDT=PRP, CID=0004, NSID=2
Для того чтобы определить админ команду нужно, проверить адрес по которому читается пакет данных. Диапазон адресов для админ команд необходимо прочитать из файла run.info:
118245000.00 ps 8 H00/C01 Reg Write (AQA) 0x0000_0024, 0x00ed_0001/4B ACQS=237, ASQS=1 118245000.00 ps 8 H00/C01 Reg Write (ACQ) 0x0000_0030, (see ACQ)/8B ACQ=0x0000_0000_4000_0000 118274000.00 ps 9 H00/C01 Reg Write (AQA) 0x0000_0024, 0x00ed_00b8/4B ACQS=237, ASQS=184 118274000.00 ps 9 H00/C01 Reg Write (ASQ) 0x0000_0028, (see ASQ)/8B ASQ=0x0000_0000_4000_1000
- Поле ACQ=0x0000_0000_4000_0000 - содержит адрес начала диапазона (hex)
- Поле ACQS=237 - содержит количество команд в диапазоне (по 64 байта) (dec). Размер диапазона 237 * 64 = 15168 (0х3B40)
Данные поля могут содержаться в нескольких строчках, следует использовать последнее встречающееся значение.
Для данного примера админ команды должны лежать в диапазоне от 0х4000_0000 до 0х4000_3B3F (включительно). Таким образом, в приведённом выше примере адрес 0x40008080 запроса на чтение команды не попадает в этот диапазон, что означает, что это не админ команда, а IO команда.