一种应用独立缓存系统及方法
技术领域
本发明涉及计算机存储技术领域,更具体地,本发明涉及基于Linux操作系统的存储性能优化领域。
背景技术
随着信息技术的发展,数据存储量呈指数级增长,各领域对大容量存储设备需求越来越大,同时对存储系统的I/O性能要求也越来越高。缓存技术作为优化存储系统I/O性能的重要手段,其对存储系统性能优化作用主要表现在两个方面:①访问高速缓存命中可减少对慢速磁盘的访问;②包含预取及回写在内的缓存算法能有效增强磁盘I/O访问的顺序性,提高磁盘带宽利用率。但基于Linux操作系统的缓存系统存在以下问题:
1、Linux针对同时运行的所有应用提供的统一的缓存系统,而不同应用I/O特性相差较大,Linux缓存系统无法针对特定应用的I/O特性做独立优化,或者针对某个应用的优化,却可能导致其他应用性能变差;
2、同时运行的多个应用争抢Linux管理的全局缓存资源,数据访问局部性弱的应用将会抢占大多数缓存资源,却不能获得与之相匹配的性能提升;而数据访问局部性强的应用由于得不到足够的缓存,性能急剧下降,导致存储系统整体性能下降。
发明内容
为了解决现有基于Linux操作系统的缓存系统存在的、当多个应用同时运行时存在争抢缓存资源的问题,本申请提出一种应用独立缓存系统及方法。
本发明所述的应用独立缓存系统为每个应用分配一块内存作为该应用独立管理的缓存资源,并在该应用单独访问的物理块设备之上构建一个内存块设备,该内存块设备在Linux内核空间呈现为一个虚拟的磁盘块设备。
上述每个内存块设备包含三个参数:该内存块设备所对应的真正物理块设备、系统分配给的缓存资源、可配置的块设备缓存处理策略模块。
所述的块设备缓存处理策略模块包括I/O处理策略模块、缓存回写策略模块、缓存替换策略模块以及缓存分配管理模块四大模块,所述四大模块的功能分别为:
所述的I/O处理策略模块用于处理、过滤上层来的读写I/O请求;
所述的缓存回写策略模块,用于对待写入底层物理块设备的I/O数据,在接收到内存块设备反馈的写入成功标志之后,再根据缓存回写策略将数据写入到对应的物理块设备中;
所述的缓存替换策略模块:用于当应用写入数据时,当分配给该内存块设备的缓存空间使用率达到一定限值时,从内存中回收缓存资源,以释放内存空间;
所述的缓存分配管理模块,用于维护一个内存块设备可用及已用缓存资源空间链表。
所述应用独立缓存系统在某个内存块设备接受来自应用的I/O请求时,采用事先配置的、适应于该应用的I/O特性的缓存管理策略,在内存中对来自应用的I/O请求采用组合、过滤、排队等多种方式处理,并将零散的I/O请求聚合成顺序的I/O请求,然后经Linux缓存系统,去访问底层真正的物理块设备。
本发明所述的应用独立缓存方法为每个应用分配一块内存作为该应用独立管理的缓存资源,并在该应用单独访问的物理块设备之上构建一个内存块设备,该内存块设备在Linux内核空间呈现为一个虚拟的磁盘块设备;在应用存取数据时,访问该应用所单独访问的物理块设备上所构建的内存块设备,该内存块设备虚拟作为中间代理,根据为该应用设置的独立缓存策略,对应用I/O请求进行进一步处理后,再去访问真正的物理块设备。
所述的每个应用所对应的内存块设备均包含三个参数:该内存块设备所对应的真正物理块设备、系统分配给的缓存资源、可配置的块设备缓存处理策略。
所述的块设备缓存处理策略包括I/O处理策略、缓存回写策略、缓存替换策略以及缓存分配管理策略。
所述的I/O处理策略用于处理、过滤上层来的读写I/O请求。
所述的缓存回写策略,用于对待写入底层物理块设备的I/O数据,在接收到内存块设备反馈的写入成功标志之后,再根据缓存回写策略将数据写入到对应的物理块设备中。
所述的缓存替换策略:用于当应用写入数据时,当分配给该内存块设备的缓存空间使用率达到一定限值时,从内存中回收缓存资源,以释放内存空间。
所述的缓存分配管理策略,用于维护一个内存块设备可用及已用缓存资源空间链表。
所述应用独立缓存方法中,当所述内存块设备接受来自应用的I/O请求时,采用事先配置的、适用于该应用的I/O特性的缓存管理策略,在该内存块设备中对来自该应用的I/O请求采用组合、过滤、排队等多种方式处理,并将零散的、小的I/O请求聚合成顺序I/O请求,然后经Linux缓存系统去访问底层中与该应用对应的真正物理块设备。
本发明所述的应用独立缓存系统及方法是在现有Linux缓存系统的基础上而设计的,本发明所述的缓存系统与现有的Linux缓存系统构成二级缓存系统。在二级缓存系统中,可以根据应用不同I/O特性采用不同的缓存策略,对该应用存储性能做独立优化;同时该应用能使用的缓存资源由系统独立为其分配,不会发生多个应用争抢缓存资源而导致的系统整体性能下降的情况发生。
本发明所述的应用独立缓存系统的缓存框架,使得各个应用的缓存空间相互隔离,不会互相影响。另外,作为虚拟的磁盘块设备的内存块设备,可配置单独缓存处理策略,使不同应用可以采用不同的策略来做独立优化。
采用本发明所述的应用独立缓存系统及方法,可以针对不同应用采用不同的优化策略,同时避免各应用之间相互干扰,从局部到整体全面提升存储系统的性能。在同等硬件条件下,采用本缓存系统构建的存储系统具有更高的性价比。
附图说明
图1是本发明所述的应用独立缓存系统的框架示意图。
图2是是内存块设备I/O处理流程及缓存管理模型。
具体实施方式
具体实施方式一、参见图1说明本实施方式。本实施方式所述的应用独立缓存系统,为每个应用分配一块内存作为该应用独立管理的缓存资源,并在该应用单独访问的物理块设备之上构建一个内存块设备,该内存块设备在Linux内核空间呈现为一个虚拟的磁盘块设备。
所述虚拟的磁盘块设备作为一个Linux内核块设备驱动程序,对系统提供标准的make_request函数,作为操作系统I/O访问接口。
具体实施方式二、本实施方式是对具体实施方式一所述的应用独立缓存系统的进一步限定,本实施方式中所述的每个内存块设备包含三个参数:该内存块设备所对应的真正物理块设备、系统分配给的缓存资源、可配置的块设备缓存处理策略模块。
本实施方式中,针对每个应用配置独立的块设备缓存处理策略对应用的I/O数据进行处理。
具体实施方式三、本实施方式是对具体实施方式二所述的应用独立缓存系统的进一步限定,本实施方式中所述的块设备缓存处理策略模块包括I/O处理策略模块、缓存回写策略模块、缓存替换策略模块以及缓存分配管理模块四大模块。
具体实施方式四、本实施方式是对具体实施方式三所述的应用独立缓存系统的进一步限定,本实施方式中所述的I/O处理策略模块用于处理、过滤上层来的读写I/O请求。
本实施方式所述的I/O处理策略模块的功能例如:将众多的小I/O合并成大的I/O请求,进而减少底层的I/O请求数量,增强I/O的顺序性等。在实际应用中,该种I/O处理策略是根据应用的I/O特性进行设定编制的。
具体实施方式五、本实施方式是对具体实施方式三所述的应用独立缓存系统的进一步限定,本实施方式中所述的缓存回写策略模块,用于对待写入底层物理块设备的I/O数据,在接收到内存块设备反馈的写入成功标志之后,再根据缓存回写策略将数据写入到对应的物理块设备中。
本实施方式所述的缓存回写策略模块并不立即将I/O数据写入到所对应的应用的底层物理块设备中,而是在成功写入到内存块设备后,即接收到返回写入成功标志后,根据缓存回写策略,在合适的时机将数据真正写入到相应的物理块设备,这样能够有效提高存储设备写入速度。该缓存回写策略可根据各种应用的I/O特性而设定。
具体实施方式六、本实施方式是对具体实施方式三所述的应用独立缓存系统的进一步限定,本实施方式中所述的缓存替换策略模块:用于当应用写入数据时,当分配给该内存块设备的缓存空间使用率达到一定限值时,从内存中回收缓存资源,以释放内存空间。
当应用写入数据时,会占用内存空间进行I/O数据缓存,而当应用读取数据时,如发生缓存失效,内存块设备会从真正的物理块设备读取数据,并放置到缓存中;当分配给该内存块设备的缓存空间使用率达到一定限值时,需要使用本实施方式所述的缓存替换策略从内存中回收缓存资源。
所述从内存中回收缓存资源以释放内存空间的方法,例如:可以将修改后的某些数据写入到物理磁盘后释放缓内存资源,或者直接丢弃部分从物理磁盘读出但未修改的数据,进而达到释放内存空间的效果。在实际应用中,需要具体释放哪些内存空间,将新数据放入哪块内存空间,均由缓存替换策略决定。缓存替换策略需要根据应用的I/O特性来编制。
具体实施方式七、本实施方式是对具体实施方式三所述的应用独立缓存系统的进一步限定,本实施方式中所述的缓存分配管理模块,用于维护一个内存块设备可用及已用缓存资源空间链表。
当内存块设备需要缓存时,该缓存分配管理模块用于从可用内存中分配缓存空间;当缓存替换策略决定从某块空间回收内存资源时,则将数据回写到Linux缓存系统后,然后释放相应的内存资源。
本实施方式所述的应用独立缓存系统能够为每个应用独立管理自身的缓存空间,因此该系统的块设备缓存处理策略可以根据应用的I/O特性设定独立的缓存管理策略,同时避免各应用之间相互干扰,达到从整体到全局全面优化存储系统性能的目的。
具体实施方式八、参见图2说明本实施方式。本实施方式是对具体实施方式一所述的应用独立缓存系统的进一步限定,所述应用独立缓存系统,在某个内存块设备接受来自应用的I/O请求时,采用事先配置的、适应于该应用的I/O特性的缓存管理策略,在内存中对来自应用的I/O请求采用组合、过滤、排队等多种方式处理,并将零散的I/O请求聚合成顺序的I/O请求,然后经Linux缓存系统,去访问底层真正的物理块设备。
具体实施方式九、参见图1说明本实施方式。本实施方式所述的应用独立缓存方法,该方法为每个应用分配一块内存作为该应用独立管理的缓存资源,并在该应用单独访问的物理块设备之上构建一个内存块设备,该内存块设备在Linux内核空间呈现为一个虚拟的磁盘块设备;在应用存取数据时,访问该应用所单独访问的物理块设备上所构建的内存块设备,该内存块设备虚拟作为中间代理,根据为该应用设置的独立缓存策略,对应用I/O请求进行进一步处理后,再去访问真正的物理块设备。
本实施方式所述的应用独立缓存方法能够为每个应用独立管理自身的缓存空间,因此该系统的块设备缓存处理策略可以根据应用的I/O特性设定独立的缓存管理策略,同时避免各应用之间相互干扰,达到从整体到全局全面优化存储系统性能的目的。
具体实施方式十、本实施方式是对具体实施方式九所述的应用独立缓存方法的进一步限定,本实施方式中,所述的每个应用所对应的内存块设备均包含三个参数:该内存块设备所对应的真正物理块设备、系统分配给的缓存资源、可配置的块设备缓存处理策略。
所述可配置的块设备缓存处理策略是根据所述内存块设备对应的应用的性能来编制和设定的。
具体实施方式十一、本实施方式是对具体实施方式十所述的应用独立缓存方法的进一步限定,本实施方式中所述的块设备缓存处理策略包括I/O处理策略、缓存回写策略、缓存替换策略以及缓存分配管理策略。
具体实施方式十二、本实施方式是对具体实施方式十一所述的应用独立缓存方法的进一步限定,本实施方式中所述的I/O处理策略用于处理、过滤上层来的读写I/O请求。
本实施方式所述的I/O处理策略的功能例如:将众多的小I/O合并成大的I/O请求,进而减少底层的I/O请求数量,增强I/O的顺序性等。在实际应用中,该种I/O处理策略是根据应用的I/O特性进行设定编制的。
具体实施方式十三、本实施方式是对具体实施方式十一所述的应用独立缓存方法的进一步限定,本实施方式中所述的缓存回写策略,用于对待写入底层物理块设备的I/O数据,在接收到内存块设备反馈的写入成功标志之后,再根据缓存回写策略将数据写入到对应的物理块设备中。
本实施方式所述的缓存回写策略并不立即将I/O数据写入到所对应的应用的底层物理块设备中,而是在成功写入到内存块设备后,即接收到返回写入成功标志后,根据缓存回写策略,在合适的时机将数据真正写入到相应的物理块设备,这样能够有效提高存储设备写入速度。该缓存回写策略可根据各种应用的I/O特性而设定。
具体实施方式十四、本实施方式是对具体实施方式十一所述的应用独立缓存方法的进一步限定,本实施方式中所述的缓存替换策略:用于当应用写入数据时,当分配给该内存块设备的缓存空间使用率达到一定限值时,从内存中回收缓存资源,以释放内存空间。
当应用写入数据时,会占用内存空间进行I/O数据缓存,而当应用读取数据时,如发生缓存失效,内存块设备会从真正的物理块设备读取数据,并放置到缓存中;当分配给该内存块设备的缓存空间使用率达到一定限值时,需要使用本实施方式所述的缓存替换策略从内存中回收缓存资源。
所述从内存中回收缓存资源以释放内存空间的方法,例如:可以将修改后的某些数据写入到物理磁盘后释放缓内存资源,或者直接丢弃部分从物理磁盘读出但未修改的数据,进而达到释放内存空间的效果。在实际应用中,需要具体释放哪些内存空间,将新数据放入哪块内存空间,均由缓存替换策略决定。缓存替换策略需要根据应用的I/O特性来编制。
具体实施方式十五、本实施方式是对具体实施方式十一所述的应用独立缓存方法的进一步限定,本实施方式中所述的缓存分配管理策略,用于维护一个内存块设备可用及已用缓存资源空间链表。
当内存块设备需要缓存时,该缓存分配管理策略用于从可用内存中分配缓存空间;当缓存替换策略决定从某块空间回收内存资源时,则将数据回写到Linux缓存系统后,然后释放相应的内存资源。
具体实施方式十六、参见图2说明本实施方式。本实施方式是对具体实施方式九所述的应用独立缓存方法的进一步限定,本实施方式中,当所述内存块设备接受来自应用的I/O请求时,采用事先配置的、适用于该应用的I/O特性的缓存管理策略,在该内存块设备中对来自该应用的I/O请求采用组合、过滤、排队等多种方式处理,并将零散的、小的I/O请求聚合成顺序I/O请求,然后经Linux缓存系统去访问底层中与该应用对应的真正物理块设备。
本发明适合于基于Linux操作系统的存储系统性能的优化,同时为其它类型的存储系统性能优化提供了可借鉴的思路。其优点在于:
1)本缓存系统可根据应用I/O特性,设置不同的缓存管理策略,以独立优化应用存储性能,同时避免应用之间相互干扰,从局部到整体全面提升存储系统性能;
2)在同等硬件条件下,存储设备采用本缓存框架提供的软件方法提升存储系统性能,可开发具有高性价比的存储设备,扩展其应用领域,提高设备竞争力;
3)本缓存系统采用面向对象、开放式思想设计,将各种管理策略封装成具有标准接口、可配置的独立模块,具有良好的可用性及扩展性。