【存储原理】IO超时处理 块层block-scsi层之间

本文讨论了在IT系统中,如何通过设置超时机制处理IO阻塞,包括调整超时时间和命令重试策略。重点介绍了request_queue的定时器管理和MQ设备中request的预分配与检查机制,以提高性能和响应速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在IO下发过程中,IO可能因为软件或硬件问题导致IO无法返回,这时如果没有超时机制,IO会一直阻塞。IO一直阻塞是什么原因导致的?实际上存在超时机制,在达到一定时间IO仍未返回,会触发超时处理。超时时间是否可以减少?命令重试次数是否可以减少,尽量让超时IO和错误IO快速执行完成。

在分配request-queue时,会给每个请求队列分配一个定时器q->timeout,用于检测IO超时,默认30秒。当IO在指定时间没有返回时,会调用超时定时器的回调blk_rq_timed_out_timer(),它调用q->timeout_work。

static void blk_rq_timed_out_timer(struct timer_list *t)
{
    struct request_queue *q = from_timer(q, t, timeout);

    kblockd_schedule_work(&q->timeout_work);
}


struct request_queue *blk_alloc_queue(int node_id) 
{
timer_setup(&q->timeout, blk_rq_timed_out_timer, 0);
INIT_WORK(&q->timeout_work, blk_timeout_work);

}
struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,                                    
                          struct request_queue *q,                                                               
                          bool elevator_init)     
{
    INIT_WORK(&q->timeout_work, blk_mq_timeout_work);                                                            
    blk_queue_rq_timeout(q, set->timeout ? set->timeout : 30 * HZ);    
}

对于MQ设备,因为request是在初始化request_queue时预分配的,通过tag管理,blk_mq_timeout_work遍历tag,通过bitmap找到request.

static void blk_mq_timeout_work(struct work_struct *work)
{
    struct request_queue *q =
        container_of(work, struct request_queue, timeout_work);
                                                                                                                                                                                                            
    blk_mq_queue_tag_busy_iter(q, blk_mq_check_expired, &next);
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux技术芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值