1. 工具
kprobe,用于抓一些实时数据
iostate -kx 1 /dev/*
blktrace -d /dev/dm-33 -o - |blkparse -i - -o blkparse.out
http://blog.chinaunix.net/uid-24774106-id-4096470.html
2. 通过trace发现,有的时候bio出队列是由kblockd进程完成的,而kblockd每3ms执行一次(blk_unplug_timeout),这也就是性能低下的原因。
但有的时候,却是在当前上下文出队列,不经过io调度子系统(应该是调用了__generic_unplug_device)。
3. blk_queue_make_request(),这个函数里面设置了q->unplug_delay = msecs_to_jiffies(3),3ms唤醒kblockd一次。
在device mapped框架下的块设备:
dm_request() 【bio的入口】
--> blk_queue_bio(q, bio)
--> blk_queue_bio
在blk_queue_bio函数中,如果bio设置了BIO_RW_UNPLUG位,const bool unplug = bio_rw_flagged(bio, BIO_RW_UNPLUG);
则会调用__generic_unplug_device(),即可以在当前上下文中对bio进行转发。
时间: 2024-10-12 11:59:44