CN116880774A - 一种Linux系统下的脏页回写方法 - Google Patents
一种Linux系统下的脏页回写方法 Download PDFInfo
- Publication number
- CN116880774A CN116880774A CN202311141691.2A CN202311141691A CN116880774A CN 116880774 A CN116880774 A CN 116880774A CN 202311141691 A CN202311141691 A CN 202311141691A CN 116880774 A CN116880774 A CN 116880774A
- Authority
- CN
- China
- Prior art keywords
- disk
- dirty
- dirty page
- dropped
- write
- 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
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000012544 monitoring process Methods 0.000 claims abstract description 33
- 230000002618 waking effect Effects 0.000 claims description 3
- 230000015654 memory Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 8
- 230000001680 brushing effect Effects 0.000 description 6
- 238000011084 recovery Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 3
- 230000000737 periodic effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种Linux系统下的脏页回写方法,包括以下步骤:S1:构建监测模块,监测模块用于对系统磁盘的繁忙程度进行监测,并且监测模块根据系统磁盘的繁忙程度是否唤醒磁盘的脏页回写线程,系统磁盘的繁忙程度根据块设备的待落盘IO数量与已落盘IO数量进行判断;S2:构建脏页回写线程,脏页回写线程用于回写系统中产生的磁盘的脏页。本发明的主要目的是提供一种Linux系统下的脏页回写方法,该方法是通过监测磁盘是否空闲来控制操作系统脏页的回写时机,即在磁盘空闲时及时进行脏页回写,降低系统脏页数据,在磁盘繁忙时则停止脏页回写,以降低对磁盘读、直写操作的干扰。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种Linux系统下的脏页回写方法。
背景技术
随着人工智能、云计算、边缘计算等新兴技术的快速发展,带来了算力需求、存储需求的爆炸式增长,然而与处理器、内存的快速发展不同,磁盘的性能提升远远落后于处理器、内存,当前计算机存储性能也主要受限于磁盘这一关键部件。
为解决这一问题,操作系统提出了脏页回写等技术,即将要写入磁盘的数据缓存在内存中,而把数据写到磁盘的实际操作延迟进行,脏页回写技术不仅仅减低了写入磁盘数据的随机性,也进一步减少了对磁盘的写操作,比如对磁盘同一位置的写入操作,只需将最后一次写操作实际写入磁盘即可。
目前通用的脏页回写技术是控制系统脏页数量,同时周期性回写系统脏页,例如以下三个中国发明专利均是采用是周期性的刷新方法:
中国发明专利“一种缓存脏页刷写方法及装置”(申请号201610041801.1)。该专利公开了一种缓存脏页刷写方法及装置,创建块设备时为每个块设备单独分配内核刷写线程,所述缓存脏页刷写方法包括:每个块设备接收到脏页刷写指令后,调用本块设备的内核刷写线程,将本设备内的脏页刷写到磁盘中。可见,在本实施例中,通过为每个块设备分配单独内核刷写线程,可以保证每个块设备的脏页都得到及时的刷写,并且可以为每个块设备指定不同的脏页刷写算法,提高系统脏页刷写的灵活性,提高脏页刷写的并发度,从而提高系统脏页刷写的性能;
中国发明专利“一种文件系统页缓存回写方法、系统、装置及存储介质”(申请号201710937909.3)。该专利公开了一种文件系统页缓存回写方法、系统、装置及存储介质,该方法包括:获取文件系统打开的文件的平均缓存大小;获取当前文件的脏页数;利用所述平均缓存大小和预设的脏页比例阈值,确定脏页数量阈值;判断所述脏页数是否超过所述脏页数量阈值,如果是,则强制回写当前文件的脏页。本发明由文件系统打开的文件的平均缓存大小和预设的脏页比例阈值,确定适合当前文件使用情况的脏页数量阈值,然后判断当前文件的脏页数是否超过脏页数量阈值来确定是否对当前文件的脏页进行回写。由于每个文件进行强制回写的时间点不同,因此脏页回写任务被均匀分散到多个时间点执行,避免了文件系统整体的写性能大幅波动,进而提高了文件系统的写性能;
中国发明专利“脏页刷新方法和装置、电子设备和存储介质”(申请号202110199572.7)。该专利提供了一种脏页刷新方法和装置、电子设备和存储介质,其中,该方法包括:确定脏页链表中待刷新的目标脏页,其中,所述目标脏页是与目标磁盘中的第一数据页对应的脏页;从所述目标脏页的目标位置区域内读取第一目标数据,其中,所述目标位置区域为所述目标脏页相对所述第一数据页被修改的数据在所述目标脏页中所处的位置区域;将所述目标脏页的待刷新数据刷新到所述目标磁盘,以将所述第一数据页更新为第二数据页,其中,所述待刷新数据包括所述第一目标数据。通过本申请,解决了相关技术中通过提高刷脏页数量和频率来提高刷新脏页能力的方式存在的易引起大量I/O占用资源的问题;
然而,当脏页回写周期与系统内存回收、磁盘读、直接写等操作重叠时,会给系统带来一定的负面影响,比如当系统内存回收操作需要回收脏页时,此时必须将脏页立马写回到磁盘才能回收这个页面,如果此时还叠加其它磁盘读、直接写操作,将进一步放大内存回收性能问题。因此如何控制操作系统脏页的回写时机,是一个急需解决的问题。
发明内容
本发明的主要目的是提供一种Linux系统下的脏页回写方法,该方法是通过监测磁盘是否空闲来控制操作系统脏页的回写时机,即在磁盘空闲时及时进行脏页回写,降低系统脏页数据,在磁盘繁忙时则停止脏页回写,以降低对磁盘读、直写操作的干扰。
为了完成上述目的,本发明提供了一种Linux系统下的脏页回写方法,包括以下步骤:
S1:构建监测模块,监测模块用于对系统磁盘的繁忙程度进行监测,并且监测模块根据系统磁盘的是否繁忙决定是否唤醒磁盘的脏页回写线程,系统磁盘的繁忙程度根据块设备的待落盘IO数量与已落盘IO数量进行判断;
S2:构建脏页回写线程,脏页回写线程用于回写系统中产生的磁盘的脏页。
优选的,步骤S1具体包括以下步骤:
S11:准备监测模块所需要的数据结构并初始化;
S12:统计系统磁盘中块设备的待落盘IO数量与已落盘IO数量;
S13:根据待落盘IO数量与已落盘IO数量来判断磁盘是否繁忙并唤醒或睡眠脏页回写线程。
进一步优选的,步骤S11还包括以下步骤:
S111:构建监测模块:
在struct request_queue结构体中分别:
增加unsigned int类型变量queued_io_num表示待落盘IO数量;
增加unsigned int类型变量flight_io_num表示已落盘IO数量;
增加bool类型变量is_idle表示磁盘是否空闲;
S112:将queued_io_num、flight_io_num初始化为0,is_idle初始化为true。
更进一步优选的,在步骤S12包括以下步骤:
S121:在blk_mq_submit_bio函数中执行q->queued_io_num++,使得blk_mq_submit_bio每被调用一次,待落盘IO数量就增1,其中,本步骤的q表示的request_queue是通过bdev_get_queue获取的;
S122:在磁盘驱动派发IO回调函数queue_rq中执行q->queued_io_num--与q->flight_io_num++,使得待落盘IO数量每减少一次,同时已落盘IO数量增加1,本步骤中的q表示的request_queue是通过hctx->queue获取的;
S123:在磁盘驱动IO完成回调函数complete中执行q->flight_io_num--,使得已落盘IO数量每完成一次,已落盘IO数量减少1,本步骤中的 q表示的request_queue是通过req->q来获取的。
更进一步优选的,步骤S13包括以下步骤:
S131:如果q->queued_io_num小于q->nr_hw_queues并且q->flight_io_num等于0,则判定磁盘空闲,否则判定磁盘繁忙,其中,q->nr_hw_queues中保存的是磁盘硬队列数,在磁盘驱动初始化时确定;
S132:如果判定磁盘空闲,则设置q->is_idle为true,同时调用wake_up_process唤醒脏页回写线程,如果判定磁盘繁忙,则设置q->is_idle为false。
更进一步优选的,步骤S2包括以下步骤:
S21:准备脏页回写线程所需要的数据结构并初始化;
S22:判断监测模块是否有设置磁盘繁忙标志,如磁盘繁忙则进入睡眠,磁盘空闲则运行步骤S23;
S23:判断是否有需回写到磁盘的脏页,如没有需回写的脏页则进入睡眼,有则运行步骤S24;
S24:取出脏页回写到磁盘,然后运行步骤S22。
更进一步优选的,步骤S21包括以下步骤:
S211:在struct request_queue结构体中增加struct task_struct dp_writeback,用于创建脏页回写线程;
S212:调用kthread_create创建脏页回写线程,并赋值给q->dp_writeback,本步骤中的q表示struct request_queue。
更进一步优选的,步骤S22包括以下步骤:
S221:通过判断q->is_idle是否为false判断监测模块是否有设置磁盘繁忙标志;
S222:如果判断q->is_idle为false,则调用schedule()让出当前cpu,同时调用set_current_state(TASK_INTERRUPTIBLE)以便使得脏页回写线程处于休眠状态;否则,q->is_idle为true,运行S23。
更进一步优选的,步骤S23中,通过如下步骤判断是否有需要回写到磁盘的脏页:
S231:通过访问变量 q 的 backing_dev_info中的 wb中的 b_dirty ,获取脏页链表中的b_dirty;
S232:调用list_empty判断链表是否空,如果为空则说明没有脏页需要回到磁盘,调用schedule让出当前CPU;如果不为空则运行步骤S24。
更进一步优选的,步骤S24还包括以下步骤:
S241:调用set_current_state设置脏页回写线程处于运行状态;
S242:通过 list_entry从脏页链表b_dirty中取出一个脏页的文件inode;
S243:调用write_inode_now回写脏页到磁盘;
S244:调用list_del将回写到磁盘的脏页从脏页链表中删除;
S245:运行步骤S22。
本发明的有益效果为:
1、本发明提出一种Linux系统下的脏页回写方法,该方法针对当前周期性脏页回写带来的问题,提出通过监测磁盘的繁忙程度来控制脏页回写时机。该方法在磁盘空闲时及时进行脏页回写,而在磁盘繁忙时则停止脏页回写操作,该方法将在不影响当前系统存储性能的前题下进一步提高磁盘使用效率,磁盘空闲时及时进行脏页回写能有效降低系统脏页数量。当系统出现内存紧张需要回收内存等情况时,有利于降低此时因脏页回写操作带来的性能问题,同时因为脏页是在磁盘空闲时及时下发的,也有利于减少脏页回写操作与系统磁盘读操作、直接写操作的重叠。
2、该方法可以有效的保证在有数据业务大量需要操作磁盘时,不会和缓存回写一同抢磁盘资源。
3、该方法利用磁盘空闲时间进行缓存回写,可以加快实际内存回收,即脏页缓存在磁盘空闲时间已经与磁盘数据同步,可以直接回收,不必再强制回写内存数据到磁盘了。
附图说明
下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1为表述本发明目的的示例图;
图2为本发明的一种Linux系统下的脏页回写方法的总体框架图;
图3为本发明中的监测模块的设计实现流程图;
图4为本发明中的脏页回写线程的设计实现程流程图。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
为了更好地表述本实施例所要解决的问题,以如图1所示为例,可以看到当前的周期性脏页回写存在两个问题:
一是在t1至t2时刻进行脏页回写操作,t1至t2时刻磁盘繁忙,此时脏页回写操作会与系统中正在进行的其它磁盘操作重叠,影响系统磁盘操作性能;
二是在t4时刻结束脏页回写操作,此时磁盘空闲,完全可以继续回写系统中脏页,将系统中的脏页在磁盘空闲时及时落盘,不仅仅能让后期系统产生内存回收操作时能更快、更易回收到内存,而且也使得在后期磁盘繁忙时也只有更少的脏页需要回收,比如t5时刻。
为了解决上述技术问题,本实施例提出一种Linux系统下的脏页回写方法,如图2所示,包括以下步骤:
S1:构建监测模块,监测模块用于对系统磁盘的繁忙程度进行监测,并且监测模块根据系统磁盘的是否繁忙决定是否唤醒磁盘的脏页回写线程,系统磁盘的繁忙程度根据块设备的待落盘IO数量与已落盘IO数量进行判断;
S2:构建脏页回写线程,脏页回写线程用于回写系统中产生的磁盘的脏页,脏页回写线程的唤醒或睡眠通过监测模块来控制。
具体的,在本实施例中,如图3所示,步骤S1具体包括以下步骤:
S11:准备监测模块所需要的数据结构并初始化。
在本步骤中,还包括以下步骤:
S111:构建监测模块:
在struct request_queue结构体中分别:
增加unsigned int类型变量queued_io_num表示待落盘IO数量;
增加unsigned int类型变量flight_io_num表示已落盘IO数量;
增加bool类型变量is_idle表示磁盘是否空闲。
S112:磁盘驱动注册时,会创建struct request_queue,此时将queued_io_num、flight_io_num初始化为0,is_idle初始化为true。
S12:统计系统磁盘中块设备的待落盘IO数量与已落盘IO数量。
S121:当IO进入内核通用块层时,将待落盘IO数量加1,IO进入内核通用块层的统一接口是blk_mq_submit_bio(struct bio bio),上层应用每发送一个IO都会调用blk_mq_submit_bio(struct bio />bio)一次,因此,在blk_mq_submit_bio(struct bio />bio)函数中执行q->queued_io_num++,使得blk_mq_submit_bio()每被调用一次,待落盘IO数量就增1,其中,本步骤的q表示的request_queue是通过bdev_get_queue(bio->bi_bdev)获取的。
S122:当IO从通用块层下发到磁盘时,将待落盘IO数量减1,同时已落盘IO数量加1,通用块层派发IO到磁盘的回调函数是queue_rq(struct blk_mq_hw_ctx hctx, conststruct blk_mq_queue_data />bd),磁盘驱动会实现相应的queue_rq(struct blk_mq_hw_ctx />hctx, const struct blk_mq_queue_data />bd)来派发IO落盘,因此,在磁盘驱动派发IO回调函数queue_rq(struct blk_mq_hw_ctx />hctx, const struct blk_mq_queue_data />bd)中执行q->queued_io_num--与q->flight_io_num++,使得queue_rq()每被调用一次,则将待落盘IO数量减少一次,同时将已落盘IO数量增加1,本步骤中的q表示的request_queue是通过hctx->queue获取的。
S123:当IO从磁盘完成后,将已落盘IO数量减1,IO从磁盘完成后,通过软中断blk_done_softirq通知内核并处理,最终将调用磁盘驱动实现的回调函数complete(structrequest req)来处理,因此,在磁盘驱动IO完成回调函数complete(struct request />req)中执行q->flight_io_num--,使得complete ()每被调用一次,则将已落盘IO数量减少1,本步骤中的 q表示的request_queue是通过req->q来获取的。
S13:根据待落盘IO数量与已落盘IO数量来判断磁盘是否繁忙并唤醒或睡眠脏页回写线程。
在本步骤中,还包括以下步骤:
S131:如果q->queued_io_num小于q->nr_hw_queues并且q->flight_io_num等于0,则判定磁盘空闲,否则判定磁盘繁忙,其中,q->nr_hw_queues中保存的是磁盘硬队列数,在磁盘驱动初始化时确定。或者可以说,当已落盘IO数量为0,并且待落盘IO数量小于硬盘支持的最大硬队列数(硬队列数代表硬盘能并行处理IO的能力)时,则认定磁盘空闲。
S132:如果判定磁盘空闲,则设置q->is_idle为true,同时调用wake_up_process(q->dp_writeback)唤醒脏页回写线程,如果判定磁盘繁忙,则设置q->is_idle为false。
如图4所示,步骤S2包括以下步骤:
S21:准备脏页回写线程所需要的数据结构并初始化。
具体的,在本步骤中包括以下步骤:
S211:在struct request_queue结构体中增加struct task_struct dp_writeback,用于创建脏页回写线程;
S212:磁盘驱动注册时会创建struct request_queue,此时调用kthread_create()创建脏页回写线程,并赋值给q->dp_writeback,需要说的是q表示struct request_queue。
S22:判断监测模块是否有设置磁盘繁忙标志,如磁盘繁忙则进入睡眠,磁盘空闲则运行步骤S23。
具体的,
S221:通过判断q->is_idle是否为false判断监测模块是否有设置磁盘繁忙标志。
S222:如果判断q->is_idle为false,则调用schedule()让出当前cpu,同时调用set_current_state(TASK_INTERRUPTIBLE)以便使得脏页回写线程处于休眠状态;
否则,q->is_idle为true,运行S23。
S23:判断是否有需回写到磁盘的脏页,如没有需回写的脏页则进入睡眼,有则运行步骤S24。
在本步骤中,通过如下步骤判断是否有需要回写到磁盘的脏页:
S231:运行struct list_head b_dirty=&q->backing_dev_info->wb.b_dirty取出脏页链表;
S232:调用list_empty(b_dirty)判断链表是否空,如果为空则说明没有脏页需要回到磁盘,调用schedule()让出当前CPU;如果不为空则运行步骤S24。
步骤S23中,块设备的运行队列request_queue中有一个叫backing_dev_info的成员,backing_dev_info中的成员struct bdi_writeback wb保存了系统中需要回写到磁盘的脏页数据,其中的struct list_head b_dirty链表链接了系统所有需要回写到磁盘的脏页,通过判断b_dirty链表是否为空即可确定是否有需回写到磁盘的脏页,b_dirty链表为空则表示没有需回写到磁盘的脏页,b_dirty链表不为空则表示有需回写到磁盘的脏页。
S24:取出脏页回写到磁盘,然后运行步骤S22。
具体的,还包括以下步骤:
S241:调用set_current_state(TASK_RUNING)设置脏页回写线程处于运行状态;
S242:调用struct inode dirty_inode = list_entry(b_dirty, structinode, i_io_list)从脏页链表中取出脏页的文件inode;
S243:调用write_inode_now(dirty_inode, true)回写脏页到磁盘;
S244:调用list_del(&dirty_inode->i_io_list)将回写到磁盘的脏页从脏页链表中删除;
S245:运行步骤S22。
显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
Claims (10)
1.一种Linux系统下的脏页回写方法,其特征在于,包括以下步骤:
S1:构建监测模块,监测模块用于对系统磁盘的繁忙程度进行监测,并且监测模块根据系统磁盘的是否繁忙决定是否唤醒磁盘的脏页回写线程,系统磁盘的繁忙程度根据块设备的待落盘IO数量与已落盘IO数量进行判断;
S2:构建脏页回写线程,脏页回写线程用于回写系统中产生的磁盘的脏页。
2.根据权利要求1所述的一种Linux系统下的脏页回写方法,其特征在于,步骤S1具体包括以下步骤:
S11:准备监测模块所需要的数据结构并初始化;
S12:统计系统磁盘中块设备的待落盘IO数量与已落盘IO数量;
S13:根据待落盘IO数量与已落盘IO数量来判断磁盘是否繁忙并唤醒或睡眠脏页回写线程。
3.根据权利要求2所述的一种Linux系统下的脏页回写方法,其特征在于,步骤S11还包括以下步骤:
S111:构建监测模块:
在struct request_queue结构体中分别:
增加unsigned int类型变量queued_io_num表示待落盘IO数量;
增加unsigned int类型变量flight_io_num表示已落盘IO数量;
增加bool类型变量is_idle表示磁盘是否空闲;
S112:将queued_io_num初始化为0,将flight_io_num初始化为0,is_idle初始化为true。
4.根据权利要求3所述的一种Linux系统下的脏页回写方法,其特征在于,在步骤S12包括以下步骤:
S121:在blk_mq_submit_bio函数中执行q->queued_io_num++,使得blk_mq_submit_bio每被调用一次,待落盘IO数量就增1,其中,本步骤的q表示的request_queue是通过bdev_get_queue获取的;
S122:在磁盘驱动派发IO回调函数queue_rq中执行q->queued_io_num--与q->flight_io_num++,使得待落盘IO数量每减少一次,同时已落盘IO数量增加1,本步骤中的q表示的request_queue是通过hctx->queue获取的;
S123:在磁盘驱动IO完成回调函数complete中执行q->flight_io_num--,使得已落盘IO数量每完成一次,已落盘IO数量减少1,本步骤中的 q表示的request_queue是通过req->q来获取的。
5.根据权利要求4所述的一种Linux系统下的脏页回写方法,其特征在于,步骤S13包括以下步骤:
S131:如果q->queued_io_num小于q->nr_hw_queues并且q->flight_io_num等于0,则判定磁盘空闲,否则判定磁盘繁忙,其中,q->nr_hw_queues中保存的是磁盘硬队列数,在磁盘驱动初始化时确定;
S132:如果判定磁盘空闲,则设置q->is_idle为true,同时调用wake_up_process唤醒脏页回写线程,如果判定磁盘繁忙,则设置q->is_idle为false。
6.根据权利要求5所述的一种Linux系统下的脏页回写方法,其特征在于,步骤S2包括以下步骤:
S21:准备脏页回写线程所需要的数据结构并初始化;
S22:判断监测模块是否有设置磁盘繁忙标志,如磁盘繁忙则进入睡眠,磁盘空闲则运行步骤S23;
S23:判断是否有需回写到磁盘的脏页,如没有需回写的脏页则进入睡眼,有则运行步骤S24;
S24:取出脏页回写到磁盘,然后运行步骤S22。
7.根据权利要求6所述的一种Linux系统下的脏页回写方法,其特征在于,步骤S21包括以下步骤:
S211:在struct request_queue结构体中增加struct task_struct dp_writeback,用于创建脏页回写线程;
S212:调用kthread_create创建脏页回写线程,并赋值给q->dp_writeback,本步骤中的q表示struct request_queue。
8.根据权利要求7所述的一种Linux系统下的脏页回写方法,其特征在于,步骤S22包括以下步骤:
S221:通过判断q->is_idle是否为false判断监测模块是否有设置磁盘繁忙标志;
S222:如果判断q->is_idle为false,则调用schedule让出当前cpu,同时调用set_current_state以便使得脏页回写线程处于休眠状态;否则,q->is_idle为true,运行S23。
9.根据权利要求8所述的一种Linux系统下的脏页回写方法,其特征在于,步骤S23中,通过如下步骤判断是否有需要回写到磁盘的脏页:
S231:通过访问变量 q 的 backing_dev_info中的 wb中的 b_dirty ,获取脏页链表中的b_dirty;
S232:调用list_empty判断链表是否空,如果为空则说明没有脏页需要回到磁盘,调用schedule让出当前CPU;如果不为空则运行步骤S24。
10.根据权利要求9所述的一种Linux系统下的脏页回写方法,其特征在于,步骤S24还包括以下步骤:
S241:调用set_current_state设置脏页回写线程处于运行状态;
S242:通过 list_entry从脏页链表b_dirty中取出一个脏页的文件inode;
S243:调用write_inode_now回写脏页到磁盘;
S244:调用list_del将回写到磁盘的脏页从脏页链表中删除;
S245:运行步骤S22。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311141691.2A CN116880774B (zh) | 2023-09-06 | 2023-09-06 | 一种Linux系统下的脏页回写方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311141691.2A CN116880774B (zh) | 2023-09-06 | 2023-09-06 | 一种Linux系统下的脏页回写方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116880774A true CN116880774A (zh) | 2023-10-13 |
CN116880774B CN116880774B (zh) | 2023-11-28 |
Family
ID=88271931
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311141691.2A Active CN116880774B (zh) | 2023-09-06 | 2023-09-06 | 一种Linux系统下的脏页回写方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116880774B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1145210A (ja) * | 1997-07-29 | 1999-02-16 | Toshiba Corp | ディスクキャッシュ装置、ディスクキャッシュ方法及びディスクキャッシュプログラムを記録した記録媒体 |
US20100174853A1 (en) * | 2009-01-08 | 2010-07-08 | Samsung Electronics Co., Ltd. | User device including flash and random write cache and method writing data |
CN103049396A (zh) * | 2012-12-10 | 2013-04-17 | 浪潮(北京)电子信息产业有限公司 | 数据的刷写方法及装置 |
CN104794068A (zh) * | 2015-02-04 | 2015-07-22 | 北京神州云科数据技术有限公司 | 一种flush缓存的方法及装置 |
CN105740170A (zh) * | 2016-01-22 | 2016-07-06 | 浪潮(北京)电子信息产业有限公司 | 一种缓存脏页刷写方法及装置 |
CN110442646A (zh) * | 2019-07-29 | 2019-11-12 | 北京易捷思达科技发展有限公司 | 一种ceph数据同步模块主端写性能优化系统及方法 |
CN112835528A (zh) * | 2021-02-22 | 2021-05-25 | 北京金山云网络技术有限公司 | 脏页刷新方法和装置、电子设备和存储介质 |
CN115481127A (zh) * | 2022-10-27 | 2022-12-16 | 北京人大金仓信息技术股份有限公司 | 数据库的数据存储方法、存储介质与设备 |
-
2023
- 2023-09-06 CN CN202311141691.2A patent/CN116880774B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1145210A (ja) * | 1997-07-29 | 1999-02-16 | Toshiba Corp | ディスクキャッシュ装置、ディスクキャッシュ方法及びディスクキャッシュプログラムを記録した記録媒体 |
US20100174853A1 (en) * | 2009-01-08 | 2010-07-08 | Samsung Electronics Co., Ltd. | User device including flash and random write cache and method writing data |
CN103049396A (zh) * | 2012-12-10 | 2013-04-17 | 浪潮(北京)电子信息产业有限公司 | 数据的刷写方法及装置 |
CN104794068A (zh) * | 2015-02-04 | 2015-07-22 | 北京神州云科数据技术有限公司 | 一种flush缓存的方法及装置 |
CN105740170A (zh) * | 2016-01-22 | 2016-07-06 | 浪潮(北京)电子信息产业有限公司 | 一种缓存脏页刷写方法及装置 |
CN110442646A (zh) * | 2019-07-29 | 2019-11-12 | 北京易捷思达科技发展有限公司 | 一种ceph数据同步模块主端写性能优化系统及方法 |
CN112835528A (zh) * | 2021-02-22 | 2021-05-25 | 北京金山云网络技术有限公司 | 脏页刷新方法和装置、电子设备和存储介质 |
CN115481127A (zh) * | 2022-10-27 | 2022-12-16 | 北京人大金仓信息技术股份有限公司 | 数据库的数据存储方法、存储介质与设备 |
Non-Patent Citations (1)
Title |
---|
肖必武;刘军;: "磁盘驱动程序预写", 计算机工程与设计, no. 02, pages 1 - 3 * |
Also Published As
Publication number | Publication date |
---|---|
CN116880774B (zh) | 2023-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9904346B2 (en) | Methods and apparatus to improve turbo performance for events handling | |
US8108696B2 (en) | Optimizing non-preemptible read-copy update for low-power usage by avoiding unnecessary wakeups | |
EP2778840B1 (en) | Techniques for power saving on graphics-related workloads | |
US9128703B1 (en) | Processor that transitions to an idle mode when no task is scheduled to execute and further enters a quiescent doze mode or a wait mode depending on the value of a reference counter | |
US10628321B2 (en) | Progressive flush of cache memory | |
EP1570342A2 (en) | Apparatus and method for multi-threaded processors performance control | |
US20160154452A1 (en) | System and method for controlling the power mode of operation of a memory device | |
US12020065B2 (en) | Hierarchical processor selection | |
CN110032450B (zh) | 一种基于固态盘扩展内存的大规模深度学习方法及系统 | |
CN100351743C (zh) | 具有总线主控设备的计算机系统中的功率降低方法 | |
US7650472B2 (en) | Method for reducing memory power consumption | |
CN115981833A (zh) | 一种任务处理方法及装置 | |
CN1177279C (zh) | 维持动态随机存取存储器的存储数据的方法及相关装置 | |
Ji et al. | Demand layering for real-time DNN inference with minimized memory usage | |
CN116880774B (zh) | 一种Linux系统下的脏页回写方法 | |
CN101930357B (zh) | 采用可配置的片上存储装置实现访存操作的系统及方法 | |
US10884477B2 (en) | Coordinating accesses of shared resources by clients in a computing device | |
KR20240035233A (ko) | 멀티코어 프로세서에서 태스크들을 스케줄링하기 위한 방법 및 장치 | |
CN112767978B (zh) | 一种ddr命令调度方法、装置、设备及介质 | |
US10936047B2 (en) | Power state management | |
Manzanares et al. | Conserving energy in real-time storage systems with I/O burstiness | |
US12086009B2 (en) | Using a hardware-based controller for power state management | |
US20230259186A1 (en) | Power consumption management method and apparatus | |
Zhang et al. | Optimization Methods for Computing System in Mobile CPS | |
CN118838689A (zh) | 任务调度方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |