Для чего нужны псевдо-инструкции в gem5?
Итак, я видел, как реализованы некоторые симуляции в gem5, в частности, я смотрел на PIMSim (https://github.com/vineodd/PIMSim). Я видел, что они реализовали некоторые псевдо-инструкции для архитектуры x86. Я видел, что эти псевдо-инструкции используются только в полном системном режиме. Для этого они изменили следующие файлы:
- включить / gem5 / m5ops.h
- util / m5 / m5op_x86.S
- SRC / Arch / x86 / ISA / декодер / two_byte_opcodes.isa
- src / sim / pseudo_inst.hh (копия)
Я понял, какие изменения необходимы для реализации пользовательской псевдо-инструкции, но я не понимаю, что это такое и как они используются. Я не нахожу места за пределами этих файлов, которые вызываются. Любая помощь? Заранее спасибо!
Ответы
Псевдооперации - это способы выполнять магические операции моделирования изнутри гостя, этот тип техники более известен как гостевая аппаратура.
Их можно использовать / реализовать как:
магические инструкции, помещенные в неиспользуемое пространство кодирования реального ISA
Я думаю, что это всегда включено, за исключением KVM, где центральный процессор берет на себя управление и просто дает сбой, если видны эти неизвестные инструкции.
доступ к магическому адресу памяти. Это настраивается / включается из конфигураций Python,
System.py
содержит:m5ops_base = Param.Addr( 0xffff0000 if buildEnv['TARGET_ISA'] == 'x86' else 0, "Base of the 64KiB PA range used for memory-mapped m5ops. Set to 0 " "to disable.")
Полухостинг ARM : некоторые пользовательские операции полухостинга недавно были подключены к m5ops. Ничего не стоит, что есть некоторое совпадение между тем, что некоторые m5ops и что могут достичь некоторые из стандартизированных операций полухостинга, например, выход из симулятора.
Вот некоторые из наиболее распространенных m5ops:
m5 exit
: выйти из симулятораm5 checkpoint
: взять контрольно-пропускной пунктm5 dumpstats
: сбросить статистикуm5 resetstats
: обнулить статистику и перезапустить подсчет для следующегоm5 dumpstats
m5 readfile
: прочитать значениеfs.py --script
содержимого опции хоста , очень полезно для запуска различных рабочих нагрузок после контрольной точки загрузки Linux
m5ops полезны, потому что часто бывает сложно определить, когда вы хотите выполнить вышеуказанные операции другими способами, например: сделать что-нибудь, когда Linux завершит загрузку. Например, чтобы сделать это изначально наивно из симулятора, вам нужно заранее знать, в какой момент это произойдет. Вы можете повозиться с проверкой совпадения ПК с каким-либо адресом (уже сделано, например, для panic
проверки Linux ), но это немного сложнее.
Также существует встроенный в дерево инструмент m5, который вы можете перекрестно скомпилировать и разместить в гостевой системе, чтобы предоставлять волшебные инструкции из исполняемого интерфейса CLI.
Но вы можете просто жестко закодировать их в своих двоичных файлах, чтобы при необходимости получить более точные результаты, например, жесткое кодирование, как в X86.
#define LKMC_M5OPS_CHECKPOINT __asm__ __volatile__ (".word 0x040F; .word 0x0043;" : : "D" (0), "S" (0) :)
#define LKMC_M5OPS_DUMPSTATS __asm__ __volatile__ (".word 0x040F; .word 0x0041;" : : "D" (0), "S" (0) :)
больше примеров жесткого кода по адресу: https://github.com/cirosantilli/linux-kernel-module-cheat/blob/4f82f79be7b0717c12924f4c9b7c4f46f8f18e2f/lkmc/m5ops.hИли вы также можете использовать их более красиво и кропотливо из основного дерева, как показано в: Как использовать m5 в gem5-20
Дополнительную информацию также можно найти по адресу: https://cirosantilli.com/linux-kernel-module-cheat/#m5ops