Для чего нужны псевдо-инструкции в gem5?

Aug 19 2020

Итак, я видел, как реализованы некоторые симуляции в 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 (копия)

Я понял, какие изменения необходимы для реализации пользовательской псевдо-инструкции, но я не понимаю, что это такое и как они используются. Я не нахожу места за пределами этих файлов, которые вызываются. Любая помощь? Заранее спасибо!

Ответы

1 CiroSantilli Aug 19 2020 at 21:39

Псевдооперации - это способы выполнять магические операции моделирования изнутри гостя, этот тип техники более известен как гостевая аппаратура.

Их можно использовать / реализовать как:

  • магические инструкции, помещенные в неиспользуемое пространство кодирования реального 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