Простая трассировка QEMU ничего не печатает

Я делаю получить простой файл трассировки от QEMU. Я следовал инструкциям docs/tracing.txt

с помощью этой команды "qemu-system-x86_64 -m 2G -trace events=/tmp/events ../qemu/test.img"

Я хотел бы получить простой файл трассировки. у меня есть файл трассировки, но в нем ничего нет.

  1. Сборка с "простой" трассировкой:

    ./configure --enable-trace-backends = просто сделать

  2. Создайте файл с событиями, которые вы хотите отследить:

    echo bdrv_aio_readv> / tmp / events echo bdrv_aio_writev >> / tmp / events

  3. Запустите виртуальную машину, чтобы создать файл трассировки:

    qemu -trace events = / tmp / events... # ваш обычный вызов QEMU

  4. Довольно распечатать бинарный файл трассировки:

    ./scripts/simpletrace.py trace-events trace- * # Переопределить * с помощью QEMU

Я следовал этой инструкции. пожалуйста, кто-нибудь, дайте мне совет для этой ситуации.

СПАСИБО!

2 ответа

Я получил ту же проблему, следуя тому же документу. https://fossies.org/linux/qemu/docs/tracing.txt ничего не получил, потому что bdrv_aio_readv и bdrv_aio_writev не были включены по умолчанию, по крайней мере, версия, которую я выполнил, не была включена. вам нужно открыть trace-events в исходной директории, ища какую-нибудь строку без отключения, например, я использую: echo "load_file" > /tmp/events Затем запускаю qemu, после запуска гостя я запускаю./scripts/simpletrace.py trace-События след-пид я получил

load_file 1474.156 pid=5249 name=kvmvapic.bin path=qemu-2.8.0-rc0/pc-bios/kvmvapic.bin
load_file 22437.571 pid=5249 name=vgabios-stdvga.bin path=qemu-2.8.0-rc0/pc-bios/vgabios-stdvga.bin
load_file 10034.465 pid=5249 name=efi-e1000.rom 

Вы также можете добавить -monitor stdio в командную строку qemu, после ее запуска вы можете выполнить следующую команду в CLI qemu:

(qemu) info trace-events

load_file : state 1
vm_state_notify : state 1
balloon_event : state 0
cpu_out : state 0
cpu_in : state 0

1 означает включенные события.

Изменить trace-events файл в исходном дереве

Начиная с v2.9.0 вы также должны удалить disable из строк, которые вы хотите включить, например:

-disable exec_tb(void *tb, uintptr_t pc) "tb:%p pc=0x%"PRIxPTR
+exec_tb(void *tb, uintptr_t pc) "tb:%p pc=0x%"PRIxPTR

и перекомпилировать.

Вот минимальный полностью автоматизированный исполняемый пример, который загружает Linux и производит следы: https://github.com/cirosantilli/linux-kernel-module-cheat

Например, я использовал трассировки для подсчета количества загрузочных инструкций в Linux: https://github.com/cirosantilli/linux-kernel-module-cheat/blob/c7bbc6029af7f4fab0a23a380d1607df0b2a3701/count-boot-instructions.md

У меня есть слегка исправленный QEMU в качестве подмодуля, ключевой коммит: https://github.com/cirosantilli/qemu/commit/e583d175e4cdfb12b4812a259e45c679743b32ad

Другие вопросы по тегам