Простая трассировка QEMU ничего не печатает
Я делаю получить простой файл трассировки от QEMU. Я следовал инструкциям docs/tracing.txt
с помощью этой команды "qemu-system-x86_64 -m 2G -trace events=/tmp/events ../qemu/test.img"
Я хотел бы получить простой файл трассировки. у меня есть файл трассировки, но в нем ничего нет.
Сборка с "простой" трассировкой:
./configure --enable-trace-backends = просто сделать
Создайте файл с событиями, которые вы хотите отследить:
echo bdrv_aio_readv> / tmp / events echo bdrv_aio_writev >> / tmp / events
Запустите виртуальную машину, чтобы создать файл трассировки:
qemu -trace events = / tmp / events... # ваш обычный вызов QEMU
Довольно распечатать бинарный файл трассировки:
./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