CN106383742A - 一种基于linux的IO调度方法 - Google Patents
一种基于linux的IO调度方法 Download PDFInfo
- Publication number
- CN106383742A CN106383742A CN201610849241.2A CN201610849241A CN106383742A CN 106383742 A CN106383742 A CN 106383742A CN 201610849241 A CN201610849241 A CN 201610849241A CN 106383742 A CN106383742 A CN 106383742A
- Authority
- CN
- China
- Prior art keywords
- read
- write
- write operation
- memory block
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种基于linux系统的IO调度方法,包括接收到读写命令后,按照预设规则从linux系统预设的N个相同的IO进程中选择一个IO进程;其中,每个IO进程预先分配有一块独立内存块;N不小于2;IO进程从预设的线程池中获取多个处理线程;多个处理线程分别依据IO进程对应的独立内存块进行相应的读写操作。本发明能够避免不同IO进程之间由于需要同时获取同一缓存页内的资源而发生的阻塞情况,提高读写操作的速度且效率高。
Description
技术领域
本发明涉及软件存储技术领域,特别是涉及一种基于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进程对应的所述独立内存块进行相应的读写操作的过程具体为:
调用虚拟文件系统读写接口或实际文件系统读写接口;
从调用的读写接口中获取读写操作参数;
根据所述读写操作参数确定需要读取或写入的数据情况,并进行缓存页映射操作;
在通用块层依据映射后写入或读取得到的数据创建block io;
在io调度层对所述block io进行排序操作并将排序后的block io发送至驱动层;
所述驱动层依据所述排序后的block io依次将相应的数据写入存储设备或从所述存储设备中读取相应的数据存储至所述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:在通用块层依据映射后写入或读取得到的数据创建block io;
步骤s205:在io调度层对block io进行排序操作并将排序后的block io发送至驱动层;
步骤s206:驱动层依据排序后的block io依次将相应的数据写入存储设备或从存储设备中读取相应的数据存储至IO进程对应的独立内存块内的指定缓存页内。
可以理解的是,每个IO进程会生成若干个block io,io调度层对这些blockio进行排序来减小访问磁盘介质的操作,驱动层依据IO进程的数目创建相同个数的队列,每个队列放置有一个IO进程的若干个排序后的block io,驱动层根据这些block io进行数据读写操作;其中,在进行写入操作时,需要首先将该数据从缓存页中读取出来,再写入存储设备;在进行读取操作时,需要将数据从存储设备中读取出来后写入指定缓存页中。
其中,读写操作参数包括待读取或写入的数据对应于存储设备中的地址;根据读写操作参数确定需要读取或写入的数据情况,并进行缓存页映射操作的过程具体为:
根据读写操作参数判断存储设备中待读取或写入的区域是否与当前独立内存块内的缓存页间具有映射关系,若是,直接对具有映射关系的缓存页进行读取或写入操作;
否则,从独立内存块中选择空白页作为缓存页,并建立缓存页与述存储设备中待读取或写入的区域之间的映射关系,对缓存页进行读取或写入操作。
可以理解的是,若缓存页与待读写的区域具有映射关系的话,直接在缓存页上写入或读取该缓存页的内容即可。
作为优选地,N具体为3或5或7。当然,本发明不限定N的具体个数。
本发明提供了一种基于linux系统的IO调度方法,linux系统中预设有N个相同的IO进程用于处理接收到的读写命令,且每个IO进程预先分配有一块独立内存块;N不小于2。每个IO进程依据自身分配的独立内存块进行相应的读写操作,各个IO进程之间不存在锁机制的问题,避免了不同IO进程对同一内存同时访问而发生的阻塞情况,各个IO进程能够一直运行而不需要等待,提高了读写操作的速度,效率高。
需要说明的是,在本说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (6)
1.一种基于linux系统的IO调度方法,其特征在于,包括:
接收到读写命令后,按照预设规则从所述linux系统预设的N个相同的IO进程中选择一个IO进程;其中,每个所述IO进程预先分配有一块独立内存块;N不小于2;
所述IO进程从预设的线程池中获取多个处理线程;
多个所述处理线程分别依据所述IO进程对应的所述独立内存块进行相应的读写操作。
2.根据权利要求1所述的方法,其特征在于,每个所述IO进程预先与一个CPU核绑定,所述IO进程由与其绑定的所述CPU核执行。
3.根据权利要求2所述的方法,其特征在于,多个所述处理线程分别依据所述IO进程对应的所述独立内存块进行相应的读写操作的过程具体为:
调用虚拟文件系统读写接口或实际文件系统读写接口;
从调用的读写接口中获取读写操作参数;
根据所述读写操作参数确定需要读取或写入的数据情况,并进行缓存页映射操作;
在通用块层依据映射后写入或读取得到的数据创建block io;
在io调度层对所述block io进行排序操作并将排序后的block io发送至驱动层;
所述驱动层依据所述排序后的block io依次将相应的数据写入存储设备或从所述存储设备中读取相应的数据存储至所述IO进程对应的所述独立内存块内的指定缓存页内。
4.根据权利要求3所述的方法,其特征在于,所述读写操作参数包括待读取或写入的数据对应于所述存储设备中的地址;所述根据所述读写操作参数确定需要读取或写入的数据情况,并进行缓存页映射操作的过程具体为:
根据所述读写操作参数判断所述存储设备中待读取或写入的区域是否与当前所述独立内存块内的缓存页间具有映射关系,若是,直接对具有映射关系的缓存页进行读取或写入操作;
否则,从所述独立内存块中选择空白页作为缓存页,并建立所述缓存页与述存储设备中待读取或写入的区域之间的映射关系,对所述缓存页进行读取或写入操作。
5.根据权利要求2所述的方法,其特征在于,所述预设规则为平均分配规则。
6.根据权利要求2所述的方法,其特征在于,所述N具体为3或5或7。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610849241.2A CN106383742B (zh) | 2016-09-23 | 2016-09-23 | 一种基于linux的IO调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610849241.2A CN106383742B (zh) | 2016-09-23 | 2016-09-23 | 一种基于linux的IO调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106383742A true CN106383742A (zh) | 2017-02-08 |
CN106383742B CN106383742B (zh) | 2019-10-18 |
Family
ID=57935911
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610849241.2A Active CN106383742B (zh) | 2016-09-23 | 2016-09-23 | 一种基于linux的IO调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106383742B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107153539A (zh) * | 2017-04-18 | 2017-09-12 | 北京思特奇信息技术股份有限公司 | 一种文件接口系统 |
CN107369088A (zh) * | 2017-07-19 | 2017-11-21 | 中国银行股份有限公司 | 帐务交易的处理方法和装置 |
CN109101194A (zh) * | 2018-07-26 | 2018-12-28 | 郑州云海信息技术有限公司 | 一种刷写性能优化方法和存储系统 |
CN109558090A (zh) * | 2018-12-04 | 2019-04-02 | 郑州云海信息技术有限公司 | 一种io流资源申请方法、系统、设备及计算机存储介质 |
CN109597583A (zh) * | 2018-12-04 | 2019-04-09 | 郑州云海信息技术有限公司 | 一种io流处理方法、系统、设备及计算机可读存储介质 |
CN109669635A (zh) * | 2018-12-19 | 2019-04-23 | 深圳忆联信息系统有限公司 | 用于固态存储主控芯片的命令lba重合检测方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101702138A (zh) * | 2009-10-30 | 2010-05-05 | 深圳市新飞扬数码技术有限公司 | 一种内存管理方法、系统及服务器 |
CN104239149A (zh) * | 2012-08-31 | 2014-12-24 | 南京工业职业技术学院 | 一种服务端多线程并行数据处理方法及负载均衡方法 |
CN104462008A (zh) * | 2014-12-05 | 2015-03-25 | 三星半导体(中国)研究开发有限公司 | 共享物理内存的多处理器通信系统及其通信方法 |
-
2016
- 2016-09-23 CN CN201610849241.2A patent/CN106383742B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101702138A (zh) * | 2009-10-30 | 2010-05-05 | 深圳市新飞扬数码技术有限公司 | 一种内存管理方法、系统及服务器 |
CN104239149A (zh) * | 2012-08-31 | 2014-12-24 | 南京工业职业技术学院 | 一种服务端多线程并行数据处理方法及负载均衡方法 |
CN104462008A (zh) * | 2014-12-05 | 2015-03-25 | 三星半导体(中国)研究开发有限公司 | 共享物理内存的多处理器通信系统及其通信方法 |
Non-Patent Citations (1)
Title |
---|
STRUGGLING-SNAIL: ""块设备的处理及通用块层"", 《CSDN博客 HTTPS://BLOG.CSDN.NET/WANGYULING1234567890/ARTICLE/DETAILS/19087785》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107153539A (zh) * | 2017-04-18 | 2017-09-12 | 北京思特奇信息技术股份有限公司 | 一种文件接口系统 |
CN107153539B (zh) * | 2017-04-18 | 2021-03-30 | 北京思特奇信息技术股份有限公司 | 一种文件接口系统 |
CN107369088A (zh) * | 2017-07-19 | 2017-11-21 | 中国银行股份有限公司 | 帐务交易的处理方法和装置 |
CN109101194A (zh) * | 2018-07-26 | 2018-12-28 | 郑州云海信息技术有限公司 | 一种刷写性能优化方法和存储系统 |
CN109558090A (zh) * | 2018-12-04 | 2019-04-02 | 郑州云海信息技术有限公司 | 一种io流资源申请方法、系统、设备及计算机存储介质 |
CN109597583A (zh) * | 2018-12-04 | 2019-04-09 | 郑州云海信息技术有限公司 | 一种io流处理方法、系统、设备及计算机可读存储介质 |
CN109669635A (zh) * | 2018-12-19 | 2019-04-23 | 深圳忆联信息系统有限公司 | 用于固态存储主控芯片的命令lba重合检测方法及装置 |
CN109669635B (zh) * | 2018-12-19 | 2022-01-21 | 深圳忆联信息系统有限公司 | 用于固态存储主控芯片的命令lba重合检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106383742B (zh) | 2019-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106383742A (zh) | 一种基于linux的IO调度方法 | |
CN103970520B (zh) | MapReduce架构中的资源管理方法、装置和架构系统 | |
JP5439581B2 (ja) | ストレージシステム、ストレージ装置、ストレージシステムの記憶領域の最適化方法 | |
CN102298561B (zh) | 一种对存储设备进行多通道数据处理的方法、系统和装置 | |
CN104090847B (zh) | 一种固态存储设备的地址分配方法 | |
EP2927779B1 (en) | Disk writing method for disk arrays and disk writing device for disk arrays | |
CN106569891B (zh) | 一种存储系统中任务调度执行的方法和装置 | |
CN107430549A (zh) | 基于联合的存储器管理 | |
CN103809917A (zh) | 用于存储器的工作调度方法及其存储系统 | |
EP3537281B1 (en) | Storage controller and io request processing method | |
CN105408875B (zh) | 在存储器接口上的分布式过程执行和文件系统 | |
CN109656833A (zh) | 数据储存装置的非挥发式存储器的命名空间规划 | |
CN107092445A (zh) | 一种多通道ssd固态盘io调度方法及装置 | |
CN108733324B (zh) | 一种固态硬盘的数据读写方法、装置、设备及存储介质 | |
CN106681660A (zh) | Io调度方法及io调度装置 | |
CN109308269A (zh) | 一种内存管理方法及装置 | |
CN104317734A (zh) | 一种适用于slab的内存分配方法及装置 | |
CN103218305A (zh) | 存储空间的分配方法 | |
CN109697017A (zh) | 数据储存装置以及非挥发式存储器操作方法 | |
WO2019136967A1 (zh) | 一种应用在存储系统中的任务调度优化方法 | |
CN106502581A (zh) | 闪存控制器、闪存控制方法和固态硬盘 | |
CN109766056A (zh) | 一种存储阵列控制器io队列调度方法与装置 | |
CN109656834A (zh) | 涉及命名空间规划的数据管理方法以及数据储存系统 | |
CN107220069A (zh) | 一种针对非易失性内存的Shuffle方法 | |
CN107870779A (zh) | 调度方法与装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |