[发明专利]一种IO请求处理方法及系统在审
| 申请号: | 202110801222.3 | 申请日: | 2021-07-15 |
| 公开(公告)号: | CN113703959A | 公开(公告)日: | 2021-11-26 |
| 发明(设计)人: | 李养兆;仇锋利 | 申请(专利权)人: | 苏州浪潮智能科技有限公司 |
| 主分类号: | G06F9/50 | 分类号: | G06F9/50 |
| 代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 张春辉 |
| 地址: | 215100 江苏省苏州市吴*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 io 请求 处理 方法 系统 | ||
本申请公开了一种IO请求处理方法,包括Virtio设备将Block层下发的IO请求存储至发送队列;控制端从所述发送队列获取所述IO请求,对所述IO请求进行处理获得IO处理结果,并将所述IO处理结果存储至完成队列;所述Virtio设备从所述完成队列获取所述IO处理结果,并将所述IO处理结果反馈至所述Block层;该IO请求处理方法可以在不牺牲时延、不复杂化开发流程的前提下,去掉软中断带来的CPU资源消耗。本申请还公开了一种IO请求处理系统,也具有上述有益效果。
技术领域
本申请涉及计算机技术领域,特别涉及一种IO请求处理方法,还涉及一种IO请求处理系统。
背景技术
Virtio是一种I/O(Input/Output,输入/输出)虚拟化框架,符合该框架的设备则称为Virtio设备。通常,在Virtio设备驱动的实现过程中,IO请求流程为:Block层(块层)→Virtio驱动→后端;应答流程为:后端→Virtio驱动→Block层。其中,在应答流程中,后端通过注入软中断的方式通知内核态Virtio设备进行下一步处理,然而,在系统负载很高时,处理软中断要消耗大量CPU资源,并且,还会降低CPU缓存命中率,导致业务线程性能下降。
为解决上述问题,可以先由后端合并多个IO完成通知,再在IO数量或时延达到一定阈值后,注入一个软中断通知内核态Virtio设备,从原理上看,该方法能够将软中断数量降低到原来的1/N(N即为合并的IO数量),但是,这是以牺牲时延为代价的,业务处理效率更为低下。另一种解决方法则是将Virtio设备移到用户态,当后端完成IO处理后,由用户态Virtio设备轮询到IO完成,并进行下一步处理,该实现方式虽然能够去掉处理软中断的CPU消耗,但是,由于Virtio设备驱动是用户态的,需要利用应用进行软件适配,使得开发流程更为复杂,研发成本更高。
因此,如何在不牺牲时延、不复杂化开发流程的前提下,去掉软中断带来的CPU资源消耗是本领域技术人员亟待解决的问题。
发明内容
本申请的目的是提供一种IO请求处理方法,该IO请求处理方法可以在不牺牲时延、不复杂化开发流程的前提下,去掉软中断带来的CPU资源消耗;本申请的另一目的是提供一种IO请求处理系统,也具有上述有益效果。
第一方面,本申请提供了一种IO请求处理方法,包括:
Virtio设备将Block层下发的IO请求存储至发送队列;
控制端从所述发送队列获取所述IO请求,对所述IO请求进行处理获得IO处理结果,并将所述IO处理结果存储至完成队列;
所述Virtio设备从所述完成队列获取所述IO处理结果,并将所述IO处理结果反馈至所述Block层。
优选的,所述Virtio设备从所述完成队列获取所述IO处理结果,包括:
利用轮询线程对所述完成队列进行轮询,获得所述IO处理结果。
优选的,所述将所述IO处理结果反馈至所述Block层之前,还包括:
根据所述IO处理结果计算所述轮询线程的当前负载;
若所述当前负载达到预设负载上限,则开启新的轮询线程;
若所述当前负载未达到所述预设负载上限,则执行所述将所述IO处理结果反馈至所述Block层的步骤。
优选的,所述开启新的轮询线程之前,还包括:
统计所述轮询线程的启动数量;
判断所述启动数量是否达到预设数量上限,若否,则执行所述开启新的轮询线程的步骤。
优选的,所述IO请求处理方法还包括:
若所述启动数量达到所述预设数量上限,则发出告警提示。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州浪潮智能科技有限公司,未经苏州浪潮智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110801222.3/2.html,转载请声明来源钻瓜专利网。





