CN119376658B 一种Linux系统下提升U盘弹出速度的方法及系统 (麒麟软件有限公司)_第1页
CN119376658B 一种Linux系统下提升U盘弹出速度的方法及系统 (麒麟软件有限公司)_第2页
CN119376658B 一种Linux系统下提升U盘弹出速度的方法及系统 (麒麟软件有限公司)_第3页
CN119376658B 一种Linux系统下提升U盘弹出速度的方法及系统 (麒麟软件有限公司)_第4页
CN119376658B 一种Linux系统下提升U盘弹出速度的方法及系统 (麒麟软件有限公司)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(12)发明专利(10)授权公告号CN1193766(65)同一申请的已公布的文献号审查员文燕(73)专利权人麒麟软件有限公司地址300459天津市滨海新区高新区塘沽海洋科技园信安创业广场3号楼6-8层(72)发明人胡海张根健(74)专利代理机构湖南兆弘专利事务所(普通合伙)43008专利代理师谭武艺①①U盘最高写入速度预测模块系统缓存写限制模块④缓存页数量(57)摘要本发明公开了一种Linux系统下提升U盘弹出速度的方法及系统,本发明Linux系统下提升U盘弹出速度的方法包括统计U盘单位时间内的写入数据量与使用率,并根据统计数据来预测U盘的最高写入速度,然后根据预测的U盘最高写入速度及期望的U盘弹出时间来确定一个阈值,最后使用阈值来限制需回写到U盘的缓存页数量,使用其处于一个可控状态,从而提升U盘弹出速度。本发明旨在解决当前Linux文件缓存管理策略下可能存在的U盘弹出时间长、用户体验差的2基于U盘的统计写入数据量及使用率定时动态调整阈值的大小;根据当前的阈值限制系统针对U盘的缓存写机制需回写的缓存页数量,使得当需回写的缓存页数量超过阈值时则不再新分配缓存页而是先将U盘缓存链表中的缓存页写回到U盘再回收缓存页使用以确保需要回写到U盘的缓存页数量可控来提升U盘弹出速度;所述根据当前的阈值限制系统针对U盘的缓存写机制需回写的缓存页数量为基于U盘缓存限制模块实现,且U盘缓存限制模块根据当前的阈值限制系统针对U盘的缓存写机制需回写的缓存页数量包括:S101,声明定义U盘缓存限制模块所需的数据结构并初始化;S102,当存储介质插入电脑时,判断存储介质是否为U盘,并将判断结果存储到存储介质的磁盘描述符中;S103,当系统通过VFS层向存储介质写入数据时,先判断存储介质是否为U盘如果是则运行步骤S104,否则结束运行;S104,判断被写入的存储介质已缓存的页面数量是否超过阈值,如超过阈值运行步骤S105,如等于阈值运行步骤S106,否则先分配缓存页,并将分配的缓存页插入被写入的U盘的U盘缓存链表末尾,同时更新U盘已缓存的页面数量,结束并退出;S105,回收U盘缓存链表的缓存页,直到缓存页数量跟阈值相等;S106,从U盘缓存链表的头部取出一个缓存页,将缓存页中的数据写回到U盘,然后再将该缓存页插入U盘缓存链表尾部。2.根据权利要求1所述的Linux系统下提升U盘弹出速度的方法,其特征在于,所述基于U盘的统计写入数据量及使用率定时动态调整阈值的大小时,每一轮调整阈值的大小包括:步骤①,统计U盘单位时间内的写入数据量和使用率;步骤②,根据U盘单位时间内的写入数据量和使用率预测出U盘的最高写入速度S;步骤③,根据U盘的最高写入速度S更新阈值,且阈值与最高写入速度S正相关。3.根据权利要求2所述的Linux系统下提升U盘弹出速度的方法,其特征在于,步骤①中统计U盘单位时间内的写入数据量和使用率时,统计U盘单位时间内的写入数据量包括:首先将写入数据量N初始化为0,然后针对单位时间内scsi层的数据发送函数scsi_queue_rq()下发的操作req,调用内核中的读写判断函数rq_data_dir()判断rq_data_dir(req)是否等于写操作常量WRITE,如果不等于写操作常量WRITE,则忽略该操作req;否则判断操作req写入的存储介质是否为U盘存储介质,如果为U盘存储介质则通过统计读写操作数函数blk_req_bytes()将操作req的读写字节数累加到写入数据量N,最终在单位时间结束后得到最终的U盘在单位时间里写入完成的写入数据量N。4.根据权利要求2所述的Linux系统下提升U盘弹出速度的方法,其特征在于,步骤①中统计U盘单位时间内的写入数据量和使用率时,统计U盘单位时间内的使用率包括:(1)初始化设置单位时间内的采样次数samping_time为单位时间的总采样次数,U盘繁忙频率per_busy的值初始化为单位时间的总采样次数;(2)通过内核函数part_in_flight_rw()来获取U盘未完成的I0写请求数量,如果U盘未完成的I0写请求数量大于0则表示U盘繁忙,则保持U盘繁忙频率per_busy的值不变,否则将U盘繁忙频率per_busy的值减1;(3)先将采样次数samping_time向下递减1,再判断其是否大于0,如果大于0则休眠一个采样间隔后跳转步3骤(2);否则计算单位时间内的U盘使用率Rate_Busy,U盘繁忙频率per_busy除以单位时间的总采样次数samping_time得到U盘单位时间内的使用率Rate_Busy。5.根据权利要求2所述的Linux系统下提升U盘弹出速度的方法,其特征在于,步骤②中根据U盘单位时间内的写入数据量和使用率预测出U盘的最高写入速度S的函数表达式为:S=N/Rate_Busy,其中N为U盘在单位时间里写入完成的写入数据量,Rate_Busy为U盘单位时间内的使用率。6.根据权利要求2所述的Linux系统下提升U盘弹出速度的方法,其特征在于,步骤③中根据U盘的最高写入速度S设置阈值的函数表达式为:cache_threshold=(S*T7.一种Linux系统下提升U盘弹出速度的系统,包括相互连接的微处理器和存储器,其特征在于,所述微处理器被编程或配置以执行权利要求1~6中任意一项所述Linux系统下提升U盘弹出速度的方法。8.一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序或指令,其特征在于,该计算机程序或指令被编程或配置以通过处理器执行权利要求1~6中任意一项所述Linux系统下提升U盘弹出速度的方法。9.一种计算机程序产品,包括计算机程序或指令,其特征在于,该计算机程序或指令被编程或配置以通过处理器执行权利要求1~6中任意一项所述Linux系统下提升U盘弹出速度的方法。4一种Linux系统下提升U盘弹出速度的方法及系统技术领域[0001]本发明涉及操作系统的设备管理技术领域,具体涉及一种Linux系统下提升U盘弹出速度的方法及系统。背景技术[0002]近些年来,随着国产操作系统的迅速崛起,国产操作系统正在经历从可用到好用的快速转变,此外国产操作系统多以Linux系统为基础进行二次开发,Linux系统的很多策略也被沿用,比如文件缓存机制,Linux系统使用文件缓存机制提高了文件的访问性能,然而随着当前桌面硬件的内存越来越大,Linux系统的文件缓存机制对于慢速U盘的弹出操作也变得越来越不友好,用户体验十分差。缓存写是一种用于提高存储系统性能的技术,它利用内存中的缓存来暂时存储写操作的数据。这种做法可以提高系统的整体响应速度和吞吐量。Linux通常使用写回缓存策略,数据首先写入内存中的缓存,然后在合适的时机后台异步地将数据写回磁盘。Linux当前的文件系统缓存机制是在进行缓存写操作时(桌面环境下几乎所有的写操作都是缓存写),先从内存中分配缓存页,然后将写入存储介质的数据缓存到缓存页后即表示完成了写操作,随后在某个时机将缓存页回写到存储介质(比如内存紧张需要回收内存时),此机制虽然大幅度提升了应用的读写操作性能,然而对于慢速U盘的弹出操作却不友好,用户在使用完U盘后需要弹出U盘时,系统为保证写入U盘数据的完整性,需要将所有的缓存页回写到U盘并释放缓存页后才能正常进行弹出操作,加之系统无法感知并计算出需要回写到U盘的缓存页数量,U盘弹出操作时间也变得无法预期,如果再叠加U盘写入速度慢、系统U盘缓存页数量多等情况,用户在弹出U盘时将看到系统一直卡在弹发明内容[0003]本发明要解决的技术问题:针对现有技术的上述问题,提供一种Linux系统下提升U盘弹出速度的方法及系统,本发明旨在解决当前Linux文件缓存管理策略下可能存在的U[0004]为了解决上述技术问题,本发明采用的技术方案为:[0006]基于U盘的写入数据量及使用率定时动态调整阈值的大小;[0007]根据当前的阈值限制系统针对U盘的缓存写机制需回写的缓存页数量,使得当需回写的缓存页数量超过阈值时则不再新分配缓存页而是先将U盘缓存链表中的缓存页写回到U盘再回收缓存页使用以确保需要回写到U盘的缓存页数量可控来提升U盘弹出速度。[0008]可选地,所述基于U盘的统计写入数据量及使用率定时动态调整阈值的大小时,每一轮调整阈值的大小包括:[0009]步骤①,统计U盘单位时间内的写入数据量和使用率;[0010]步骤②,根据U盘单位时间内的写入数据量和使用率预测出U盘的最高写入速度S;5间内的写入数据量包括:首先将写入数据量N初始化为0,然后针对单位时间内scsi层的数据发送函数scsi_queue_rq()下发的操作req,调用内核中的读写判断函数rq_data_dir()判断rq_data_dir(req)是否等于写操作常量WR该操作req;否则判断操作req写入的存储介质是否为U盘存储介质,如果为U盘存储介质则通过统计读写操作数函数blk_req_bytes()将操作req的读写字节数累加到写入数据量N,间内的使用率包括:(1)初始化设置单位时间内的采样次数samping_time为单位时间的总大于0则表示U盘繁忙,则保持U盘繁忙频率per_busy的值不变,否则将U盘繁忙频率per_busy的值减1;(3)先将采样次数samping_time向下递减1,再判断其是否大于0,如果大于0则休眠一个采样间隔后跳转步骤(2);否则计算单位时间内的U盘使用率Rate_Busy,U盘繁忙频率per_busy除以单位时间的总采样次数samping_time即得到U盘单位时间内的使用率入速度S的函数表达式为:S=N/Rate_Busy,其中N为U盘在单位时间里写[0018]可选地,所述根据当前的阈值限制系统针对U盘量为基于U盘缓存限制模块实现,且U盘缓存限制模块根据当前的阈值限制系统针对U盘的[0022]S104,判断被写入的存储介质已缓存的页面数量是否超过阈值,如超过阈值运行6微处理器和存储器,所述微处理器被编程或配置以执行所述Linux系统下提升U盘弹出速度的方法。[0026]此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序或指令,该计算机程序或指令被编程或配置以通过处理器执行所述Linux系统下提升U盘弹出速度的方法。[0027]此外,本发明还提供一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被编程或配置以通过处理器执行所述Linux系统下提升U盘弹出速度的方法。[0028]和现有技术相比,本发明主要具有下述优点:本发明Linux系统下提升U盘弹出速度的方法包括基于U盘的统计写入数据量及使用率定时动态调整阈值的大小;根据当前的阈值限制系统针对U盘的缓存写机制需回写的缓存页数量,使得当需回写的缓存页数量超过阈值时则不再新分配缓存页而是先将U盘缓存链表中的缓存页写回到U盘再回收缓存页使用以确保需要回写到U盘的缓存页数量可控来提升U盘弹出速度,本发明能够解决当前Linux文件缓存管理策略下可能存在的U盘弹出时间长、用户体验差的问题。附图说明[0029]图1为本发明实施例方法的原理示意图。[0030]图2为本发明实施例中的U盘缓存限制模块的设计实现流程图。[0031]图3为本发明实施例中的U盘最高写入速度预测模块的设计实现流程图。[0032]图4为本发明实施例中的统计U盘单位时间1s的写入数据量与使用率流程图。具体实施方式[0033]下面参照附图对本发明的实施例进行详细的说明,在描述过程中省略了对于本发明来说不必要的细节和功能,以防止对本发明的理解造成混淆。[0034]如图1所示,本实施例Linux系统下提升U盘弹出速度的方法包括下述步骤:[0035]基于U盘的统计写入数据量及使用率定时动态调整阈值的大小;[0036]根据当前的阈值限制系统针对U盘的缓存写机制需回写的缓存页数量,使得当需回写的缓存页数量超过阈值时则不再新分配缓存页而是先将U盘缓存链表中的缓存页写回到U盘再回收缓存页使用以确保需要回写到U盘的缓存页数量可控来提升U盘弹出速度。[0037]如图1所示,本实施例中基于U盘的统计写入数据量及使用率定时动态调整阈值的大小时,每一轮调整阈值的大小包括:[0038]步骤①,统计U盘单位时间内的写入数据量和使用率;[0039]步骤②,根据U盘单位时间内的写入数据量和使用率预测出U盘的最高写入速度S;[0040]步骤③,根据U盘的最高写入速度S更新阈值,且阈值与最高写入速度S正相关。[0041]本实施例步骤①中统计U盘单位时间内的写入数据量和使用率时,统计U盘单位时间内的写入数据量包括:首先将写入数据量N初始化为0,然后针对单位时间内scsi层的数据发送函数scsi_queue_rq()下发的操作req,调用内核中的读写判断函数rq_data_dir()判断rq_data_dir(req)是否等于写操作常量WRITE,如果不等于写操作常量WRITE,则忽略该操作req;否则判断操作req写入的存储介质是否为U盘存储介质,如果为U盘存储介质则通过统计读写操作数函数blk_req_bytes()将操作req的读写字节数累加到写入数据量N,7最终在单位时间结束后得到最终的U盘在单位时间里写入完成的写入数据量N。统计U盘在单位时间1s里写入完成的数据量N(单位为Kb),则可以得出当前U盘的写入速度为N(Kb/s)。[0042]本实施例步骤①中统计U盘单位时间内的写入数据量和使用率时,统计U盘单位时间内的使用率包括:(1)初始化设置单位时间内的采样次数samping_time为单位时间的总采样次数,U盘繁忙频率per_busy的值初始化为单位时间的总采样次数;(2)通过内核函数part_in_flight_rw()来获取U盘未完成的I0写请求数量,如果U盘未完成的I0写请求数量大于0则表示U盘繁忙,则保持U盘繁忙频率per_busy的值不变,否则将U盘繁忙频率per_busy的值减1;(3)判断采样次数samping_time是否大于0,如果大于0则休眠一个采样间隔后跳转步骤(2);否则计算单位时间内的使用率,U盘繁忙频率per_busy除以单位时间的总采样次数samping_time即得到U盘单位时间内的使用率Rate_Busy。[0043]U盘的最高写入速度S的预测可以不需要特别精确,而且阈值与最高写入速度S正相关也可以有多种实现方式,作为一种可选的实施方式,本实施例步骤②中根据U盘单位时间内的写入数据量和使用率预测出U盘的最高写入速度S的函数表达式为:S=N/Rate_Busy,其中N为U盘在单位时间里写入完成的写入数据量,Rate_Busy为U盘单位时间内的使用率。[0044]本实施例步骤③中根据U盘的最高写入速度S(单位Kb/s)设置阈值的函数表达式[0045]cache_threshold=(S*小(单位为Kb)。[0047]如图1所示,本实施例中根据当前的阈值限制系统针对U盘的缓存写机制需回写的缓存页数量(图1的步骤④)为基于U盘缓存限制模块实现,U盘缓存限制模块功能如下:当存储介质插入电脑时,缓存限制模块先识别出其是否为U盘,如果为U盘,则限制需要回写到U盘的缓存页数量在一个阈值内,当缓存页数量超过阈值时则不再新分配缓存页,而是采用FIFO先进先出算法先将U盘缓存链表中的缓存页写回到U盘,再回收缓存页使用,以确保需要回写到U盘的缓存页数量可控。如图2所示,本实施例中U盘缓存限制模块根据当前的阈值限制系统针对U盘的缓存写机制需回写的缓存页数量包括:[0048]S101,声明定义U盘缓存限制模块所需的数据结构并初始化;[0049]S102,当存储介质插入电脑时,判断存储介质是否为U盘,并将判断结果存储到存储介质的磁盘描述符中;[0050]S103,当系统通过VFS(VirtualFileSystem,虚拟文件系统)层向存储介质写入数据时,先判断存储介质是否为U盘如果是则运行步骤S104,否则结束运行;[0051]S104,判断被写入的存储介质已缓存的页面数量是否超过阈值,如超过阈值运行步骤S105,如等于阈值运行步骤S106,否则先分配缓存页,并将分配的缓存页插入被写入的[0052]S105,回收U盘缓存链表的缓存页,直到缓存页数量跟阈值相等;[0053]S106,从U盘缓存链表的头部取出一个缓存页,将缓存页中的数据写回到U盘,然后再将该缓存页插入U盘缓存链表尾部。[0054]步骤S101中,声明定义U盘缓存限制模块所需的数据结构并初始化时,包括:[0055]1)在内核SCSI主机适配器的Scsi_Host结构体中新增成员boolis_usb_host,用8[0056]2)在内核磁盘描述符structge的变量is_usb_storage,structlist_headpage_list表示双向链表类型的变量page_[0057]3)在分配磁盘描述符structgendisk结构体的函数_alloc_disk_node()中将is_usb_storage初始化0,cache_threshold初始化为25600(以U盘最大速度为50MB/s,期望速度与期望弹出时间重新设置),page_cached初始化为0,write_num初始化为0,exp_time初始化为2,调用INIT_LIST_HEAD(&page_list)来初始化page_list。一个设备是否可插拔的特性,可以通过这两点来确定是否为U盘。SCSI(SmalSystemInterface小型计算机系统接口)是一种标准化的接口,用于连接计算机和外部设例中,1)在usb存储驱动usb_stor_probel函数中,将在内核SCSI主机适配SCSI命令去查询设备的特性,是否为可插拔设备的标记存储在scsi_device结构体的磁盘描述符后,判断Scsi_Host结构体的is_usb_host成员与scsi_device结构体的gd->is_usb_storage;如果is_usb_storage为1则运行步骤S104,否则结束运行流程并退9[0060]本实施例中步骤S104~S106为对内核操作缓存页面函数pagecache_get_page()量及使用率定时动态调整阈值的大小具体为盘能达到的最高写入速度。本实施例中,步骤S104包括:1)比较已缓存的页面数量gd->>cache_threshold就运行步骤S105,如果gd->page_cached行步骤S106否则运行步骤2);2)调用内核函数page_cache_alloc分配一个缓存页:structpage*page=__page_cach=list_first_entry(gd->page_list,structpage,lru);2)回写缓存页面数据到U盘:(page);4)递减磁盘已缓存的页面数:gd->page_cached--;5)比较已缓存的页面数量gd->=list_first_entry(gd->page_list,structpage,lru);2)回写缓存页面数据到U盘:move_tail(&>lru,&gd->page[0064]具体地,本实施例步骤S201中统计U盘的写入数据量的统计逻辑实现在scsi层的dir(req)是否等于WRITE,如果是则运行步骤2),否则结束步骤S201;需要req->q->disk->is_usb_storage是否为1,如果是则运行步骤3),否则结束步骤S201;3)统函数blk_req_bytes()是内核实现的用于统计读写操作的数据量。gd->write_num;2)设置采样次数intsamping_time为100,设置表示U盘繁忙频率的变量intper_busy为100(整体设计为10ms采样一次,100次采样正好为单位时间1s,per_busy初始为100即先默认磁盘100%繁忙,每当采样到U盘空闲时,per_busy则向下递减1,100次采样结束后,per_busy除以100则可表示单位时间1s里U盘的使用率);3)查看U盘未完成的IO写per_busy向下递减1:per_busy--(U盘未完成的I0写请求数量可以通过内核函数part_in_flight_rw()来获取);4)采样次数向下递减1:samping_times--;5)判断采样次数samping_times是否大于0,如果是则睡眠10ms后再跳转到步骤3),否则运行步骤6);6)单位时间1s的写入数据量为:unit_write=gd->write_num-unit_write;7)单位时间1s的U[0066]具体地,本实施例步骤S203中根据步骤S202的统计预测U盘最高写入速度并更新阈值包括:1)预测U盘最大写入速度:intmax_speed=unit_write/util;2)更新U盘缓[0067]综上所述,本实施例方法实现了一种针对可拔插慢速存储介质——U盘的缓存策略,包括基于U盘缓存限制模块检测存储介质的插入,当存储介质插入电脑时,U盘缓存限制模块先识别出其是否为U盘,如果为U盘,则限制需要回写到U盘的缓存页数量在一个阈值内,当缓存页数量超过阈值时则不再新分配缓存页,而是采用FIFO先进先出算法先将U盘缓存链表中的缓存页写回到U盘,再回收缓存页使用,以确保需要回写到U盘的缓存页数量可控;其次基于U盘最高写入速度预测模块,统计单位时间内U盘的写入数据量及U盘的使用率,则可预测U盘能达到的最高写入速度。上述缓存策略通过依据用户使用U盘的特点,动态预测U盘最大写入速度,进而以此为依据来限制系统U盘文件缓存页数量,本实施例方法既能在一定程度上保证应用的读写操作性能,又能保证U盘弹出操作时的缓存回写耗时的可控性,解决了当前Linux文件缓存管理策略下可能存在的U盘弹出时间长、用户体验差的问[0068]此外,本实施例还提供一种Linux系统下提升U盘弹出速度的系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述Linux系统下提升U盘弹出速度的方法。[0069]此外,本实施例还提供一种计算机可读存储介质,该计算机可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论