问题背景:引入特性shared host tags后,scsi驱动(例如megaraid-sas, hisi-sas等)从原来单硬队列(hctx)变成多队列,比如megaraid_sas,从原来的一个hctx变成96(中断个数)个hctx。目前driver tags是多个硬件队列共享的,但是sched tags非共享,即每个hctx对应一个私有的sched_tags,每个sched_tags允许nr_requests(256个)request,总共可以允许生成96 * 256个request,但是受到设备scsi queue_depth(比如:256)的限制,最多只能下发queue_depth个request到驱动,大量的request都积压在block层无法下发。
测试中fio的参数:共24个线程,iodepth是1024,就会下发很多request到block层。fio的runtime(60s)到了以后,由于积压的io都还没有返回,fio线程需要等待,导致fio计算的IOPS降低。由于是sata盘,本来随机读写很慢,加上block层大量的request,导致blktrace看到很多io的延时可能都20s+
测试方法:
[global]
rw=randwrite
direct=1
ramp_time=1
ioengine=libaio
iodepth=1024
numjobs=24
bs=128k # 128k, 256k, 512k
group_reporting=1
runtime=60
filename=/dev/sdb
Hi yuyufen, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Kernel, and any of the maintainers: @YangYingliang , @pi3orama , @成坚 (CHENG Jian) , @jiaoff , @zhengzengkai , @Qiuuuuu , @刘勇强 , @Xie XiuQi
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
主线对应的修复补丁:
d97e594c5166 blk-mq: Use request queue-wide tags for tagset-wide sbitmap
原理:
将sched_tags变成shared sbitmap,避免上层下发过多的request到block层,从避免block层request积压和IO延时增大
登录 后才可以发表评论