一种通过软硬件协同支持读写性能隔离的I/O调度器的制作方法

文档序号:16627559发布日期:2019-01-16 06:15阅读:177来源:国知局
一种通过软硬件协同支持读写性能隔离的I/O调度器的制作方法

本发明涉及一种基于linux内核的i/o调度器,更特别地说,是指一种通过软硬件协同支持读写性能隔离的i/o调度器。



背景技术:

i/o调度器是操作系统内核中的部件,其通过合并,重排等操作改变i/o请求在队列中的顺序,从而改变i/o请求提交到存储设备的顺序。i,input,输入;o,output,输出。

队列:队列是一种特殊的线性表,其只允许在表的前端(front)进行元素的删除操作(出队),在表的后端(rear)进行元素的插入操作(入队)。

i/o请求队列:i/o队列是linux内核中的结构,存在于通用块层(blocklayer),上层应用提交的i/o请求顺序地从队列尾端被提交至队列,而请求队列依次将队列前端的i/o请求提交至存储设备进行处理。

i/o软件队列:i/o软件队列是linux内核3.19中的概念,其作用与i/o请求队列相同,与之不同的是,i/o请求队列只有一个,而i/o软件队列针对每一个cpu逻辑核都会创建一个,其用于缓存对应cpu逻辑核提交的i/o请求。

i/o硬件队列:i/o硬件队列也是linux内核3.19中的概念,其是一个新的队列结构。i/o硬件队列的个数与存储硬件提供的队列数目相等,并与之对应。i/o软件队列将i/o请求提交到指定的i/o硬件队列,i/o硬件队列再将i/o请求提交至存储设备。

nvme(non-volatilememoryexpress):非易失性内存主机控制器接口规范,是一个逻辑设备接口规范。此规范充分利用pci-e接口,处理器以及操作系统的并行性,极大的提升固态硬盘的读写性能。nvme硬件队列,即为存在于nvme接口驱动中的,用于将i/o请求提交至存储设备的硬件队列。



技术实现要素:

为了解决针对数据处理系统中的在线读负载和批量写负载两类应用的混部,在不修改上层应用的前提下,降低应用业务混部带来的干扰,即最大程度的做到混部应用的资源隔离;因此,本发明设计了一种通过软硬件协同支持读写性能隔离的i/o调度器。本发明技术手段是改进已有i/o调度器,通过调整不同类型i/o的队列深度对i/o进行流量控制,并优先保证读i/o请求的完成时间,此为软件层面的i/o隔离方案;同时本发明将4类i/o调度器中的优先级与nvme硬件队列中的4类优先级进行对接,当读i/o请求的优先级高于写i/o请求的优先级时,nvmessd会优先获取并处理读i/o请求,此为硬件层面的i/o隔离方案。采用本发明设计的i/o调度器处理后能够在数据处理系统中的在线读负载和批量写负载混部,即读写i/o混部的情况下,保持写i/o性能不变的同时,将读i/o的性能提升48.3%。

本发明设计的一种通过软硬件协同支持读写性能隔离的i/o调度器,是在基于linux内核的现有i/o调度器中增加了四个单元,即队列分配单元(10)、优先级设置单元(20)、队列延迟时间对比单元(30)和队列深度调节单元(40);

队列分配单元(10)中存在有队列包括有读请求队列(101)、同步写请求队列(102)和异步写请求队列(103);

读请求队列(101)用于归类经读i/o请求单元(12)从数据处理系统中的在线读负载(11)请求得到的多个读请求read,则有,在所有观测周期ot={0,t,2t,…,(n-1)t,nt}里采集到的读请求read采用集合形式表达为rq={readt,read2t,…,readnt};

同步写请求队列(102)用于归类经写i/o请求单元(22)从数据处理系统中的批量写负载(21)请求得到的多个同步写请求write,则有,在所有观测周期ot={0,t,2t,…,(n-1)t,nt}里采集到的同步写请求write采用集合形式表达为wq={writet,write2t,…,writent};

异步写请求队列(103)用于归类写i/o请求单元(22)从数据处理系统中的批量写负载(21)请求得到的多个异步写请求asynchronous_write,则有,在所有观测周期ot={0,t,2t,…,(n-1)t,nt}里采集到的异步写请求asynchronous_write采用集合形式表达为

优先级设置单元(20)用于对队列分配单元(10)中的多个请求队列进行优先级的设置;

