Может ли инструмент perf предоставить список системных вызовов, вызываемых внутри виртуальной машины?

Я пытаюсь отслеживать все системные вызовы, вызываемые внутри виртуальной машины из хост-ОС. Я попробовал это на хосте:

perf trace -a | grep qemu

Это дает такой вывод:

0.000 ( 0.000 ms): qemu-system-x8/7511  ... [continued]: poll()) = 0 Timeout
10.060 (10.043 ms): qemu-system-x8/7511 poll(ufds: 0x7f5d300008f8, nfds: 20, timeout_msecs: 10                ) = 0 Timeout
20.161 (10.079 ms): qemu-system-x8/7511 poll(ufds: 0x7f5d300008f8, nfds: 20, timeout_msecs: 10                ) = 0 Timeout
30.226 (10.044 ms): qemu-system-x8/7511 poll(ufds: 0x7f5d300008f8, nfds: 20, timeout_msecs: 10                ) = 0 Timeout

Может ли кто-нибудь объяснить, что это за звонки, которые показаны в этом выводе? Выполняются ли эти системные вызовы внутри виртуальной машины? или они вызываются самой ОС хоста в ответ на вызовы, вызываемые виртуальной машиной?


person cout_display_name    schedule 12.10.2016    source источник


Ответы (1)


Эти вызовы poll() выполняются qemu для проверки событий виртуальной машины, которые ему необходимо обработать.

Системные вызовы, выполняемые внутри виртуальной машины, обычно невидимы для основной ОС. (Имейте в виду, что виртуальная машина может работать под управлением ОС, отличной от Linux, или может вообще не работать под управлением ОС.) Если вы хотите отслеживать эти вызовы, вам, вероятно, потребуется запустить perf внутри виртуальной машины.

person Community    schedule 12.10.2016
comment
Спасибо за ответ. В выводе также есть другие вызовы, такие как чтение, запись, sigprocmask, madvise и т. д. Они также вызываются qemu, а не виртуальной машиной? Или мы можем сказать, что это вызовы, которые qemu вызывает в ответ на вызовы, вызываемые внутри виртуальной машины? - person cout_display_name; 13.10.2016