«…Труд избавляет человека от трех великих зол: скуки, порока, нужды…»

Спец курс (Автоматизация процесса проектирования)/Практические задания 4 — различия между версиями

Материал из Wiki
Перейти к: навигация, поиск
м
м
Строка 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

Лекции SCRIPT

Лекции

Практические задания
Тесты

Табель успеваемости

Экзамен

Доп. материалы

Содержание

Перед выполнение ознакомиться с правилами оформления задания

Описание входного файла

run.log

Входной файл для задач представляет собой лог пакетов данных, передаваемых по PCIe протоколу между Host`ом и Device`ом. Поверх PCIe протокола передаются пакеты с командами и данными другого протокола - NVMe. Задания направлены на то, чтобы провести дополнительную обработку данных в логе, чтобы улучшить читаемость данных и ускорить анализ NVMe протокола.

Рассмотрим основные позиции в лог файле на следующем примере: PCIe log example.png

  • В столбце 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 команда.


Задание 4. Распознавание Admin команды Identify

Задание 3. Распознавание IO команд

Задание 5. Распознавание полей IO Read команды

Задание 6. Распознавание полей IO Write команды