队列延迟时间对比单元(30)先进行读请求的时间比对,然后进行同步写请求的时间比对,进而是异步写请求的时间比对,最后将比对后的各自服务质量输出给队列深度调节单元(40);队列延迟时间对比单元(30)输出的服务质量有

队列深度调节单元(40)在观测时间集ot={0,t,2t,…,(n-1)t,nt}中同一个观测周期进行循环调节;

步骤a,在观测周期t时刻里,队列深度调节单元(40)接收队列延迟时间对比单元(30)输出的服务质量然后执行步骤b;

步骤b,对的取值进行判断,若则执行步骤c;若则执行步骤d;

步骤c,将读队列深度调整为将同步写队列深度调整为将异步写队列深度调整为然后输出至i/o软件队列50;

步骤d,将读队列深度保持为然后执行步骤e;

步骤e,对的取值进行判断,若则执行步骤f;若则执行步骤g;

步骤f,将同步写队列深度调整为然后执行步骤h;

步骤g,将同步写队列深度保持为然后执行步骤h;

步骤h,对的取值进行判断,若则执行步骤i;若则执行步骤j;

步骤i,将异步写队列深度调整为输出至i/o软件队列50;

步骤j,将异步写队列深度保持为输出至i/o软件队列50;

i/o软件队列(50),经队列深度调节单元(40)调整后的rq、wq和awq中的每个请求根据自身的优先级信息进入到对应的i/o软件队列(50)中,其中rq进入real-time优先级的软件队列,wq和awq进入idle优先级的软件队列;

i/o硬件队列(60),将i/o软件队列(50)中的优先级与i/o硬件队列(60)的优先级进行映射,则real-time优先级的软件队列会和urgent优先级的硬件队列对接,则rq队列中的i/o请求最终会进入到urgent优先级的硬件队列中;而idle优先级的软件队列会和low优先级的硬件队列对接,则wq和awq队列中的i/o请求最终会进入到low优先级的硬件队列中;

存储设备(70)通过wrr的方式扫描各硬件队列获取并处理i/o请求,则读i/o请求在urgent队列会优先被处理,写i/o则会被放缓处理,由此在硬件层面降低了写i/o对读i/o的干扰。

本发明设计了基于linux内核的通过软硬件协同支持读写性能隔离的i/o调度器的优点在于:

软件层面改进,使其在软件队列上层通过动态队列调整的方式对不同类型的i/o请求进行流量控制,并优先保证读i/o请求的完成时间。当读i/o请求的完成时间不满足阈值要求时,本发明i/o调度器会增加rq队列的深度,减小wsq队列和wq队列的深度,控制写i/o请求向软件队列的提交流量,以此在软件层面保证读i/o请求的完成时间。

硬件层面改进,在软件层进行流量控制的同时,为每个核建立4个软件队列对应4类i/o调度器中的优先级,并将其与nvme硬件队列中的4类优先级进行对应,设置读i/o请求的优先级高于写i/o请求,优先级标签会被nvmessd(硬盘)识别,优先获取并处理高优先级的读i/o请求,在硬件层面保证了读i/o请求的完成时间。软硬件方案的结合使用叠加了读写i/o的隔离效果。

与已有技术相比,本发明i/o调度器在读写i/o带宽较低时也可以体现出隔离效果

与已有技术相比,本发明i/o调度器可以直接部置在已有ssd产品中,并适用于任何支持wrr轮询方式的ssd产品。

与已有技术相比,本发明i/o调度器允许用户通过简单更改在软件层提供的配置接口来调整读写i/o请求的优先级和完成阈值,降低使用难度。

附图说明

图1是本发明通过软硬件协同支持读写性能隔离的i/o调度器的结构框图;

图2是本发明队列深度调节单元在同一观测周期里的队列深度调节流程图。

具体实施方式

下面将结合附图和实施例对本发明做进一步的详细说明。

观测周期记为t,则观测时间集ot={0,t,2t,…,(n-1)t,nt},t为第一个观测周期,2t为第二个观测周期,(n-1)t为倒数最后一个观测周期,nt为最后一个观测周期,n为观测周期的总期数。

读请求队列集记为rq,在所有观测周期里采集到的读请求read采用集合形式表达为rq={readt,read2t,…,readnt};所述读请求队列rq的i/o延迟时间集合记为,读请求-延迟时间集

readt表示在0至t时间段出现的第一组读请求,所述readt的i/o平均延迟时间记为设置在0至t时间段里所述readt的服务质量记为所述readt的队列深度,记为第一组读队列深度

