CN104049918B - 一种双控存储服务器的缓存管理方法 - Google Patents

一种双控存储服务器的缓存管理方法 Download PDF

Info

Publication number
CN104049918B
CN104049918B CN201410313259.1A CN201410313259A CN104049918B CN 104049918 B CN104049918 B CN 104049918B CN 201410313259 A CN201410313259 A CN 201410313259A CN 104049918 B CN104049918 B CN 104049918B
Authority
CN
China
Prior art keywords
cache blocks
cache
data
disk
storage server
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
CN201410313259.1A
Other languages
English (en)
Other versions
CN104049918A (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.)
Chongqing Inspur Government Cloud Management and Operation Co Ltd
Original Assignee
Inspur Group Co Ltd
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 Inspur Group Co Ltd filed Critical Inspur Group Co Ltd
Priority to CN201410313259.1A priority Critical patent/CN104049918B/zh
Publication of CN104049918A publication Critical patent/CN104049918A/zh
Application granted granted Critical
Publication of CN104049918B publication Critical patent/CN104049918B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种双控存储服务器的缓存管理方法,属于一种缓存管理方法,在ISCSI网络存储服务器架构中,对双控存储服务器进行缓存管理,从linux系统管理的内存中划分出一块连续空间作为独立缓存模块,将独立缓存模块均匀划分为多个缓存块,将物理磁盘均匀划分为多个磁盘逻辑块,一个缓存块可以映射任意一个磁盘逻辑块的数据,将缓存块标记状态,使用双向循环链表分别管理空闲缓存块和使用缓存块。本发明的一种双控存储服务器的缓存管理方法和现有技术相比,提高存储服务器的可靠性,解决因为存储控制器单点故障导致的数据丢失和服务中断的问题。

Description

