块设备性能调优

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

 

  使用实例:

  1. blktrace -d /dev/asd_cache /dev/sdd

  2. blkparse sdd > sdd.txt

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进行转发。

posted @ 2015-12-01 20:56  jawfeng  阅读(454)  评论(0)    收藏  举报