一种基于linux的IO调度方法技术

技术编号:14595836 阅读:68 留言:0更新日期:2017-02-09 00:26
本发明专利技术公开了一种基于linux系统的IO调度方法,包括接收到读写命令后,按照预设规则从linux系统预设的N个相同的IO进程中选择一个IO进程;其中,每个IO进程预先分配有一块独立内存块;N不小于2;IO进程从预设的线程池中获取多个处理线程;多个处理线程分别依据IO进程对应的独立内存块进行相应的读写操作。本发明专利技术能够避免不同IO进程之间由于需要同时获取同一缓存页内的资源而发生的阻塞情况,提高读写操作的速度且效率高。

A IO scheduling method based on Linux

The invention discloses a IO scheduling method based on Linux system, including the received read and write commands, in accordance with the selection process of a IO N as a IO process from the Linux system default default rules; among them, each IO process has a separate pre allocated memory blocks; not less than 2 N; IO process to obtain a plurality of processing threads from the default thread pool; a plurality of processing threads respectively according to independent memory block IO process corresponding to the corresponding read and write operations. The invention can avoid the blocking situation between different IO processes due to the need to obtain resources in the same cache page simultaneously, and improve the speed of reading and writing operation and high efficiency.

【技术实现步骤摘要】

本专利技术涉及软件存储
,特别是涉及一种基于linux的IO调度方法
技术介绍
IO调度是一种常见的数据应用操作,IO调度的流程由CPU来实现。在linux操作系统下,IO调度的流程为:用户层提供文件读写的接口,在经由虚拟文件系统接口调用、实际文件系统接口调用、缓存页映射操作、通用块层创建bio、io调度层进行排序等操作后,由存储设备的驱动侧来把数据写入存储设备或将存储设备内的数据进行读取。目前的IO调度中可能存在有多个IO进程,这些IO进程排成队列由同一个CPU核进行处理,该CPU核为这些IO进程分配了一块内存进行IO操作,当需要获取内存时,正常情况下内存会先分配若干个页给进程。但是由于这块内存是整体的,该内存设置有锁机制来避免不同进程对内存的同时访问,故会导致同一时间只能有一个IO进程使用该缓存页,而其他IO进程处于等待状态,效率低。因此,如何提供一种能够提高IO处理的效率的基于linux的IO调度方法是本领域技术人员目前需要解决的问题。
技术实现思路
本专利技术的目的是提供一种基于linux系统的IO调度方法,能够避免不同IO进程之间由于需要同时获取同一缓存页内的资源而发生的阻塞情况,提高读写操作的速度且效率高。为解决上述技术问题,本专利技术提供了一种基于linux系统的IO调度方法,包括:接收到读写命令后,按照预设规则从所述linux系统预设的N个相同的IO进程中选择一个IO进程;其中,每个所述IO进程预先分配有一块独立内存块;N不小于2;所述IO进程从预设的线程池中获取多个处理线程;多个所述处理线程分别依据所述IO进程对应的所述独立内存块进行相应的读写操作。优选地,每个所述IO进程预先与一个CPU核绑定,所述IO进程由与其绑定的所述CPU核执行。优选地,多个所述处理线程分别依据所述IO进程对应的所述独立内存块进行相应的读写操作的过程具体为:调用虚拟文件系统读写接口或实际文件系统读写接口;从调用的读写接口中获取读写操作参数;根据所述读写操作参数确定需要读取或写入的数据情况,并进行缓存页映射操作;在通用块层依据映射后写入或读取得到的数据创建blockio;在io调度层对所述blockio进行排序操作并将排序后的blockio发送至驱动层;所述驱动层依据所述排序后的blockio依次将相应的数据写入存储设备或从所述存储设备中读取相应的数据存储至所述IO进程对应的所述独立内存块内的指定缓存页内。优选地,所述读写操作参数包括待读取或写入的数据对应于所述存储设备中的地址;所述根据所述读写操作参数确定需要读取或写入的数据情况,并进行缓存页映射操作的过程具体为:根据所述读写操作参数判断所述存储设备中待读取或写入的区域是否与当前所述独立内存块内的缓存页间具有映射关系,若是,直接对具有映射关系的缓存页进行读取或写入操作;否则,从所述独立内存块中选择空白页作为缓存页,并建立所述缓存页与述存储设备中待读取或写入的区域之间的映射关系,对所述缓存页进行读取或写入操作。优选地,所述预设规则为平均分配规则。优选地,所述N具体为3或5或7。本专利技术提供了一种基于linux系统的IO调度方法,linux系统中预设有N个相同的IO进程用于处理接收到的读写命令,且每个IO进程预先分配有一块独立内存块;N不小于2。每个IO进程依据自身分配的独立内存块进行相应的读写操作,各个IO进程之间不存在锁机制的问题,避免了不同IO进程对同一内存同时访问而发生的阻塞情况,各个IO进程能够一直运行而不需要等待,提高了读写操作的速度,效率高。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术提供的一种基于linux系统的IO调度方法的过程的流程图。具体实施方式本专利技术的核心是提供一种基于linux系统的IO调度方法,能够避免不同IO进程之间由于需要同时获取同一缓存页内的资源而发生的阻塞情况,提高读写操作的速度且效率高。为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术提供了一种基于linux系统的IO调度方法,参见图1所示,图1为本专利技术提供的一种基于linux系统的IO调度方法的过程的流程图。该方法包括:步骤s101:接收到读写命令后,按照预设规则从linux系统预设的N个相同的IO进程中选择一个IO进程;其中,每个IO进程预先分配有一块独立内存块;N不小于2;其中,这里的预设规则为平均分配规则,具体过程为每当接收到读写命令后,按照文件描述符依据平均分配进程资源的原则选择合适的IO进程。步骤s102:IO进程从预设的线程池中获取多个处理线程;步骤s103:多个处理线程分别依据IO进程对应的独立内存块进行相应的读写操作。可以理解的是,线程池能够避免当存在多个io读写时进程数不够用的情况,例如系统分配了4个进程,若某一时刻有5条读写命令,而4个进程不够用,但第5个读写命令不能不执行,此时由进程池创建多个线程,由这些线程来处理第5个读写命令。另外线程池还拥有分配资源简单快捷的优点。作为优选地,每个IO进程预先与一个CPU核绑定,IO进程由与其绑定的CPU核执行。可以理解的是,当连接存储系统的多个端口对存储系统进行读写操作时,会为每个端口提供一定的CPU资源,用于IO调度过程中的内存换入换出、压栈出栈、CPU寄存器的保存等,现有技术中这些CPU资源均由同一个CPU核提供,会导致CPU核压力较大;而本专利技术为每个IO进程均分配一个CPU核,大大减少了每个CPU核需要提供的资源,减小了CPU核的压力。其中,多个处理线程分别依据IO进程对应的独立内存块进行相应的读写操作的过程具体为:步骤s201:调用虚拟文件系统读写接口或实际文件系统读写接口;步骤s202:从调用的读写接口中获取读写操作参数;步骤s203:根据读写操作参数确定需要读取或写入的数据情况,并进行缓存页映射操作;步骤s204:在通用块层依据映射后写入或读取得到的数据创建blockio;步骤s205:在io调度层对blockio进行排序操作并将排序后的blockio发送至驱动层;步骤s206:驱动层依据排序后的blockio依次将相应的数据写入存储设备或从存储设备中读取相应的数据存储至IO进程对应的独立内存块内的指定缓存页内。可以理解的是,每个IO进程会生成若干个blockio,io调度层对这些blockio进行排序来减小访问磁盘介质的操作,驱动层依据IO进程的数目创建相同个数的队列,每个队列放置有一个IO进程的若干个排序后的blockio,驱动层根据这些blockio进行数据读写操作;其中,在进行写入操作时,需要首先将该数据从缓存页中读取出来,再写入存储设备;在进行读取操作时,需要将数据从存储设备中读取出来后写入指定缓存页中。其中,读写操本文档来自技高网...

