块设备写文件速度很慢
现在对一个块设备进行测试,发现读写速度很慢,查看日志后发现设备驱动程序从request_queue中获取了request,从request提取bio,最后提取bio的page,发现bi_io_vec数组中的page太少了(最多就31个pages,最少只有一个),导致每次提交写请求提交的数据量太少了
高手帮忙分析下是哪个环节有问题?或者给点意见都行啊
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
查看日志后发现设备驱动程序从request_queue中获取了request,从request提取bio,最后提取bio的page
分析过程就有问题, 设备驱动程序 make_request_fn函数, 将bio 变化 为request,进入调度队列
request_fn 函数, 从调度队列中取一个request ,执行之,对scsi设备 ,就转化为scsi命令 。
怎会从request提取bio?
本帖最后由 chengmao2010 于 2011-05-30 09:53 编辑
回复 2# todaygood
我不是看生成request的方向(从page到bio再到request的方向),看的是处理request的那条路线(即request到bio再到page)
会不会和IO调度有关系呢?
IO调度会将bio合并到一个request中
也可以将两个request进行合并
回复 4# chengmao2010
可能跟IO调度有关系, 也可能跟IO流量的模型有关(可能是小块随机写)。
你的块设备具体是什么设备?
如果request少了,可以在blk_init_queue时注册大一些,可参考mmc里的bounce buf做法
blk_queue_bounce_limit(cq->queue, BLK_BOUNCE_HIGH);
blk_queue_max_hw_sectors(cq->queue, bouncesz / 512);
blk_queue_physical_block_size(cq->queue, bouncesz);
blk_queue_max_segments(cq->queue, bouncesz / PAGE_CACHE_SIZE);
blk_queue_max_segment_size(cq->queue, bouncesz);