read2t表示在t至2t时间段出现的第二组读请求,所述read2t的i/o延迟时间记为设置在t至2t时间段里所述read2t的服务质量记为所述read2t的队列深度,记为第二组读队列深度

readnt表示在(n-1)t至nt时间段出现的最后一组读请求,所述readnt的i/o延迟时间记为设置在(n-1)t至nt时间段里所述readnt的服务质量记为所述readnt的队列深度,记为最后组读队列深度

同步写请求队列集记为wq,在所有观测周期里采集到的同步写请求write采用集合形式表达为wq={writet,write2t,…,writent};所述同步写请求队列wq的i/o延迟时间集合记为,同步写请求-延迟时间集

writet表示在0至t时间段出现的第一组同步写请求,所述writet的i/o延迟时间记为设置在0至t时间段里所述writet的服务质量记为所述writet的队列深度,记为第一组同步写队列深度

write2t表示在t至2t时间段出现的第二组同步写请求;所述write2t的i/o延迟时间记为设置在t至2t时间段里所述write2t的服务质量记为所述write2t的队列深度,记为第二组同步写队列深度

writent表示在(n-1)t至nt时间段出现的最后一组同步写请求,所述writent的i/o延迟时间记为设置在(n-1)t至nt时间段里所述writent的服务质量记为所述writent的队列深度,记为最后组同步写队列深度

异步写请求队列集记为awq,在所有观测周期里采集到的异步写请求asynchronous_write采用集合形式表达为:

所述异步写请求队列awq的i/o延迟时间集合记为,异步写请求-延迟时间集:

asynchronous_writet表示在0至t时间段出现的第一组异步写请求,所述asynchronous_writet的i/o延迟时间记为设置在0至t时间段里所述asynchronous_writet的服务质量记为所述asynchronous_writet的队列深度,记为第一组异步写队列深度

asynchronous_write2t表示在t至2t时间段出现的第二组异步写请求,所述asynchronous_write2t的i/o延迟时间记为设置在t至2t时间段里所述asynchronous_write2t的服务质量记为所述asynchronous_write2t的队列深度,记为第二组异步写队列深度

asynchronous_writent表示在(n-1)t至nt时间段出现的最后一组异步写请求,所述asynchronous_writent的i/o延迟时间记为设置在(n-1)t至nt时间段里所述asynchronous_writent的服务质量记为所述asynchronous_writent的队列深度,记为最后组异步写队列深度

在本发明中,i/o延迟时间是指一个i/o请求从提交进入软件队列排队,直到存储设备完成i/o请求返回至完成队列,此过程需要经历一段时间,将此等待时间称为i/o延迟时间。

参见图1所示,本发明设计了一种基于linux内核的通过软硬件协同支持读写性能隔离的i/o调度器,该i/o调度器包括有队列分配单元10、优先级设置单元20、队列延迟时间对比单元30、队列深度调节单元40;在本发明中,数据处理系统中的在线读负载11和数据处理系统中的批量写负载21为i/o请求中的两个进程。数据处理系统中的在线读负载11经读i/o请求单元12来获得读请求队列集记为rq={readt,read2t,…,readnt};数据处理系统中的批量写负载21经写i/o请求单元22来获得同步写请求队列集wq={writet,write2t,…,writent}和异步写请求队列集:

在本发明中,是在基于linux内核的现有i/o调度器中增加了四个单元,即队列分配单元10、优先级设置单元20、队列延迟时间对比单元30和队列深度调节单元40。

队列分配单元10

在本发明中,队列分配单元10中存在有队列包括有读请求队列101、同步写请求队列102和异步写请求队列103。

读请求队列101用于归类经读i/o请求单元12从数据处理系统中的在线读负载11请求得到的多个读请求read,则有,在所有观测周期里采集到的读请求read采用集合形式表达为rq={readt,read2t,…,readnt}。

同步写请求队列102用于归类经写i/o请求单元22从数据处理系统中的批量写负载21请求得到的多个同步写请求write,则有,在所有观测周期里采集到的同步写请求write采用集合形式表达为wq={writet,write2t,…,writent}。

异步写请求队列103用于归类写i/o请求单元22从数据处理系统中的批量写负载21请求得到的多个异步写请求asynchronous_write,则有,在所有观测周期里采集到的异步写请求asynchronous_write采用集合形式表达为:

在本发明中,队列分配单元10用于将接收到的读请求、同步写请求和异步写请求进行分配到不同的队列中去。

优先级设置单元20

