CN102360369B - 在用户空间文件系统上实现聚合写文件脏页的方法和装置 - Google Patents

在用户空间文件系统上实现聚合写文件脏页的方法和装置 Download PDF

Info

Publication number
CN102360369B
CN102360369B CN201110302148.7A CN201110302148A CN102360369B CN 102360369 B CN102360369 B CN 102360369B CN 201110302148 A CN201110302148 A CN 201110302148A CN 102360369 B CN102360369 B CN 102360369B
Authority
CN
China
Prior art keywords
page
dirty
pages
fuse
group
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.)
Active
Application number
CN201110302148.7A
Other languages
English (en)
Other versions
CN102360369A (zh
Inventor
何抗洪
程宁
朱鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN201110302148.7A priority Critical patent/CN102360369B/zh
Publication of CN102360369A publication Critical patent/CN102360369A/zh
Application granted granted Critical
Publication of CN102360369B publication Critical patent/CN102360369B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种在用户空间文件系统(fuse)上实现聚合写文件脏页的方法,fuse获取脏页数组;检查脏页数组中连续的脏页,将连续的脏页通过一个fuse消息传递给用户态文件系统的守护进程;本发明同时还公开了一种在fuse上实现聚合写文件脏页的装置,通过本发明的方案,能够减少fuse消息数量,节省系统的CPU资源,提高传输效率。

Description

在用户空间文件系统上实现聚合写文件脏页的方法和装置
技术领域
本发明涉及Linux操作系统的文件访问技术,尤其涉及一种在用户空间文件系统(fuse,flesystem in usese space)上实现聚合写文件脏页的方法和装置。
背景技术
在基于Linux操作系统实现的用户态分布式文件系统应用中,需要向用户提供通常的标准的文件访问接口。用户不需要知道底层是本地文件系统还是分布式文件系统,都可以通过文件系统挂载点以统一的方式访问。这通常是由用户态文件系统模块fuse来实现的。fuse驻留在Linux内核,接收用户进程的文件访问消息,封装成fuse消息传递给用户态文件系统的守护进程。
目前的fuse实现基本满足了一般应用的功能性需求,但难以满足企业级、电信级分布式文件系统的性能需求,尤其在以内存映射方式(mmap)大批量写文件数据的时候。在用内存映射方式写文件数据时,用户进程首先打开一个文件,然后把文件空间映射到内存地址空间,接着向内存地址空间写入数据,最后解除映射和关闭文件。写入的数据首先存储在Linux内核的页缓存里。Linux系统会自动把更改过的数据页标记为脏页。在解除内存映射关闭文件时调用页写(writepage)函数把每个脏页封装成一个fuse消息传送给用户态文件系统守护进程。
在这种方式下,每一页大小的数据就会产生一个fuse消息。在Linux上,一个页一般是4KB大小。在写几十MB以上的大文件的时候,会产生非常多的fuse消息,增加了每次消息交互产生的附加代价,极大地消耗系统的中央处理器(CPU)资源,传输效率极为低下。
发明内容
有鉴于此,本发明的主要目的在于提供一种在fuse上实现聚合写文件脏页的方法和装置,减少fuse消息数量,节省系统的CPU资源,提高传输效率。
为达到上述目的,本发明的技术方案是这样实现的:
一种在用户空间文件系统(fuse)上实现聚合写文件脏页的方法,包括:fuse获取脏页数组;依次检查脏页数组中的每一页,根据脏页数组中第一个脏页的页号设置连续号变量,并在将第一个脏页的页地址加入到fuse消息的页数组中之后,通过连续号变量确定与第一个脏页连续的脏页,将确定的连续的脏页也加入到所述fuse消息的页数组中,通过所述fuse消息将所述页数组传递给用户态文件系统的守护进程。
所述fuse获取脏页数组为:定义原型为页写函数(writepages)的函数fuse_writepages,函数fuse_writepages根据输入参数,确定文件写的起始页号和结束页号;清除文件写完成标识,调用查找函数(pagevec_lookup_tag),并输入起始页号和结束页号,将带有脏页标志PAGEE_TAG_DCACHIRTY的页,按页号从小到大的顺序组成脏页数组存储在脏页存储数组(pvec)中。
所述方法进一步包括:预先设置最大脏页数,当fuse消息的页数组中脏页页数达到最大脏页数时,不再继续确定连续脏页,将该fuse消息传递给用户态文件系统的守护进程。
一种在fuse上实现聚合写文件脏页的装置,包括:获取模块、检查模块、传递模块;其中,
获取模块,用于获取脏页数组;
检查模块,用于依次检查脏页数组中的每一页,根据脏页数组中第一个脏页的页号设置连续号变量,并将第一个脏页的页地址通知传递模块,通过连续号变量确定与第一个脏页连续的脏页,将确定的连续的脏页的页地址通知传递模块;
传递模块,用于将连续的脏页通过一个fuse消息传递给用户态文件系统的守护进程。
所述获取模块,具体用于定义原型为writepages的函数fuse_writepages,函数fuse_writepages根据输入参数wbc,确定文件写的起始页号和结束页号;清除文件写完成标识,调用pagevec_lookup_tag函数,并输入起始页号和结束页号,将带有脏页标志PAGEE_TAG_DCACHIRTY的页,按页号从小到大的顺序组成脏页数组存储在pvec中。
所述传递模块,具体用于将所述检查模块通知的脏页的页地址加入到fuse消息的页数组中,通过所述fuse消息将所述页数组传递给用户态文件系统的守护进程。
所述传递模块,进一步用于设置最大脏页数,当fuse消息的页数组中脏页页数达到最大脏页数时,通知检查模块不再继续确定连续脏页,将所述fuse消息传递给用户态文件系统的守护进程。
本发明提供了一种在fuse上实现聚合写文件脏页的方法和装置,fuse获取脏页数组;检查脏页数组中连续的脏页,将连续的脏页通过一个fuse消息传递给用户态文件系统的守护进程;如此,能够减少fuse消息数量,节省系统的CPU资源,提高传输效率。
附图说明
图1为本发明在fuse上实现聚合写文件脏页的方法的流程示意图;
图2为本发明在fuse上实现聚合写文件脏页的方法中,步骤102的实例示意图;
图3为本发明在fuse上实现聚合写文件脏页的装置的结构示意图。
具体实施方式
本发明的基本思想是:fuse获取脏页数组;检查脏页数组中连续的脏页,将连续的脏页通过一个fuse消息传递给用户态文件系统的守护进程。
下面通过附图及具体实施例对本发明做进一步的详细说明。
本发明实现一种在fuse上实现聚合写文件脏页的方法,如图1所示,该方法包括以下几个步骤:
步骤101:fuse获取脏页数组;
具体的,在类型为address_space_operations的结构体fuse_fle_aops添加成员赋值语句:.writepages=fuse_writepages;
定义原型为writepages的函数fuse_writepages,其输入参数为:
mapping:要操作的文件的地址空间结构address_space;
wbc:写回控制结构writeback_control;
函数fuse_writepages根据输入参数wbc,确定文件写的起始页号index和结束页号end;清除文件写完成标识,调用查找函数(pagevec_lookup_tag),并输入起始页号index和结束页号end,将带有脏页标志PAGEE_TAG_DCACHIRTY的页,按页号从小到大的顺序组成脏页数组存储在脏页存储数组(pvec,dirty page vector)中。
步骤102:fuse检查脏页数组中连续的脏页,将连续的脏页通过一个fuse消息传递给用户态文件系统的守护进程;
具体的,fuse根据脏页数组中第一个脏页的页号设置连续号变量,并在将第一个脏页的页地址加入到fuse消息的页数组中之后,通过连续号变量确定与第一个脏页连续的脏页,将确定的连续的脏页也加入到fuse消息的页数组中,通过所述fuse消息将所述页数组传递给用户态文件系统的守护进程;
下面对本步骤的流程进行详细描述:
fuse调用fuse_get_req函数申请一个req消息对象,设置其属性in.argpages=1,page_offset=0;设置连续号变量seq为pvec.pages[0]->indexf-1,其中indexf为脏页数组中的第一个脏页的页号,脏页数组中最后一页的页号用endf表示;从pvec.pages[0]开始依次检查pvec中脏页数组的每一页,对检查的当前页做下列操作:
a、判断页号是否大于endf,如果大于endf,则设置文件写完成标识,执行步骤h;否则执行步骤b;
b、调用lock_page锁住当前页,根据是否有脏页标志PAGEE_TAG_DCACHIRTY判断当前页是否已不是脏页,如果已不是脏页,解除锁定当前页并执行步骤h;否则执行步骤c;
c、判断当前页指向的地址空间是否是当前地址空间,如果不是,则解除锁定当前页并执行步骤h;否则执行步骤d;
d、判断当前页是否处于写回状态,如果是,则解除锁定当前页并执行步骤h;否则执行步骤e;
e、判断当前页的页号是否等于连续号变量seq+1,如果不等于,则解除锁定当前页并执行步骤h;否则执行步骤f;
f、调用clear_page_dirty_for_io函数清除当前页的脏页标志PAGEE_TAG_DCACHIRTY;如果清除失败,则解除锁定当前页并执行步骤h;否则执行步骤g;
g、调用page_cache_get增加当前页的缓存计数,调用set_page_writeback函数为当前页设置页写回状态,并填写页地址到req的页数组,增加req的页数,获取脏页数组中的下一页,执行步骤a;
h、判断req的页数是否大于0,如果大于0,则调用fuse_send_writepages函数将req的页数组中的脏页通过req消息传递给用户态文件系统的守护进程,执行步骤i;否则直接执行步骤i;
步骤h中,在req的页数大于1时,说明req的页数组中的一个以上脏页是连续的,这样就能够通过一个req消息传递多个脏页。
i、调用pagevec_releasse函数释放pvec,调用cond_resched函数,重新执行步骤101。
步骤102中,进一步包括:预先设置最大脏页数,用于限制一个fuse消息传递的连续脏页的数量,即当fuse消息的页数组中脏页页数达到最大脏页数时,不再继续确定连续脏页,将该fuse消息传递给用户态文件系统的守护进程,如:在步骤g中所述增加req的页数之后,判断req的页数是否等于最大脏页数,如果的等于,则执行步骤h,如果不等于,再获取脏页数组中的下一页,执行步骤a。
下面通过一个具体实例来说明本步骤。
如图2所示,文件的地址空间(addressspace)的当前脏页数组中有6个脏页,页号分别为1、2、3、6、9、10。如果用现有的方法,当写回该文件时,会对每个脏页生成一个req消息,共6个req消息。
应用步骤102的方法,能够确定出页号为1、2、3的脏页连续,可以生成一个req消息Req1,将页号为1、2、3的脏页的页地址加入到Req1的页数组中;通过获取脏页数组后,脏页数组中有3个脏页,页号分别为6、9、10,确定出页号为6的脏页没有连续的脏页,生成一个req消息Req2,将页号为6的脏页的页地址加入到Req2的页数组中;通过获取脏页数组后,脏页数组中有2个脏页,页号分别为9、10,确定出页号为9和10的脏页连续,生成一个req消息Req3,将页号为9、10的脏页的页地址加入到Req3的页数组中,这样,一共只需生成3个req消息,消息数可以减少一半。
为了实现上述方法,本发明还提供一种在fuse上实现聚合写文件脏页的装置,如图3所示,该装置包括:获取模块31、检查模块32、传递模块33;其中,
获取模块31,用于获取脏页数组;
检查模块32,用于检查脏页数组中连续的脏页,将连续的脏页发送到传递模块33;
传递模块33,用于将连续的脏页通过一个fuse消息传递给用户态文件系统的守护进程;
所述获取模块31,具体用于定义原型为writepages的函数fuse_writepages,函数fuse_writepages根据输入参数wbc,确定文件写的起始页号index和结束页号end;清除文件写完成标识,调用pagevec_lookup_tag函数,并输入起始页号index和结束页号end,将带有脏页标志PAGEE_TAG_DCACHIRTY的页,按页号从小到大的顺序组成脏页数组存储在pvec中;
所述检查模块32,具体用于依次检查脏页数组中的每一页,根据脏页数组中第一个脏页的页号设置连续号变量,并将第一个脏页的页地址通知传递模块33,通过连续号变量确定与第一个脏页连续的脏页,将确定的连续的脏页的页地址通知传递模块33;
所述传递模块33,具体用于将所述检查模块32通知的脏页的页地址加入到fuse消息的页数组中,通过所述fuse消息将所述页数组传递给用户态文件系统的守护进程;
所述传递模块33,进一步用于设置最大脏页数,当fuse消息的页数组中脏页页数达到最大脏页数时,通知检查模块32不再继续确定连续脏页,将所述fuse消息传递给用户态文件系统的守护进程。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

Claims (4)

1.一种在用户空间文件系统(fuse)上实现聚合写文件脏页的方法,其特征在于,该方法包括:
fuse获取脏页数组;依次检查脏页数组中的每一页,根据脏页数组中第一个脏页的页号设置连续号变量,并在将第一个脏页的页地址加入到fuse消息的页数组中之后,通过连续号变量确定与第一个脏页连续的脏页,将确定的连续的脏页也加入到所述fuse消息的页数组中,通过所述fuse消息将所述页数组传递给用户态文件系统的守护进程;
所述fuse获取脏页数组包括:
定义原型为页写函数writepages的函数fuse_writepages,函数fuse_writepages根据输入参数wbc,确定文件写的起始页号和结束页号;清除文件写完成标识,调用查找函数pagevec_lookup_tag,并输入起始页号和结束页号,将带有脏页标志PAGEE_TAG_DCACHIRTY的页,按页号从小到大的顺序组成脏页数组存储在脏页数组pvec中;其中,所述输入参数wbc为函数fuse_writepages的输入参数中的写回控制结构writeback_control。
2.根据权利要求1所述的方法,其特征在于,该方法进一步包括:预先设置最大脏页数,当fuse消息的页数组中脏页页数达到最大脏页数时,不再继续确定连续脏页,将该fuse消息传递给用户态文件系统的守护进程。
3.一种在用户空间文件系统(fuse)上实现聚合写文件脏页的装置,其特征在于,该装置包括:获取模块、检查模块、传递模块;其中,
获取模块,用于获取脏页数组,包括:定义原型为页写函数writepages的函数fuse_writepages,函数fuse_writepages根据输入参数wbc,确定文件写的起始页号和结束页号;清除文件写完成标识,调用查找函数pagevec_lookup_tag,并输入起始页号和结束页号,将带有脏页标志PAGEE_TAG_DCACHIRTY的页,按页号从小到大的顺序组成脏页数组存储在脏页数组pvec中;其中,所述输入参数wbc为函数fuse_writepages的输入参数中的写回控制结构writeback_control;
检查模块,用于依次检查脏页数组中的每一页,根据脏页数组中第一个脏页的页号设置连续号变量,并将第一个脏页的页地址通知传递模块,通过连续号变量确定与第一个脏页连续的脏页,将确定的连续的脏页的页地址通知传递模块;
传递模块,用于将所述检查模块通知的脏页的页地址加入到fuse消息的页数组中,通过所述fuse消息将所述页数组传递给用户态文件系统的守护进程。
4.根据权利要求3所述的装置,其特征在于,所述传递模块,进一步用于设置最大脏页数,当fuse消息的页数组中脏页页数达到最大脏页数时,通知检查模块不再继续确定连续脏页,将所述fuse消息传递给用户态文件系统的守护进程。
CN201110302148.7A 2011-09-28 2011-09-28 在用户空间文件系统上实现聚合写文件脏页的方法和装置 Active CN102360369B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110302148.7A CN102360369B (zh) 2011-09-28 2011-09-28 在用户空间文件系统上实现聚合写文件脏页的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110302148.7A CN102360369B (zh) 2011-09-28 2011-09-28 在用户空间文件系统上实现聚合写文件脏页的方法和装置

Publications (2)

Publication Number Publication Date
CN102360369A CN102360369A (zh) 2012-02-22
CN102360369B true CN102360369B (zh) 2014-08-13

Family

ID=45585698

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110302148.7A Active CN102360369B (zh) 2011-09-28 2011-09-28 在用户空间文件系统上实现聚合写文件脏页的方法和装置

Country Status (1)

Country Link
CN (1) CN102360369B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103970794B (zh) * 2013-02-01 2017-11-28 联想(北京)有限公司 数据访问方法和数据访问装置
CN107239236A (zh) * 2017-06-27 2017-10-10 北京小米移动软件有限公司 数据写入方法及装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102097128A (zh) * 2010-11-25 2011-06-15 中国人民大学 一种基于闪存的自适应缓冲区置换方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8151032B2 (en) * 2008-06-26 2012-04-03 Microsoft Corporation Direct memory access filter for virtualized operating systems

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102097128A (zh) * 2010-11-25 2011-06-15 中国人民大学 一种基于闪存的自适应缓冲区置换方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
.2010,全文. *
URL:http://hi.baidu.com/xuwanbest/blog/item/2e0b91ca0e10654ef31fe7b8.html&gt *
无.使用 FUSE 开发自己的文件系统.&lt *
无.使用 FUSE 开发自己的文件系统.<URL:http://hi.baidu.com/xuwanbest/blog/item/2e0b91ca0e10654ef31fe7b8.html>.2010,全文.

Also Published As

Publication number Publication date
CN102360369A (zh) 2012-02-22

Similar Documents

Publication Publication Date Title
CN103052949B (zh) 处理外围设备页错误的机制
EP3920034A1 (en) Systems and methods for scalable and coherent memory devices
US9396109B2 (en) Method and apparatus for DRAM spatial coalescing within a single channel
CN102810050A (zh) 日志数据写入方法和日志系统
US9411728B2 (en) Methods and apparatus for efficient communication between caches in hierarchical caching design
CN102279753A (zh) 可重构系统配置管理的方法及用于可重构系统的配置管理单元
CN109997117B (zh) 用于将门铃合并在请求消息中的技术
US20140068125A1 (en) Memory throughput improvement using address interleaving
CN102855214B (zh) 实现数据一致性的方法和一种多核系统
CN102521179A (zh) 一种dma读操作的实现装置和方法
CN109062826B (zh) 数据传输方法及系统
CN114936173B (zh) 一种eMMC器件的读写方法、装置、设备和存储介质
EP3770759A1 (en) Wake-up and scheduling of functions with context hints
CN110874336B (zh) 一种基于申威平台的分布式块存储低延迟控制方法及系统
CN102360369B (zh) 在用户空间文件系统上实现聚合写文件脏页的方法和装置
CN117707998A (zh) 用于分配缓存资源的方法、系统和存储介质
CN202183093U (zh) 用于可重构系统的配置管理单元
US11249934B2 (en) Data access method and apparatus
US20230176966A1 (en) Methods and apparatus for persistent data structures
US20220179805A1 (en) Adaptive pipeline selection for accelerating memory copy operations
CN111124506A (zh) 基于应用层的运算卡驱动实现方法
CN116601616A (zh) 一种数据处理装置、方法及相关设备
US20130246670A1 (en) Information processing system
CN109474543B (zh) 一种队列资源管理方法、装置及存储介质
CN112513822B (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
C14 Grant of patent or utility model
GR01 Patent grant