一种双控存储服务器的缓存管理方法
技术领域
本发明涉及一种缓存管理方法,具体地说是一种双控存储服务器的缓存管理方法。
背景技术
存储服务器典型的应用是作为网络存储设备或者文件服务器,为应用主机提供数据,保存文件。主流的网络存储服务器架构一般由应用主机、网络交换机、存储控制器、磁盘阵列等部分组成。主机通过IP网络或者交换机连接到存储控制器,存储控制器操作磁盘阵列,响应主机下发的数据请求。主机和存储控制器之间有多种通信方式。
网络存储服务器架构中,iSCSI网络存储服务器是基于千兆或万兆TCP-IP网络,采用iSCSI作为网络通信协议。iSCSI( Internet Small Computer System Interface网络小型计算机系统接口)协议本质上是基于TCP/IP网络交换SCSI指令和数据,它可以在已有的交换机和 IP 网络上运行,不需要专门的线缆和网络。用IP协议将存储设备连接在一起,iSCSI网络存储服务器使得计算机可以透过高速的局域网来把远程存储设备模拟成为本地的储存装置,就像操作本地文件系统一样操作网络存储设备。
典型的ISCSI网络存储服务器由主机、IP网络、存储控制器、磁盘阵列等部分组成,各个部分的主要功能如下:
1、主机:在iSCSI存储中,主机也被成为Initiator,可能是网络服务器,数据库服务器或者文件服务器。主机通过Initiator软件发现iSCSI存储设备,将远程存储设备虚拟为本地文件系统。
2、IP网络:存储系统使用TCP/IP网络交换iSCSI指令和数据,数据以IO块为单位实现主机端和存储设备之间的数据传输。目前主流的IP网络是使用千兆或者万兆以太网,可以满足存储系统对传输速率的要求。
3、存储控制器:磁盘阵列控制器,也被成为Target端,控制磁盘阵列,对外提供网络传输接口。存储控制器本质上是一台运行LINUX系统的计算机,缓存即存在于存储控制器的内存中,采用专用的数据处理芯片,具有RAID和SAS磁盘接口。存储控制器上运行专门的iSCSI存储控制软件,实现iSCSI指令的解析,读写磁盘数据。本项目使用iSCSI EnterpriseTarget作为控制器软件,增加缓存模块,并且实现缓存同步。
4、磁盘阵列:磁盘阵列一般使用SAS物理磁盘,数据采用RAID方式存放,实现物理磁盘数据冗余,防止单个物理磁盘损坏造成数据丢失。磁盘阵列与控制器之间使用SAS卡或者SCSI卡连接。
存储控制器软件属于存储服务器系统的核心部件。现有的开源ISCSI控制器软件IET(ISCSI Enterprise Target)并没有独立的缓存部件,IET采用两种IO模式:file IO和block IO。FileIO直接将接收到的数据提交到Linux VFS虚拟文件系统,虽然VFS拥有pagecache缓存,但是这样增长了IO路径。BlockIO直接将接收到的数提交通用块设备层,没有缓存空间。IET是针对单控制器的,没有双控制器所需要的同步缓存功能,需要在增加独立缓存模块的基础上设计同步缓存。双控制器需要实现两个控制器端软件的通信,故障检测,需要设计一整套心跳协议。总结来说,IET本身没有实现缓存机制,IET是面向单控制器的,没有考虑双控制器面临的缓存同步和心跳问题。
双控存储服务器在缓存方面存在一些问题:速度较慢、容易丢失数据、可靠性差。
发明内容
本发明的技术任务是提供一种提高存储服务器的可靠性,解决因为存储控制器单点故障导致的数据丢失和服务中断的一种双控存储服务器的缓存管理方法。
本发明的技术任务是按以下方式实现的,
一种双控存储服务器的缓存管理方法,在ISCSI网络存储服务器架构中,对双控存储服务器进行缓存管理,包括如下步骤:
(1)、双控存储服务器linux系统启动时从linux系统管理的内存中划分出一块连续空间作为独立缓存模块,该独立缓存模块自主管理;
(2)、将独立缓存模块均匀划分为多个缓存块,将双控存储服务器的物理磁盘以同等数量的磁盘扇区为单位均匀划分为多个磁盘逻辑块,每个磁盘逻辑块所含磁盘扇区的数量对应磁盘逻辑块最大的数据容量,每个磁盘逻辑块最大的数据容量与每个缓存块最大可缓存的数据容量一致;
(3)、一个缓存块可以映射任意一个磁盘逻辑块的数据;
(4)、基于缓存块与对应映射的磁盘逻辑块之间的数据状态关系,把缓存块标记为如下状态:空闲状态、干净状态、脏块状态、无效状态;
空闲状态为该缓存块没有映射到任何磁盘逻辑块,可以被分配存放数据;干净状态为该缓存块已经映射到某个磁盘逻辑块,缓存块中的数据和磁盘逻辑块中的数据是一致的;脏块状态为该缓存块中的数据比相映射的磁盘逻辑块中的数据要新;无效状态为该缓存块不可用;
(5)、每一个缓存块(buffer block)都有一一对应的数据结构体(struct buffer_page),数据结构体保存该缓存块的相关信息,通过数据结构体来对该缓存块进行操作;
(6)、将所有非无效状态的缓存块分为两种:空闲缓存块与使用缓存块,空闲状态的缓存块为空闲缓存块,干净状态与脏块状态的缓存块为使用缓存块;
使用双向循环链表分别管理空闲缓存块和使用缓存块,双向循环链表内保存的是指向对应缓存块的数据结构体的指针;
双向循环链表包括空闲链表、LRU链表、写回链表,空闲链表保存的指针为指向空闲缓存块的数据结构体的指针,LRU链表保存的指针为指向使用缓存块的数据结构体的指针,写回链表保存的指针为指向需要写回磁盘的脏块状态的缓存块的数据结构体的指针;
(7)、双控存储服务器linux系统中,当需要申请新的缓存块时,从空闲链表头部获得;
(8)、双控存储服务器linux系统中,若访问的缓存块的数据结构体的指针在LRU链表中,表示该缓存块为使用缓存块;
(9)、双控存储服务器linux系统中,缓存同步模块访问写回链表,将脏块状态的缓存块内的数据同步刷新到相对应的磁盘逻辑块内。一个指向脏块状态的缓存块的数据结构体的指针同时位于LRU链表和写回链表中。
步骤(1)中的独立缓存模块分为两部分,一部分作为保存磁盘阵列缓存数据空间,另一部分作为保存与缓存组织和管理相关的数据结构空间。
步骤(2)中,缓存块大小为4KB,等于一个内存页(page)大小,缓存块是缓存访问的基本单位;每个缓存块最大容纳8个磁盘扇区的数据,将物理磁盘以8个磁盘扇区为单位划分为若干磁盘逻辑块,一个缓存块可以映射任意一个磁盘逻辑块。
步骤(5)中,数据结构体内保存的缓存块信息包括:缓存块是否空闲信息、缓存块对应的磁盘逻辑块信息、缓存块是否脏数据信息、缓存块引用状态信息、扇区有效信息。
双控存储服务器使用双控制器软件,双控制器软件在基于ISCSI控制器软件上增加独立缓存模块软件、缓存同步模块软件和心跳检测模块软件;通过双控制器软件的独立缓存模块软件实现独立缓存模块的划分及管理,通过双控制器软件的缓存同步模块软件实现缓存同步模块访问写回链表,将脏块状态的缓存块内的数据同步刷新到相对应的磁盘逻辑块内;通过双控制器软件的心跳检测模块软件来实时监测双控存储服务器工作是否正常,如果心跳超时,则进行故障切换。实现了双控存储服务器持续性。
使用哈希表(英文为Hash Table,也称散列表)来管理使用缓存块;
哈希表的表项是一个队列,队列中存放的是具有相同哈希值的缓存块的数据结构体,称为hash链;同一条hash链中的不同缓存块的数据结构体通过不同的LBA值来准确区分;
查找某个缓存块的数据结构体,首先根据计算得到的哈希值找到对应的哈希表的表项,从而获得hash链队列的头,然后遍历该hash链队列准确匹配LBA值确定目标是否存在。在哈希表足够大的情况,且哈希函数设计合理,每个哈希表表项所指向的hash链不会很长,所以哈希表匹配速度可以满足要求。
缓存块的数据结构体的哈希值通过磁盘逻辑块号、块设备编号和HashTable大小计算获得,计算哈希值使用的哈希函数如下:
哈希值=(bdev ^ blknr) % HashTable_SIZE;
其中,HashTable_SIZE为哈希表大小,bdev为操作的块设备编号,blknr为缓存块对应的磁盘逻辑块号。
采用HashTable方式来管理缓存,快速高效,能够在O(1)时间返回查询结果,实现简单,同时具有良好的可移植性。缺点是HashTable太小的话发生冲突的概率会增大,为了降低冲突概率,HashTable通常比较大,会占用较大的空间。
本发明的一种双控存储服务器的缓存管理方法具有以下优点:
1、独立缓存模块可以减少存储控制器对物理磁盘的访问,大大降低响应时间,提升控制器的性能;
2、为双控存储服务器工作模式提供缓存同步机制,使得缓存中的脏数据在镜像控制器中存在备份,即使控制器挂掉,也不会丢失数据;
3、实现故障检测和切换,通过心跳协议来实时监测控制器工作是否正常,如果心跳超时,则进行故障切换,实现了服务器持续性;
4、填补国内在双控存储服务器方面的空白,满足市场对中端双控存储服务器的需求。
附图说明
下面结合附图对本发明进一步说明。
附图1为一种双控存储服务器的缓存管理方法的独立缓存模块组织示意框图;
附图2为一种双控存储服务器的缓存管理方法的缓存块与磁盘逻辑块的映射关系示意框图;
附图3为一种双控存储服务器的缓存管理方法的双向循环链表示意框图;
附图4为一种双控存储服务器的缓存管理方法的缓存HashTable和双向循环链表示意框图。
具体实施方式
参照说明书附图和具体实施例对本发明的一种双控存储服务器的缓存管理方法作以下详细地说明。
实施例1:
本发明的一种双控存储服务器的缓存管理方法,在ISCSI网络存储服务器架构中,对双控存储服务器进行缓存管理,包括如下步骤:
(1)、双控存储服务器linux系统启动时从linux系统管理的内存中划分出一块连续空间作为独立缓存模块,该独立缓存模块自主管理;
(2)、将独立缓存模块均匀划分为多个缓存块,将双控存储服务器的物理磁盘以同等数量的磁盘扇区为单位均匀划分为多个磁盘逻辑块,每个磁盘逻辑块所含磁盘扇区的数量对应磁盘逻辑块最大的数据容量,每个磁盘逻辑块最大的数据容量与每个缓存块最大可缓存的数据容量一致;
(3)、一个缓存块可以映射任意一个磁盘逻辑块的数据;
(4)、基于缓存块与对应映射的磁盘逻辑块之间的数据状态关系,把缓存块标记为如下状态:空闲状态、干净状态、脏块状态、无效状态;
空闲状态为该缓存块没有映射到任何磁盘逻辑块,可以被分配存放数据;干净状态为该缓存块已经映射到某个磁盘逻辑块,缓存块中的数据和磁盘逻辑块中的数据是一致的;脏块状态为该缓存块中的数据比相映射的磁盘逻辑块中的数据要新;无效状态为该缓存块不可用;
(5)、每一个缓存块(buffer block)都有一一对应的数据结构体(struct buffer_page),数据结构体保存该缓存块的相关信息,通过数据结构体来对该缓存块进行操作;
(6)、将所有非无效状态的缓存块分为两种:空闲缓存块与使用缓存块,空闲状态的缓存块为空闲缓存块,干净状态与脏块状态的缓存块为使用缓存块;
使用双向循环链表分别管理空闲缓存块和使用缓存块,双向循环链表内保存的是指向对应缓存块的数据结构体的指针;
双向循环链表包括空闲链表、LRU链表、写回链表,空闲链表保存的指针为指向空闲缓存块的数据结构体的指针,LRU链表保存的指针为指向使用缓存块的数据结构体的指针,写回链表保存的指针为指向需要写回磁盘的脏块状态的缓存块的数据结构体的指针;
(7)、双控存储服务器linux系统中,当需要申请新的缓存块时,从空闲链表头部获得;
(8)、双控存储服务器linux系统中,若访问的缓存块的数据结构体的指针在LRU链表中,表示该缓存块为使用缓存块;
(9)、双控存储服务器linux系统中,缓存同步模块访问写回链表,将脏块状态的缓存块内的数据同步刷新到相对应的磁盘逻辑块内。一个指向脏块状态的缓存块的数据结构体的指针同时位于LRU链表和写回链表中。
基于上述的一种双控存储服务器的缓存管理方法,可以实现在双控存储服务器中,缓存可靠性强,使得系统处理速度快,且保证了数据的安全不丢失。
实施例2:
本发明的一种双控存储服务器的缓存管理方法,在ISCSI网络存储服务器架构中,对双控存储服务器进行缓存管理,包括如下步骤:
(1)、双控存储服务器linux系统启动时从linux系统管理的内存中划分出一块连续空间作为独立缓存模块,该独立缓存模块自主管理;
(2)、将独立缓存模块均匀划分为多个缓存块,将双控存储服务器的物理磁盘以同等数量的磁盘扇区为单位均匀划分为多个磁盘逻辑块,每个磁盘逻辑块所含磁盘扇区的数量对应磁盘逻辑块最大的数据容量,每个磁盘逻辑块最大的数据容量与每个缓存块最大可缓存的数据容量一致;
(3)、一个缓存块可以映射任意一个磁盘逻辑块的数据;
(4)、基于缓存块与对应映射的磁盘逻辑块之间的数据状态关系,把缓存块标记为如下状态:空闲状态、干净状态、脏块状态、无效状态;
空闲状态为该缓存块没有映射到任何磁盘逻辑块,可以被分配存放数据;干净状态为该缓存块已经映射到某个磁盘逻辑块,缓存块中的数据和磁盘逻辑块中的数据是一致的;脏块状态为该缓存块中的数据比相映射的磁盘逻辑块中的数据要新;无效状态为该缓存块不可用;
(5)、每一个缓存块(buffer block)都有一一对应的数据结构体(struct buffer_page),数据结构体保存该缓存块的相关信息,通过数据结构体来对该缓存块进行操作;
(6)、将所有非无效状态的缓存块分为两种:空闲缓存块与使用缓存块,空闲状态的缓存块为空闲缓存块,干净状态与脏块状态的缓存块为使用缓存块;
使用双向循环链表分别管理空闲缓存块和使用缓存块,双向循环链表内保存的是指向对应缓存块的数据结构体的指针;
双向循环链表包括空闲链表、LRU链表、写回链表,空闲链表保存的指针为指向空闲缓存块的数据结构体的指针,LRU链表保存的指针为指向使用缓存块的数据结构体的指针,写回链表保存的指针为指向需要写回磁盘的脏块状态的缓存块的数据结构体的指针;
(7)、双控存储服务器linux系统中,当需要申请新的缓存块时,从空闲链表头部获得;
(8)、双控存储服务器linux系统中,若访问的缓存块的数据结构体的指针在LRU链表中,表示该缓存块为使用缓存块;
(9)、双控存储服务器linux系统中,缓存同步模块访问写回链表,将脏块状态的缓存块内的数据同步刷新到相对应的磁盘逻辑块内。一个指向脏块状态的缓存块的数据结构体的指针同时位于LRU链表和写回链表中。
步骤(1)中的独立缓存模块分为两部分,一部分作为保存磁盘阵列缓存数据空间,另一部分作为保存与缓存组织和管理相关的数据结构空间。
步骤(2)中,缓存块大小为4KB,等于一个内存页(page)大小,缓存块是缓存访问的基本单位;每个缓存块最大容纳8个磁盘扇区的数据,将物理磁盘以8个磁盘扇区为单位划分为若干磁盘逻辑块,一个缓存块可以映射任意一个磁盘逻辑块。
步骤(5)中,数据结构体内保存的缓存块信息包括:缓存块是否空闲信息、缓存块对应的磁盘逻辑块信息、缓存块是否脏数据信息、缓存块引用状态信息、扇区有效信息。
双控存储服务器使用双控制器软件,双控制器软件在基于ISCSI控制器软件上增加独立缓存模块软件、缓存同步模块软件和心跳检测模块软件;通过双控制器软件的独立缓存模块软件实现独立缓存模块的划分及管理,通过双控制器软件的缓存同步模块软件实现缓存同步模块访问写回链表,将脏块状态的缓存块内的数据同步刷新到相对应的磁盘逻辑块内;通过双控制器软件的心跳检测模块软件来实时监测双控存储服务器工作是否正常,如果心跳超时,则进行故障切换。实现了双控存储服务器持续性。
实施例3:
本发明的一种双控存储服务器的缓存管理方法,在ISCSI网络存储服务器架构中,对双控存储服务器进行缓存管理,包括如下步骤:
(1)、双控存储服务器linux系统启动时从linux系统管理的内存中划分出一块连续空间作为独立缓存模块,该独立缓存模块自主管理;
(2)、将独立缓存模块均匀划分为多个缓存块,将双控存储服务器的物理磁盘以同等数量的磁盘扇区为单位均匀划分为多个磁盘逻辑块,每个磁盘逻辑块所含磁盘扇区的数量对应磁盘逻辑块最大的数据容量,每个磁盘逻辑块最大的数据容量与每个缓存块最大可缓存的数据容量一致;
(3)、一个缓存块可以映射任意一个磁盘逻辑块的数据;
(4)、基于缓存块与对应映射的磁盘逻辑块之间的数据状态关系,把缓存块标记为如下状态:空闲状态、干净状态、脏块状态、无效状态;
空闲状态为该缓存块没有映射到任何磁盘逻辑块,可以被分配存放数据;干净状态为该缓存块已经映射到某个磁盘逻辑块,缓存块中的数据和磁盘逻辑块中的数据是一致的;脏块状态为该缓存块中的数据比相映射的磁盘逻辑块中的数据要新;无效状态为该缓存块不可用;
(5)、每一个缓存块(buffer block)都有一一对应的数据结构体(struct buffer_page),数据结构体保存该缓存块的相关信息,通过数据结构体来对该缓存块进行操作;
(6)、将所有非无效状态的缓存块分为两种:空闲缓存块与使用缓存块,空闲状态的缓存块为空闲缓存块,干净状态与脏块状态的缓存块为使用缓存块;
使用双向循环链表分别管理空闲缓存块和使用缓存块,双向循环链表内保存的是指向对应缓存块的数据结构体的指针;
双向循环链表包括空闲链表、LRU链表、写回链表,空闲链表保存的指针为指向空闲缓存块的数据结构体的指针,LRU链表保存的指针为指向使用缓存块的数据结构体的指针,写回链表保存的指针为指向需要写回磁盘的脏块状态的缓存块的数据结构体的指针;
(7)、双控存储服务器linux系统中,当需要申请新的缓存块时,从空闲链表头部获得;
(8)、双控存储服务器linux系统中,若访问的缓存块的数据结构体的指针在LRU链表中,表示该缓存块为使用缓存块;
(9)、双控存储服务器linux系统中,缓存同步模块访问写回链表,将脏块状态的缓存块内的数据同步刷新到相对应的磁盘逻辑块内。一个指向脏块状态的缓存块的数据结构体的指针同时位于LRU链表和写回链表中。
步骤(1)中的独立缓存模块分为两部分,一部分作为保存磁盘阵列缓存数据空间,另一部分作为保存与缓存组织和管理相关的数据结构空间。
步骤(2)中,缓存块大小为4KB,等于一个内存页(page)大小,缓存块是缓存访问的基本单位;每个缓存块最大容纳8个磁盘扇区的数据,将物理磁盘以8个磁盘扇区为单位划分为若干磁盘逻辑块,一个缓存块可以映射任意一个磁盘逻辑块。
步骤(5)中,数据结构体内保存的缓存块信息包括:缓存块是否空闲信息、缓存块对应的磁盘逻辑块信息、缓存块是否脏数据信息、缓存块引用状态信息、扇区有效信息。
双控存储服务器使用双控制器软件,双控制器软件在基于ISCSI控制器软件上增加独立缓存模块软件、缓存同步模块软件和心跳检测模块软件;通过双控制器软件的独立缓存模块软件实现独立缓存模块的划分及管理,通过双控制器软件的缓存同步模块软件实现缓存同步模块访问写回链表,将脏块状态的缓存块内的数据同步刷新到相对应的磁盘逻辑块内;通过双控制器软件的心跳检测模块软件来实时监测双控存储服务器工作是否正常,如果心跳超时,则进行故障切换。实现了双控存储服务器持续性。
使用哈希表(英文为Hash Table,也称散列表)来管理使用缓存块;
哈希表的表项是一个队列,队列中存放的是具有相同哈希值的缓存块的数据结构体,称为hash链;同一条hash链中的不同缓存块的数据结构体通过不同的LBA值来准确区分;
查找某个缓存块的数据结构体,首先根据计算得到的哈希值找到对应的哈希表的表项,从而获得hash链队列的头,然后遍历该hash链队列准确匹配LBA值确定目标是否存在。在哈希表足够大的情况,且哈希函数设计合理,每个哈希表表项所指向的hash链不会很长,所以哈希表匹配速度可以满足要求。
缓存块的数据结构体的哈希值通过磁盘逻辑块号、块设备编号和HashTable大小计算获得,计算哈希值使用的哈希函数如下:
哈希值=(bdev ^ blknr) % HashTable_SIZE;
其中,HashTable_SIZE为哈希表大小,bdev为操作的块设备编号,blknr为缓存块对应的磁盘逻辑块号。
采用HashTable方式来管理缓存,快速高效,能够在O(1)时间返回查询结果,实现简单,同时具有良好的可移植性。缺点是HashTable太小的话发生冲突的概率会增大,为了降低冲突概率,HashTable通常比较大,会占用较大的空间。
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数,存放记录的数组叫做哈希表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。
实施例4:
独立缓存模块保存的物理磁盘数据是经过块I/O传递的,独立缓存模块的组织和空间划分必须满足Linux块I/O的流程要求。Linux下块设备访问的最基本单位是磁盘扇区,一般情况下磁盘扇区大小为512字节,linux一次块I/O的大小通常为扇区的整数倍。项目中为了便于管理块I/O,将缓存空间划分为缓存块(buffer block),缓存块大小为4KB,等于一个内存页(page)大小。Buffer block是缓存访问的基本单位,每个缓存块容纳8个磁盘扇区,同时将物理磁盘以8个扇区为单位划分为磁盘逻辑块,一个缓存块可以映射任意一个磁盘逻辑块。如图2所示。
本发明遵循模块化设计原则,为了降低模块耦合度,提供清晰的功能模块接口,将整个系统中提供通用功能的代码进行封装,对其他代码开放合理的API。通用模块主要提供链表的管理,哈希表的基本操作,调试信息等;这些模块作为实现缓存管理,查找替换的基础功能,可以独立出来,使得系统代码结构更加合理。
struct buffer_page数据结构体:
缓存中每一个缓存块都有一个对应的数据结构体struct buffer_page,保存该缓存块的所有相关信息,比如状态,磁盘逻辑块映射,链表等。缓存块数据结构体与对应4KB缓存块的关系与Linux内核中struct page和内存页框的关系非常类似。Linux内核中通过page结果来对内存页框进行操作,类似的,本项目中通过struct buffer_page数据结构体来对缓存中的缓存块进行操作。struct buffer_page与缓存块是一一对应的关系。其中valid_bits和dirty_bits分别代表有效位图和脏位图,因为一个缓存块中包含8个磁盘扇区,每个扇区的状态可能不相同,所以需要对单个扇区的状态做标记。aLBA和b_dev代表当前缓存块中所映射的磁盘逻辑块起始扇区号,和所在的块设备。aLBA和b_dev可以唯一标识一个缓存块,项目中同时采用aLBA和b_dev的值来计算hash值。page指向该缓存块所在的内存页对应的struct page结构,通过page可以得到缓存块的内存地址。Flist,lrulist和wblist分别用于将缓存块加入空闲链表,LRU链表和写回链表中;同样,struct hlist_nodehash用于把节点加入HashTable中。spinlock_t自旋锁结构用于多线程环境下解决线程访问同一个缓存块或者操作同一个链表时的同步问题。整个struct buffer_page结构大小为64字节对齐,可以优化CPU高速缓存(cache)的访问,提高对struct buffer_page结构的存取速度。
struct tio:
ISCSI target软件从网络接收到ISCSI指令和数据之后,经过指令解析和执行模块的处理之后,如果是对磁盘数据的读写请求,会进一步封装成tio结构。Tio结构定义了对一段连续磁盘数据的读写请求,其中offset表示请求的数据在目标块设备的偏移量,以字节为单位;size指示本次所请求数据的总字节数。Pg_cnt指示读或写数据所占的内存页框的数量,pvec指向struct page数组,数组中的page指向实际保存数据的内存页。Target指令解析模块根据得到的指令,将tio结构传递给读缓存或者写缓存功能函数。缓存模块依照tio中的offset和size两项,就可以获得目标磁盘逻辑块,通过pvec获得写入数据或者读出的目的内存。
struct bio:
ISCSI target软件缓存模块采用block io方式与直接与通用块IO层交互进行数据传输,块IO过程中最重要的数据就是bio。Bio结构代表一次 块I/O 操作所涉及到的所有内存页和目标块设备信息,是Linux内核中非常重要的数据结果。项目中缓存模块通过构造bio,调用submit_to_bio函数实现磁盘数据存取。
bi_sector表示此次bio请求的数据相对于磁盘分区的扇区号,bi_bdev是目标块设备,bi_rw表示数据传输的方向,是读还是写。bi_end_io是中断回调函数指针,磁盘完成IO请求操作后,会触发一个中断,中断会执行bi_end_io指向的函数,进行IO操作结束后的处理工作。bi_io_vec指向一段连续的数据空间,通常由几个存放连续数据的struct page组成。
由于项目在内核层进行实现,所以无法使用标准C语言库来实各个功能,缓存链表是基于Linux提供的list.h实现的。声明缓存链表。缓存模块中存在3个双向循环链表:空闲链表,LRU链表,写回链表。
从空闲链表中获取缓存块。首先检查空闲链表是否为空,如果为空,则说明缓存已满没有可供分配的空闲块,函数返回NULL,缓存会进行替换处理。如果链表不为空,则从空闲链表头部删除一个节点,返回该节点对应的struct buffer_page结构体指针。
缓存块插入LRU使用队列。从空闲链表获得缓存块后,填充缓存块,初始化结构体,要将该缓存块插入LRU使用链表。
上述具体实施方式仅是本发明的具体个案,本发明的专利保护范围包括但不限于上述具体实施方式,任何符合本发明的一种双控存储服务器的缓存管理方法的权利要求书的且任何所属技术领域的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。