在本发明中,优先级设置单元20用于对队列分配单元10中的多个请求队列进行优先级的设置。一般地,读请求队列集rq的优先级高于同步写请求队列集wq和异步写请求队列集awq的优先级。

在本发明中,对读请求队列集rq、同步写请求队列集wq和异步写请求队列集awq的优先级进行设置是为了降低优先级低的磁盘操作对优先级高的磁盘操作性能上造成的干扰。

一个进程一般存在有4类i/o调度优先级,分别是real-time(最高优先级)、best-effort(高优先级)、none(中优先级)和idle(低优先级)。

idle:空闲磁盘调度,在当前系统没有其他进程需要进行磁盘读写操作时,本进程才能进行磁盘读写操作。在本发明中,将其定义为低优先级。

real-time:实时调度,立即访问磁盘,不管系统中其他进程是否有磁盘读写。在本发明中,将其定义为最高优先级。

best-effort:可以指定优先级参数(范围是0~7,数值越小,优先级越高)。在本发明中,将其定义为高优先级。

none:不属于idle、real-time或best-effort优先级时,且需要进行磁盘读写操作的。在本发明中,将其定义为中优先级。

队列延迟时间对比单元30

在本发明中,队列延迟时间对比单元30先进行读请求的时间比对,然后进行同步写请求的时间比对,进而是异步写请求的时间比对,最后将比对后的各自服务质量输出给队列深度调节单元40。

在本发明中,设置了读请求队列集rq的完成时间,记为读请求阈值时间

在本发明中,设置了同步写请求队列集wq的完成时间,记为同步写请求阈值时间

在本发明中,设置了异步写请求队列集awq的完成时间,记为异步写请求阈值时间

队列延迟时间对比单元30第一方面进行读请求的时间比对;即:

设置为1;若设置为的比值,即然后将输出至队列深度调节单元40;

设置为1;若设置为的比值,即然后将输出至队列深度调节单元40;

设置为1;若设置为的比值,即然后将输出至队列深度调节单元40。

队列延迟时间对比单元30第二方面进行同步写请求的时间比对;即:

设置为1;若设置为的比值,即然后将输出至队列深度调节单元40;

设置为1;若设置为的比值,即然后将输出至队列深度调节单元40;

设置为1;若设置为的比值,即然后将输出至队列深度调节单元40。

队列延迟时间对比单元30第三方面进行异步写请求的时间比对;即:

设置为1;若设置为的比值,即然后将输出至队列深度调节单元40;

设置为1;若设置为的比值,即然后将输出至队列深度调节单元40;

设置为1;若设置为的比值,即然后将输出至队列深度调节单元40。

队列深度调节单元40

在本发明中,对于队列深度调节单元40的调节是以rq的延迟不满足阈值要求时,rq、wq和awq的深度就根据rq的服务质量来变化的;当rq的延迟满足阈值要求时,则wq和awq的深度可以根据各自的服务质量来变化。

在本发明中,调度器根据每个类型i/o的完成时间动态调整队列深度,以优先保证读i/o请求的读请求阈值时间当rq队列受到wq队列干扰时,本发明的调度器检测到同步写请求阈值时间的增加,则通过动态增加所述rq队列的数目深度,减少所述wq队列和所述awq队列的数目深度,以达到控制写i/o请求22的提交流量,实现的时间恢复至读请求阈值时间以内。

参见图2所示,本发明的队列深度调节单元40在同一观测周期里的队列深度调节,包括有下列步骤:

队列深度调节单元40在观测周期t的处理为:

步骤a,在观测周期t时刻里,队列深度调节单元40接收队列延迟时间对比单元30输出的服务质量然后执行步骤b;

步骤b,对的取值进行判断,若则执行步骤c;若则执行步骤d;

步骤c,将读队列深度调整为将同步写队列深度调整为将异步写队列深度调整为然后输出至i/o软件队列50;

为读请求队列集rq的初始读队列深度;

为同步写请求队列wq的初始读队列深度;

为异步写请求队列awq的初始读队列深度;

步骤d,将读队列深度保持为然后执行步骤e;

步骤e,对的取值进行判断,若则执行步骤f;若则执行步骤g;

步骤f,将同步写队列深度调整为然后执行步骤h;

步骤g,将同步写队列深度保持为然后执行步骤h;

步骤h,对的取值进行判断,若则执行步骤i;若则执行步骤j;

步骤i,将异步写队列深度调整为输出至i/o软件队列50;

步骤j,将异步写队列深度保持为输出至i/o软件队列50。