【技术保护点】
一种基于linux系统的IO调度方法,其特征在于,包括:接收到读写命令后,按照预设规则从所述linux系统预设的N个相同的IO进程中选择一个IO进程;其中,每个所述IO进程预先分配有一块独立内存块;N不小于2;所述IO进程从预设的线程池中获取多个处理线程;多个所述处理线程分别依据所述IO进程对应的所述独立内存块进行相应的读写操作。

【技术特征摘要】
1.一种基于linux系统的IO调度方法,其特征在于,包括:接收到读写命令后,按照预设规则从所述linux系统预设的N个相同的IO进程中选择一个IO进程;其中,每个所述IO进程预先分配有一块独立内存块;N不小于2;所述IO进程从预设的线程池中获取多个处理线程;多个所述处理线程分别依据所述IO进程对应的所述独立内存块进行相应的读写操作。2.根据权利要求1所述的方法,其特征在于,每个所述IO进程预先与一个CPU核绑定,所述IO进程由与其绑定的所述CPU核执行。3.根据权利要求2所述的方法,其特征在于,多个所述处理线程分别依据所述IO进程对应的所述独立内存块进行相应的读写操作的过程具体为:调用虚拟文件系统读写接口或实际文件系统读写接口;从调用的读写接口中获取读写操作参数;根据所述读写操作参数确定需要读取或写入的数据情况,并进行缓存页映射操作;在通用块层依据映射后写入或读取得到的数据创建blockio;在io调度层对所述blockio...

【专利技术属性】
技术研发人员:牛佳宁
申请(专利权)人:郑州云海信息技术有限公司
类型:发明
国别省市:河南;41

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1