Claims (7)

1.一种双控存储服务器的缓存管理方法,其特征在于在ISCSI网络存储服务器架构中,对双控存储服务器进行缓存管理,包括如下步骤:
(1)、双控存储服务器linux系统启动时从linux系统管理的内存中划分出一块连续空间作为独立缓存模块,该独立缓存模块自主管理;
(2)、将独立缓存模块均匀划分为多个缓存块,将双控存储服务器的物理磁盘均匀划分为多个磁盘逻辑块,每个磁盘逻辑块中含有相同数量的磁盘扇区,每个磁盘逻辑块所含磁盘扇区的数量对应磁盘逻辑块最大的数据容量,每个磁盘逻辑块最大的数据容量与每个缓存块最大可缓存的数据容量一致;
(3)、一个缓存块可以映射任意一个磁盘逻辑块的数据;
(4)、基于缓存块与对应映射的磁盘逻辑块之间的数据状态关系,把缓存块标记为如下状态:空闲状态、干净状态、脏块状态、无效状态;
空闲状态为该缓存块没有映射到任何磁盘逻辑块,可以被分配存放数据;干净状态为该缓存块已经映射到某个磁盘逻辑块,缓存块中的数据和磁盘逻辑块中的数据是一致的;脏块状态为该缓存块中的数据比相映射的磁盘逻辑块中的数据要新;无效状态为该缓存块不可用;
(5)、每一个缓存块都有一一对应的数据结构体,数据结构体保存该缓存块的相关信息,通过数据结构体来对该缓存块进行操作;
(6)、将所有非无效状态的缓存块分为两种:空闲缓存块与使用缓存块,空闲状态的缓存块为空闲缓存块,干净状态与脏块状态的缓存块为使用缓存块;
使用双向循环链表分别管理空闲缓存块和使用缓存块,双向循环链表内保存的是指向对应缓存块的数据结构体的指针;
双向循环链表包括空闲链表、LRU链表、写回链表,空闲链表保存的指针为指向空闲缓存块的数据结构体的指针,LRU链表保存的指针为指向使用缓存块的数据结构体的指针,写回链表保存的指针为指向需要写回磁盘的脏块状态的缓存块的数据结构体的指针;
(7)、双控存储服务器linux系统中,当需要申请新的缓存块时,从空闲链表头部获得;
(8)、双控存储服务器linux系统中,若访问的缓存块的数据结构体的指针在LRU链表中,表示该缓存块为使用缓存块;
(9)、双控存储服务器linux系统中,缓存同步模块访问写回链表,将脏块状态的缓存块内的数据同步刷新到相对应的磁盘逻辑块内。
2.根据权利要求1所述的一种双控存储服务器的缓存管理方法,其特征在于步骤(1)中的独立缓存模块分为两部分,一部分作为保存磁盘阵列缓存数据空间,另一部分作为保存与缓存组织和管理相关的数据结构空间。
3.根据权利要求1所述的一种双控存储服务器的缓存管理方法,其特征在于步骤(2)中,缓存块大小为4KB,等于一个内存页大小,缓存块是缓存访问的基本单位;每个缓存块最大容纳8个磁盘扇区的数据,将物理磁盘以8个磁盘扇区为单位划分为若干磁盘逻辑块,一个缓存块可以映射任意一个磁盘逻辑块。
4.根据权利要求1所述的一种双控存储服务器的缓存管理方法,其特征在于步骤(5)中,数据结构体内保存的缓存块信息包括:缓存块是否空闲信息、缓存块对应的磁盘逻辑块信息、缓存块是否脏数据信息、缓存块引用状态信息、扇区有效信息。
5.根据权利要求1所述的一种双控存储服务器的缓存管理方法,其特征在于双控存储服务器使用双控制器软件,双控制器软件在基于ISCSI控制器软件上增加独立缓存模块软件、缓存同步模块软件和心跳检测模块软件;通过双控制器软件的独立缓存模块软件实现独立缓存模块的划分及管理,通过双控制器软件的缓存同步模块软件实现缓存同步模块访问写回链表,将脏块状态的缓存块内的数据同步刷新到相对应的磁盘逻辑块内;通过双控制器软件的心跳检测模块软件来实时监测双控存储服务器工作是否正常,如果心跳超时,则进行故障切换。
6.根据权利要求1、2、3或4所述的一种双控存储服务器的缓存管理方法,其特征在于使用哈希表来管理使用缓存块;
哈希表的表项是一个队列,队列中存放的是具有相同哈希值的缓存块的数据结构体,称为hash链;同一条hash链中的不同缓存块的数据结构体通过不同的LBA值来准确区分;
查找某个缓存块的数据结构体,首先根据计算得到的哈希值找到对应的哈希表的表项,从而获得hash链队列的头,然后遍历该hash链队列准确匹配LBA值确定目标是否存在。
7.根据权利要求6所述的一种双控存储服务器的缓存管理方法,其特征在于缓存块的数据结构体的哈希值通过磁盘逻辑块号、块设备编号和HashTable大小计算获得,计算哈希值使用的哈希函数如下:
哈希值=(bdev ^ blknr) % HashTable_SIZE;
其中,HashTable_SIZE为哈希表大小,bdev为操作的块设备编号,blknr为缓存块对应的磁盘逻辑块号。
CN201410313259.1A 2014-07-03 2014-07-03 一种双控存储服务器的缓存管理方法 Active CN104049918B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410313259.1A CN104049918B (zh) 2014-07-03 2014-07-03 一种双控存储服务器的缓存管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410313259.1A CN104049918B (zh) 2014-07-03 2014-07-03 一种双控存储服务器的缓存管理方法