在本发明中,队列深度调节单元40在观测时间集ot={0,t,2t,…,(n-1)t,nt}中的其余观测周期与观测周期t是相同的深度调节,即队列深度调节以一个观测周期进行循环调节。下面分别列出第二个观测周期2t和最后一个观测周期nt的队列深度调节。

队列深度调节单元40在观测周期2t的处理为:

步骤1,在观测周期2t时刻里,队列深度调节单元40接收队列延迟时间对比单元30输出的服务质量然后执行步骤2;

步骤2,对的取值进行判断,若则执行步骤3;若则执行步骤4;

步骤3,将读队列深度调整为将同步写队列深度调整为将异步写队列深度调整为然后输出至i/o软件队列50;

步骤4,将读队列深度保持为然后执行步骤5;

步骤5,对的取值进行判断,若则执行步骤6;若则执行步骤7;

步骤6,将同步写队列深度调整为然后执行步骤8;

步骤7,将同步写队列深度保持为然后执行步骤8;

步骤8,对的取值进行判断,若则执行步骤9;若则执行步骤10;

步骤9,将异步写队列深度调整为输出至i/o软件队列50;

步骤10,将异步写队列深度保持为输出至i/o软件队列50。

队列深度调节单元40在观测周期nt的处理为:

步骤a,在观测周期nt时刻里,队列深度调节单元40接收队列延迟时间对比单元30输出的服务质量然后执行步骤b;

步骤b,对的取值进行判断,若则执行步骤c;若则执行步骤d;

步骤c,将读队列深度调整为将同步写队列深度调整为将异步写队列深度调整为然后输出至i/o软件队列50;

步骤d,将读队列深度保持为然后执行步骤e;

步骤e,对的取值进行判断,若则执行步骤f;若则执行步骤g;

步骤f,将同步写队列深度调整为然后执行步骤h;

步骤g,将同步写队列深度保持为然后执行步骤h;

步骤h,对的取值进行判断,若则执行步骤i;若则执行步骤j;

步骤i,将异步写队列深度调整为输出至i/o软件队列50;

步骤j,将异步写队列深度保持为输出至i/o软件队列50。

i/o软件队列50:

在本发明中,经队列深度调节单元40调整后的rq、wq和awq中的每个请求根据自身的优先级信息进入到对应的i/o软件队列50中,其中rq进入real-time优先级的软件队列,wq和awq进入idle优先级的软件队列。

i/o硬件队列60:

将i/o软件队列50中的优先级与i/o硬件队列60的优先级进行映射,则real-time优先级的软件队列会和urgent优先级的硬件队列对接,则rq队列中的i/o请求最终会进入到urgent优先级的硬件队列中;而idle优先级的软件队列会和low优先级的硬件队列对接,则wq和awq队列中的i/o请求最终会进入到low优先级的硬件队列中。

存储设备70:

存储设备70通过wrr的方式扫描各硬件队列获取并处理i/o请求,则读i/o请求在urgent队列会优先被处理,写i/o则会被放缓处理,由此在硬件层面降低了写i/o对读i/o的干扰。

实施例1:

本发明是一种读写i/o性能隔离技术,所要解决的是如何降低读写应用混部造成的i/o性能干扰。由于读i/o通常产生于数据处理系统中的在线读负载,使得i/o调度器需要保证此类负载的平均延迟和尾延迟指标。

经过大量实际观测,在线读负载的i/o行为可以简化为平均i/o块大小为4kb,带宽为100mb/s的读操作,批量写负载的i/o行为可以简化为平均i/o块大小为128kb,带宽为300mb/s的写操作。取观测周期t=100ms,观测周期总数n=1200,读请求阈值时间同步写请求阈值时间异步写请求阈值时间

当读和同步写i/o混部时,读i/o的平均延迟99%分位尾延迟和99.9%分位尾延迟,分别为403μs、3312μs和4704μs,而应用本发明设计的i/o调度器方案后,则分别下降为257μs、2128μs和2544μs,即每个性能指标分别提升36.2%、35.7%和45.9%。

当读和异步写i/o混部时,读i/o的平均延迟99%分位尾延迟和99.9%分位尾延迟,分别为266μs、4512μs和8512μs,而应用本发明设计的i/o调度器方案后,则分别下降为141μs、1912μs和2768μs,即每个性能指标分别提升47.0%、57.6%和67.5%。

综合来看,通过应用本发明设计的i/o调度器方案后,在读写i/o混部的情况下,保持写i/o性能不变的同时,可以将读i/o的性能提升48.3%。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1