跟踪qemu-kvm下的磁盘写入
傻了,上一个调试的时候没加-enable-kvm,而且电脑的虚拟化也是关着的。假装无事发生过,一切调整就绪后,重新在KVM模式下调试。终于在另一台linux老爷机上装好了qemu和各种软件,继续从这里来,qcow2_pre_write_overlap_check
下个断点,这里的栈和TCG模式一样,继续操作,b blk_aio_prwv
。
(gdb) bt
#0 qcow2_pre_write_overlap_check (bs=0x558eef1841a0, ign=0, offset=1670656,
size=4096, data_file=true) at block/qcow2-refcount.c:2817
#1 0x0000558eedcb12e6 in qcow2_co_pwritev_part (bs=0x558eef1841a0,
offset=1879080448, bytes=4096, qiov=0x7fa0e4236760, qiov_offset=0, flags=0)
at block/qcow2.c:2513
#2 0x0000558eedcfe0de in bdrv_driver_pwritev (bs=0x558eef1841a0,
offset=1879080448, bytes=4096, qiov=0x7fa0e4236760, qiov_offset=0, flags=0)
at block/io.c:1171
#3 0x0000558eedd000a5 in bdrv_aligned_pwritev (child=0x558eef191900,
req=0x7fa0b8acae10, offset=1879080448, bytes=4096, align=1,
qiov=0x7fa0e4236760, qiov_offset=0, flags=0) at block/io.c:1980
#4 0x0000558eedd0087f in bdrv_co_pwritev_part (child=0x558eef191900,
offset=1879080448, bytes=4096, qiov=0x7fa0e4236760, qiov_offset=0, flags=0)
at block/io.c:2137
#5 0x0000558eedce6f6d in blk_co_pwritev_part (blk=0x558eef183e40,
offset=1879080448, bytes=4096, qiov=0x7fa0e4236760, qiov_offset=0, flags=0)
at block/block-backend.c:1211
#6 0x0000558eedce6fbf in blk_co_pwritev (blk=0x558eef183e40,
offset=1879080448, bytes=4096, qiov=0x7fa0e4236760, flags=0)
at block/block-backend.c:1221
#7 0x0000558eedce7795 in blk_aio_write_entry (opaque=0x7fa0e4238780)
at block/block-backend.c:1415
#8 0x0000558eedddcc2f in coroutine_trampoline (i0=-467430144, i1=32672)
at util/coroutine-ucontext.c:115
#9 0x00007fa0f56c8000 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#10 0x00007fa0e9cbad90 in ?? ()
#11 0x0000000000000000 in ?? ()
断下来以后,可以看到,除了上层的消息循环变成了kvm的,后面都是一样,通过直接向ioport写数据,然后转移到对应的后端处理函数中。差不多就调试完了,后面开设了一个网站督促自己读代码,qemu.world,等我想起来就更新。
(gdb) bt
#0 blk_aio_prwv (blk=0x558eef183e40, offset=0, bytes=0, iobuf=0x0,
co_entry=0x558eedce7a28 <blk_aio_flush_entry>, flags=0,
cb=0x558eedaad47c <ide_flush_cb>, opaque=0x558eefc24730)
at block/block-backend.c:1360
#1 0x0000558eedce7ab1 in blk_aio_flush (blk=0x558eef183e40,
cb=0x558eedaad47c <ide_flush_cb>, opaque=0x558eefc24730)
at block/block-backend.c:1503
#2 0x0000558eedaad5da in ide_flush_cache (s=0x558eefc24730)
at hw/ide/core.c:1088
#3 0x0000558eedaae5b3 in cmd_flush_cache (s=0x558eefc24730, cmd=231 '\347')
at hw/ide/core.c:1554
#4 0x0000558eedaaf8c5 in ide_exec_cmd (bus=0x558eefc246b0, val=231)
at hw/ide/core.c:2085
#5 0x0000558eedaaddef in ide_ioport_write (opaque=0x558eefc246b0, addr=503,
val=231) at hw/ide/core.c:1294
#6 0x0000558eed85cd3f in portio_write (opaque=0x558eefcbff30, addr=7,
data=231, size=1) at /home/leon/qemu-4.2.0/ioport.c:201
#7 0x0000558eed861fbc in memory_region_write_accessor (mr=0x558eefcbff30,
addr=7, value=0x7fa0e9cbb818, size=1, shift=0, mask=255, attrs=...)
at /home/leon/qemu-4.2.0/memory.c:483
#8 0x0000558eed8621a6 in access_with_adjusted_size (addr=7,
value=0x7fa0e9cbb818, size=1, access_size_min=1, access_size_max=4,
access_fn=0x558eed861efc <memory_region_write_accessor>,
mr=0x558eefcbff30, attrs=...) at /home/leon/qemu-4.2.0/memory.c:544
#9 0x0000558eed8650d7 in memory_region_dispatch_write (mr=0x558eefcbff30, addr=7, data=231, op=MO_8, attrs=...) at /home/leon/qemu-4.2.0/memory.c:1475
#10 0x0000558eed803386 in flatview_write_continue (fv=0x7fa0e410c970, addr=503, attrs=..., buf=0x7fa0f86ac000 "\347\200\354\036", len=1, addr1=7, l=1, mr=0x558eefcbff30) at /home/leon/qemu-4.2.0/exec.c:3129
#11 0x0000558eed8034cb in flatview_write (fv=0x7fa0e410c970, addr=503, attrs=..., buf=0x7fa0f86ac000 "\347\200\354\036", len=1) at /home/leon/qemu-4.2.0/exec.c:3169
#12 0x0000558eed803818 in address_space_write (as=0x558eee7a4b60 <address_space_io>, addr=503, attrs=..., buf=0x7fa0f86ac000 "\347\200\354\036", len=1) at /home/leon/qemu-4.2.0/exec.c:3259
#13 0x0000558eed803885 in address_space_rw (as=0x558eee7a4b60 <address_space_io>, addr=503, attrs=..., buf=0x7fa0f86ac000 "\347\200\354\036", len=1, is_write=true) at /home/leon/qemu-4.2.0/exec.c:3269
#14 0x0000558eed87cf9f in kvm_handle_io (port=503, attrs=..., data=0x7fa0f86ac000, direction=1, size=1, count=1) at /home/leon/qemu-4.2.0/accel/kvm/kvm-all.c:2104
#15 0x0000558eed87d737 in kvm_cpu_exec (cpu=0x558eef1b29b0) at /home/leon/qemu-4.2.0/accel/kvm/kvm-all.c:2350
#16 0x0000558eed853017 in qemu_kvm_cpu_thread_fn (arg=0x558eef1b29b0) at /home/leon/qemu-4.2.0/cpus.c:1318
#17 0x0000558eeddc042b in qemu_thread_start (args=0x558eef1da7e0) at util/qemu-thread-posix.c:519
#18 0x00007fa0f5a2a4a4 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#19 0x00007fa0f576cd0f in clone () from /lib/x86_64-linux-gnu/libc.so.6