Publications (2)

Publication Number Publication Date
CN104049918A CN104049918A (zh) 2014-09-17
CN104049918B true CN104049918B (zh) 2016-12-07

Family

ID=51502850

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410313259.1A Active CN104049918B (zh) 2014-07-03 2014-07-03 一种双控存储服务器的缓存管理方法

Country Status (1)

Country Link
CN (1) CN104049918B (zh)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104239226A (zh) * 2014-10-10 2014-12-24 浪潮集团有限公司 一种采用独立高速缓存的iSCSI存储服务器设计方法
CN105573857A (zh) * 2014-10-10 2016-05-11 北京计算机技术及应用研究所 一种多控磁盘阵列缓存镜像方法及系统
CN105045531B (zh) * 2015-07-01 2018-01-02 山东超越数控电子有限公司 一种存储双控制器间缓存同步机制
JP6403162B2 (ja) * 2015-07-23 2018-10-10 東芝メモリ株式会社 メモリシステム
US9942324B2 (en) * 2015-08-05 2018-04-10 Futurewei Technologies, Inc. Rebalancing and elastic storage scheme with elastic named distributed circular buffers
CN105243030A (zh) * 2015-10-26 2016-01-13 北京锐安科技有限公司 一种数据缓存方法
CN105224263A (zh) * 2015-11-09 2016-01-06 深圳市迪菲特科技股份有限公司 双控磁盘阵列间通过vpd芯片进行数据交换的方法与装置
US10254999B2 (en) * 2016-03-31 2019-04-09 EMC IP Holding Company LLC Method and system for optimistic flow control for push-based input/output with buffer stealing
CN105955841B (zh) * 2016-04-18 2018-09-21 华中科技大学 一种raid双控制器利用磁盘进行写缓存镜像的方法
CN108023914B (zh) * 2016-11-03 2021-03-02 阿里巴巴集团控股有限公司 一种内存数据共享系统、内存数据的写入以及读取方法
CN106951182A (zh) * 2017-02-24 2017-07-14 深圳市中博睿存信息技术有限公司 一种块设备缓存方法和装置
CN106980469A (zh) * 2017-03-07 2017-07-25 记忆科技(深圳)有限公司 一种提高固态硬盘顺序写缓存效率的方法
CN108628701B (zh) * 2017-03-22 2021-06-29 杭州宏杉科技股份有限公司 缓存数据的保护方法及装置
CN107506156B (zh) * 2017-09-28 2020-05-12 焦点科技股份有限公司 一种块设备的io优化方法
CN107783732A (zh) * 2017-10-30 2018-03-09 郑州云海信息技术有限公司 一种数据读写方法、系统、设备及计算机存储介质
CN107908751A (zh) * 2017-11-17 2018-04-13 赛凡信息科技(厦门)有限公司 一种分布式文件系统目录级配额的优化方法
CN108319430B (zh) * 2018-01-17 2021-03-23 杭州宏杉科技股份有限公司 处理io请求的方法及装置
WO2019155264A1 (en) * 2018-02-11 2019-08-15 Pratik Sharma Timer based cache for synchronization
CN110196785B (zh) * 2018-02-27 2022-06-14 浙江宇视科技有限公司 数据备份管理方法、装置及电子设备
CN108984128B (zh) * 2018-07-19 2022-03-08 郑州云海信息技术有限公司 一种数据读取方法及装置
CN109547355B (zh) * 2018-10-17 2022-05-06 中国电子科技集团公司第四十一研究所 一种基于万兆以太网口接收机的存储解析装置及方法
CN109542348B (zh) * 2018-11-19 2022-05-10 郑州云海信息技术有限公司 一种数据下刷方法及装置
CN111459885B (zh) * 2019-03-26 2023-04-28 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN112181275A (zh) * 2019-07-01 2021-01-05 广州慧睿思通信息科技有限公司 一种数据处理器及数据处理方法
CN111328257B (zh) * 2020-03-11 2022-03-22 广东省电信规划设计院有限公司 一种上下位机的数据同步方法及装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102681794A (zh) * 2012-04-23 2012-09-19 浪潮(北京)电子信息产业有限公司 基于双控制器实现磁盘冗余阵列保护的方法及系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102681794A (zh) * 2012-04-23 2012-09-19 浪潮(北京)电子信息产业有限公司 基于双控制器实现磁盘冗余阵列保护的方法及系统

Also Published As

Publication number Publication date
CN104049918A (zh) 2014-09-17

Similar Documents

Publication Publication Date Title
CN104049918B (zh) 一种双控存储服务器的缓存管理方法
US11163699B2 (en) Managing least recently used cache using reduced memory footprint sequence container
US9069476B2 (en) Method for managing storage system using flash memory, and computer
US9460015B2 (en) Storage system
US7117310B2 (en) Systems and methods for cache synchronization between redundant storage controllers
JP7135162B2 (ja) 情報処理システム、ストレージシステム及びデータ転送方法
US9032164B2 (en) Apparatus for performing storage virtualization
US9785525B2 (en) High availability failover manager
US9740409B2 (en) Virtualized storage systems
US20080250199A1 (en) Atomic cache transactions in a distributed storage system
US10372345B1 (en) High performance logical device
US10877922B2 (en) Flushes based on intent log entry states
US9329999B2 (en) Storage system improving read performance by controlling data caching
US8656119B2 (en) Storage system, control program and storage system control method
US10620868B1 (en) Storage system and data transfer method
US9232000B1 (en) Method and system for balancing load across target endpoints on a server and initiator endpoints accessing the server
US9591099B1 (en) Server connection establishment over fibre channel using a block device access model
US10114566B1 (en) Systems, devices and methods using a solid state device as a caching medium with a read-modify-write offload algorithm to assist snapshots
US9237057B1 (en) Reassignment of a virtual connection from a busiest virtual connection or locality domain to a least busy virtual connection or locality domain
US9270786B1 (en) System and method for proxying TCP connections over a SCSI-based transport
US11853574B1 (en) Container flush ownership assignment
US10437471B2 (en) Method and system for allocating and managing storage in a raid storage system
US10055354B1 (en) Systems, devices and methods using a solid state device as a caching medium with a hashing algorithm to maintain sibling proximity
US11243885B1 (en) Providing track access reasons for track accesses resulting in the release of prefetched cache resources for the track
US10482023B1 (en) I/O path optimization based on cache slot location

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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20180806

Address after: 250100 S06 tower, 1036, Chao Lu Road, hi tech Zone, Ji'nan, Shandong.

Patentee after: SHANDONG LANGCHAO YUNTOU INFORMATION TECHNOLOGY Co.,Ltd.

Address before: No. 1036, Shun Ya Road, Ji'nan high tech Zone, Shandong Province

Patentee before: INSPUR GROUP Co.,Ltd.

CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 250100 No. 1036 Tidal Road, Jinan High-tech Zone, Shandong Province, S01 Building, Tidal Science Park

Patentee after: Inspur cloud Information Technology Co.,Ltd.

Address before: 250100 Ji'nan science and technology zone, Shandong high tide Road, No. 1036 wave of science and Technology Park, building S06

Patentee before: SHANDONG LANGCHAO YUNTOU INFORMATION TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20221017

Address after: No. 5-398, Yunhan Avenue, Shuitu Hi tech Industrial Park, Beibei District, Chongqing 400722

Patentee after: Chongqing Inspur Government Cloud Management and Operation Co.,Ltd.

Address before: 250100 No. 1036 Tidal Road, Jinan High-tech Zone, Shandong Province, S01 Building, Tidal Science Park

Patentee before: Inspur cloud Information Technology Co.,Ltd.