CN101149668A - 一种包括读写缓存的存储设备及缓存实现方法 - Google Patents
一种包括读写缓存的存储设备及缓存实现方法 Download PDFInfo
- Publication number
- CN101149668A CN101149668A CNA2007101768047A CN200710176804A CN101149668A CN 101149668 A CN101149668 A CN 101149668A CN A2007101768047 A CNA2007101768047 A CN A2007101768047A CN 200710176804 A CN200710176804 A CN 200710176804A CN 101149668 A CN101149668 A CN 101149668A
- Authority
- CN
- China
- Prior art keywords
- buffer memory
- read
- reading
- write
- buffer
- 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
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种包括读写缓存的存储设备和一种存储设备中的读写缓存实现方法。本发明将读缓存和写缓存分离,即由不同的处理器分别对读缓存和写缓存进行访问控制,即读缓存直接挂接在主处理器下,从而能够提高主处理器对读缓存的处理效率,且由于主处理器能够支持较大的内存空间,从而保证了读缓存能够具有较大容量,进而由于读缓存具有较大容量而能够进一步提高主处理器对读缓存的处理效率;写缓存挂接在I/O处理器下,由I/O处理器的配套电池供电电路实现对写缓存的持续供电,且写缓存不需要与读缓存分享I/O处理器所能够支持的有限内存空间,因而由于写缓存容量的提高而能够提高主处理器对写缓存的处理效率。
Description
技术领域
本发明涉及缓存技术,特别涉及一种包括读写缓存的存储设备、以及一种存储设备中的读写缓存实现方法。
背景技术
在存储设备中,缓存是必不可少的存储介质(通常为一块或多块内存),能够加速存储设备中的主处理器对磁盘组的访问速度,从而对于存储设备总体性能的提升有非常大的帮助。
需要说明的是,此处提及的存储设备中的缓存,物理位置和介质类型不同于计算机系统CPU内部自带的缓存。
根据访问的类型,缓存可分为读缓存和写缓存两种。其中,对于存储设备来说,写缓存中的数据不能丢失,以避免用户数据的丢失;而读缓存中的数据丢失则不会丢失用户数据。因此,在存储设备中,必须考虑在系统突然断电的情况下,对写缓存数据所在的内存进行持续供电。
图1为现有一种写缓存供电方案的示意图。如图1所示,存储设备中包括主处理器、读缓存和写缓存、以及磁盘组。
其中,读缓存用于缓存主处理器从磁盘组读取的数据;写缓存用于缓存主处理器待写入到磁盘组的数据。
主处理器中承载了应用程序和驱动程序、用于实现对读缓存进行读访问控制的读缓存程序、用于实现对写缓存进行写访问控制的写缓存程序、用于对磁盘组进行读写访问控制的读写处理程序;读缓存和写缓存均挂接在主处理器下,由主处理器统一管理,即由主处理器对读缓存和写缓存进行访问控制,磁盘组也挂接在主处理器下,实现数据的存储。
如图1所示的存储设备外接一UPS,由外接的UPS对整个系统供电。该方案实现简单,但是在对写缓存的持续供电的同时,对读缓存和系统其他部分也进行了持续供电,而读缓存和系统其他部分并不需要持续供电,从而造成了资源浪费。而且,UPS本身的成本很高,从而使得实现该方案需要较高的硬件成本。
图2为现有另一种写缓存供电方案的示意图。如图2所示,存储设备中包括:主处理器、输入/输出(I/O)处理器、读缓存、写缓存、以及磁盘组。
其中,读缓存用于缓存主处理器从磁盘组读取的数据;写缓存用于缓存主处理器待写入到磁盘组的数据。
I/O处理器挂接在主处理器下;主处理器中承载了应用程序和驱动程序;
I/O处理器中承载了用于实现对读缓存进行读访问控制的读缓存程序、用于实现对写缓存进行写访问控制的写缓存程序、以及用于对磁盘组进行读写访问控制的读写处理程序;读缓存和写缓存均挂接在I/O处理器下,由I/O处理器统一管理,即由I/O处理器在主处理器的控制下对读缓存和写缓存进行访问控制,磁盘组也挂接在I/O处理器下,实现数据的存储。
如图2所示的存储设备中,与I/O处理器配套的电池在为I/O处理器供电的同时,也为读缓存和写缓存供电。
相比如图1所示的第一种方案,在如图2所示的方案中利用电池实现对写缓存的供电,降低了存储设备的实现成本,但却存在以下问题:
1)读缓存和写缓存均通过I/O处理器挂接在主处理器下,即远离了主处理器,对于读写命中后的处理效率比如图1所示的第一种方案要低;
2)通常情况下,I/O处理器能够支持的内存空间(即由电池持续供电的内存空间)大小比较有限,远远小于主处理器所能够支持的内存空间,因而限制了挂接在I/O处理器下的读缓存和写缓存的容量;而读缓存和写缓存的读写效率高低与其容量有直接的关系。
3)该方案中也是对读缓存和写缓存同时持续供电,而读缓存并不需要持续供电,从而造成了资源浪费。
可见,上述如图2所示的方案中虽然降低了成本,但由于读缓存占用了由电池持续供电的部分内存空间,因而使得作为写缓存的由电池持续供电的内存空间较小,因而使得对读写缓存的读写处理效率较低。
发明内容
有鉴于此,本发明提供了一种包括读写缓存的存储设备、以及一种存储设备中的读写缓存实现方法,能够在以较低成本实现为写缓存持续供电的前提下,提高对读写缓存的读写处理效率。
本发明提供的一种包括读写缓存的存储设备,包括:主处理器、输入/输出I/O处理器、电池、读缓存、写缓存和磁盘组,
所述读缓存和所述I/O处理器挂接在所述主处理器下,所述写缓存和所述磁盘组挂接在所述I/O处理器下;
所述主处理器,用于对所述读缓存进行访问控制;
所述I/O处理器,用于在所述主处理器的控制下对所述写缓存进行访问控制;
所述电池为所述写缓存供电。
还包括由所述主处理器执行的应用程序、驱动程序和读缓存程序,其中,
所述应用程序,用于向所述驱动程序下发读请求;
所述驱动程序,用于根据接收到的读请求,驱动所述读缓存程序从所述读缓存中读取该读请求对应的数据;
所述读缓存程序,用于从读缓存中读取读请求对应的数据,并判断对读缓存是否全部读命中,如果是,则向所述应用程序返回全部读命中的数据;否则,将表示对读缓存未命中部分的读请求下发到所述I/O处理器,并向所述应用程序返回读命中的数据。
所述主处理器中进一步包括:缓冲器buffer,用于存储返回给所述应用程序的读命中的数据;
所述应用程序下发的读请求中包括buffer指针,所述读缓存程序利用所述buffer指针将返回给所述应用程序的读命中的数据返回到所述buffer。
还包括由所述I/O处理器执行的读写处理程序和写缓存程序,其中,
所述写缓存程序,用于接收来自读缓存程序对读缓存未命中部分的读请求并读取所述写缓存,判断对写缓存是否全部读命中,如果是,则向所述应用程序返回读命中的数据,否则,将表示对写缓存读取未命中部分的读请求下发到读写处理程序;
所述读写处理程序,用于从所述磁盘中读取接收到的对写缓存未命中部分的读请求所对应的数据,并向所述应用程序返回读命中的数据。
所述主处理器中进一步包括:buffer,用于存储返回给所述应用程序的数据;
所述读缓存程序在未全部读命中时,重新构建并下发的读请求中包括所述buffer的指针,所述写缓存程序利用所述buffer指针将读命中的数据直接返回到所述buffer;
和/或,所述写缓存程序在判断出未全部读命中时,重新构建并下发的读请求中包括所述buffer指针,所述读写处理程序利用所述buffer指针将返回的读命中的数据直接返回到所述buffer。
还包括由所述主处理器执行的应用程序、驱动程序、读缓存程序,其中,
所述应用程序,用于向所述驱动程序下发写请求;
所述驱动程序,用于将所述应用程序下发的写请求下发到所述读缓存程序;
所述读缓存程序,用于根据所述写请求读取所述的读缓存,并判断对读缓存是否全部未命中,如果全部未命中,则将所述应用程序下发的写请求下发给所述I/O处理器;否则,申请内存空间,将命中部分对应的写请求数据复制到申请到的内存空间中,挂起后续对该读缓存中命中部分的访问,并将所述应用程序下发的写请求下发到所述I/O处理器;在接收到来自I/O处理器的表示写操作成功的响应信息后,将申请到的内存空间中的写请求数据替换读缓存中对应位置的数据,取消挂起;在接收到来自I/O处理器的表示写操作失败的响应信息后,将申请到的内存空间中的写请求数据丢弃,取消挂起;
所述I/O处理器根据接收到的写请求,向所述写缓存或磁盘组中写入对应的写请求数据,并在写操作成功后返回表示写操作成功的响应信息,在写操作失败后返回表示写操作失败的响应信息。
所述读缓存程序在将申请到的内存空间中的数据替换读缓存中对应位置的数据、或将申请到的内存空间中的数据丢弃之后,进一步释放所述申请的内存空间。
所述申请的内存空间为所述主处理器中的临时buffer。
本发明提供的一种缓存储设备中的缓存实现方法,将读缓存和输入/输出I/O处理器挂接在主处理器下,将写缓存和磁盘组挂接在所述I/O处理器下,由电池为所述写缓存供电,该方法包括:
所述主处理器对所述读缓存进行访问控制,且所述I/O处理器在所述主处理器的控制下对所述写缓存进行访问控制。
所述进行访问控制包括:对读请求进行访问控制;
所述对读请求进行访问控制包括:
主处理器中的读缓存程序从读缓存中读取应用程序下发的读请求所对应的数据,并判断对读缓存是否全部读命中,如果是,则读缓存程序向应用程序返回全部命中的数据,并结束流程;
否则,读缓存程序将读命中的部分数据向应用程序返回,并重新构建表示对读缓存未命中部分的读请求下发到I/O处理器。
所述主处理器中包括缓冲器buffer,所述应用程序下发的读请求中包括buffer指针;
所述读缓存程序向应用程序返回读命中的数据包括:读缓存程序利用所述buffer指针直接将读命中的数据返回到所述buffer中。
在重新构建表示对读缓存未命中部分的读请求下发到I/O处理器之后,所述对读请求进行访问控制进一步包括:
I/O处理器中的写缓存程序接收来自读缓存程序对读缓存未命中部分的读请求并读取所述写缓存并读取写缓存,判断对写缓存是否全部读命中,如果是,则向应用程序返回读命中的数据;
否则,将表示对写缓存读取未命中部分的读请求下发到读写处理程序由读写处理程序从磁盘中读取接收到的对写缓存未命中部分的读请求所对应的数据,并向所述应用程序返回读命中的数据,然后结束流程。
所述主处理器中包括缓冲器buffer;
所述读缓存程序重新构建并下发的读请求中包括buffer指针,所述写缓存程序向应用程序返回数据包括:写缓存程序利用所述buffer指针将读命中数据直接返回到所述buffer;
和/或,所述写缓存程序重新构建并下发的读请求中包括buffer指针,所述读写处理程序向应用程序返回数据包括:读写处理程序利用所述buffer指针将命中的数据直接返回到所述buffer。
所述进行访问控制包括:对写请求进行访问控制;
所述对写请求进行访问控制包括:
主处理器中的读缓存程序接收应用程序下发的写请求,根据所述写请求读取所述的读缓存:
在对读缓存全部未命中后,主处理器的读缓存程序将应用程序下发的写请求下发给所述I/O处理器;在对读缓存完全命中或部分命中后,主处理器的读缓存程序申请内存空间,将命中部分对应的写请求数据复制到申请到的内存空间中,并对读缓存命中部分设置标记,挂起后续对命中部分的访问,并将应用程序下发的写请求下发到所述I/O处理器;
I/O处理器将对应写请求数据写入写缓存、或者磁盘组;
在I/O处理器写操作成功后,读缓存程序将申请到的内存空间中的写请求数据替换读缓存中对应位置的数据,并取消挂起;在I/O处理器写操作失败后,将申请到的内存空间中的写请求数据丢弃,并取消挂起。
所述将申请到的内存空间中的数据替换读缓存中对应位置的数据、或将申请到的内存空间中的数据丢弃之后,该方法进一步包括:释放所述申请的内存空间。
所述申请内存空间包括:申请主处理器中的临时buffer。
由上述技术方案可见,本发明将读缓存和写缓存分离,即由不同的处理器分别对读缓存和写缓存进行访问控制,即读缓存直接挂接在主处理器下,从而能够提高主处理器对读缓存的处理效率,且由于主处理器能够支持较大的内存空间,从而保证了读缓存能够具有较大容量,进而由于读缓存具有较大容量而能够进一步提高主处理器对读缓存的处理效率;写缓存挂接在I/O处理器下,由I/O处理器的配套电池供电电路实现对写缓存的持续供电,且写缓存不需要与读缓存分享I/O处理器所能够支持的有限内存空间,因而由于写缓存容量的提高而能够提高主处理器对写缓存的处理效率。
而且,由电池为写缓存持续供电,从而保证了对写缓存持续供电的实现成本较低,电池并不为不需要持续供电的读缓存和系统其他部分供电,因而还节省了供电资源。
附图说明
图1为现有一种写缓存供电方案的示意图。
图2为现有另一种写缓存供电方案的示意图。
图3为本发明实施例中存储设备的结构示意图。
图4为本发明中读写缓存实现方法对读请求的处理流程示意图。
图5为本发明中读写缓存实现方法对写请求的处理流程示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
图3为本发明实施例中存储设备的结构示意图。如图3所示,本实施例所提供的包括读缓存和写缓存的存储设备中,包括:主处理器、I/O处理器、电池、读缓存、写缓存和磁盘组。
与如图2所示现有方案的不同之处在于,读缓存和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处理器中的写缓存程序的读请求),从磁盘组中读取对写缓存未命中部分的读请求对应的数据,并向应用程序返回命中的数据,同时还返回读请求成功的响应。
实际应用中,主处理器中还可包括一缓冲器(buffer),用于存储返回给应用程序的数据,并提供给应用程序。这样,应用程序下发的读请求中可包括一buffer指针(即buffer在内存中的地址信息),而读缓存程序、写缓存程序、读写处理程序,均可以传递和使用主处理器中应用程序下发的读请求所带的buffer指针,将向应用程序返回的数据直接返回到buffer中。
这种情况下,读缓存程序、和/或写缓存程序、和/或读写处理程序,均可把返回数据直接返回到buffer中,以实现数据的快速返回,避免数据在各个程序之间重复传递。更进一步,为了提高数据返回的效率,还可以通过DMA等方式实现数据返回。
对于写请求的处理过程,关联主要体现在:如果待写入的数据刚好也缓存在读缓存中,必须同步更新磁盘组和读缓存中的相同数据。在写入操作未完成之前,为了防止从读缓存中读出的数据(未经写操作的更新)与待写入的数据不符,需要将对读缓存中该部分对应数据的访问挂起,待写请求完成后再允许对该部分数据的访问。
具体来说,主处理器中仍可以包括:应用程序、驱动程序、读缓存程序。
应用程序,用于向驱动程序下发写请求。
驱动程序,用于将应用程序下发的写请求下发到读缓存程序。
读缓存程序,用于根据写请求读取所述的读缓存,并判断对读缓存是否全部未命中,如果是,即待写入的数据并未缓存在读缓存中,则将接收到的由应用程序下发的写请求下发给I/O处理器;否则,待写入数据的全部或部分刚好也缓存在读缓存中,则申请内存空间,例如申请临时buffer,将命中部分对应的写请求数据复制到申请到的临时buffer,而暂不替换读缓存中对应位置的原有数据(待后续写操作成功后再将原有数据替换为新写入的临时buffer中的写请求数据),并挂起对读缓存中命中部分的访问,然后将由应用程序下发的写请求下发到I/O处理器;在接收到来自I/O处理器的表示写操作成功的响应信息后,将临时buffer中的写请求数据替换读缓存中对应位置的数据,并释放申请的临时buffer。
I/O处理器中仍可包括:读写处理程序和写缓存程序。
写缓存程序根据接收到的写请求向写缓存写入对应的写请求数据,在写操作成功后向读缓存程序返回写请求成功的响应,即将数据写入到写缓存中。
实际应用中,也可以不将数据先写入到写缓存而是直接写入到磁盘组中。这种情况下,写缓存程序通过读写处理程序向磁盘组中写入对应的写请求数据,在写操作成功后向读缓存程序返回表示写操作成功的响应信息;主处理器中的读缓存程序将对应位置的原有数据替换为其申请的临时buffer中的写请求数据,并向应用程序返回写请求完成的响应。
在写操作失败后,写缓存程序或读写处理程序向读缓存程序返回表示写操作失败的响应信息。这样,由于写请求对应的写操作失败,因而主处理器中的读缓存程序不将对应位置的原有数据替换为其申请的临时buffer中的写请求数据,而是在接收到所述表示写操作失败的响应信息后,丢弃申请到的临时buffer中的写请求数据并释放该临时buffer,并向应用程序返回写请求完成的响应。
可见,上述存储设备中,主处理器和I/O处理器的协同处理,能够进一步提高读效率,且保证在写操作的过程中能够及时更新读缓存中的对应数据。
以上是对本发明实施例中存储设备的详细说明,下面,再对本发明实施例中的读写缓存实现方法进行说明。
本发明实施例中的读写缓存实现方法中,先将读缓存和输入/输出I/O处理器挂接在主处理器下、将写缓存和磁盘组挂接在所述I/O处理器下,并由I/O处理器的电池为写缓存供电,该方法包括:
主处理器对所述读缓存进行访问控制,且I/O处理器在主处理器的控制下对写缓存进行访问控制。
其中,访问控制包括对读请求的访问控制和对写请求的访问控制,本发明实施例分别针对读请求和写请求提供了对应的处理方式,以保证读缓存和写缓存间的关联。
图4为本发明中读写缓存实现方法对读请求的处理流程示意图。如图4所示,本实施例中读写缓存实现方法对读请求的处理流程包括:
步骤401,主处理器中的读缓存程序根据应用程序下发的读请求从读缓存中读取读请求对应的数据。
步骤402,主处理器中的读缓存程序判断对读缓存是否全部读命中,如果是,则执行步骤403,否则,执行步骤404。
步骤403,读缓存全部读命中,因而主处理器中的读缓存程序直接向应用程序返回全部命中的数据,不涉及与写缓存的关联,并执行步骤409。
步骤404,读缓存未全部命中或禁止访问,主处理器中的读缓存程序将读命中的部分数据向应用程序返回,并重新构建一个或多个表示对读缓存未命中部分的读请求下发到I/O处理器,并继续执行步骤405。
本步骤中重新构建的读请求中可以包括buffer指针。
步骤405,I/O处理器中的写缓存程序根据接收到的对读缓存未命中部分的读请求,读取写缓存中对应的数据,并判断对写缓存是否全部读命中,如果是,则执行步骤406,否则执行步骤407。
步骤406,写缓存中刚好缓存了读请求所对应的数据,即写缓存全部读命中,I/O处理器中的写缓存程序直接将命中的数据向应用程序返回,并执行步骤409。
步骤407,写缓存未全部读命中(全部未命中或者部分未命中),由I/O处理器中的写缓存程序再次重新构建一个或多个表示对写缓存未命中部分的读请求并下发,然后执行步骤408。
与之前所述同理,本步骤中重新构建的读请求中也可以包括buffer指针。
步骤408,I/O处理器中的读写处理程序根据接收自写缓存程序的对读缓存未命中部分的读请求,从磁盘组读取对应的数据并向应用程序返回,并执行步骤409。
步骤409,主处理器中的读缓存程序向应用程序返回读请求完成的响应。
至此,本流程结束。
由上述流程可见,如果读请求所对应的数据已缓存在写缓存中,则可以直接从写缓存读取,而无需再次下发读请求以从磁盘组中读取,从而能够提高读效率。
为了进一步提高读效率,上述流程中可以采用如下方式来具体实现:
在步骤401,主处理器的读缓存程序接收到的读请求中可以包括一buffer指针;
如果对读缓存全部读命中,则在步骤403,读缓存可以将全部命中的数据直接返回到主处理器的buffer中;
如果对读缓存未全部读命中,则在步骤404,主处理器的读缓存程序重新构建的读请求中也可以包括buffer指针。
这样,在步骤405,写缓存程序接收到的读请求中也包括buffer指针。
如果写缓存程序对写缓存全部读命中,则在步骤406,写缓存可以将全部读命中的数据直接返回到主处理器的buffer中;
如果对写缓存未全部读命中,先将部分命中的数据返回到主处理器的buffer中;等待后续步骤读取了当前未命中的部分数据、再将新读取的数据返回到主处理器的buffer中。
在步骤407,I/O处理器的写缓存程序重新构建的读请求中也可以包括buffer指针。
这样,在步骤408,I/O处理器的读写处理程序接收到的读请求中则包括buffer指针。在步骤408,读写处理程序在从磁盘组中读取了对应的数据后,通过DMA等快速方式直接将数据返回到主处理器的buffer中,以提高数据返回的效率;
图5为本发明中读写缓存实现方法对写请求的处理流程示意图。如图5所示,本实施例中读写缓存实现方法对写请求的处理流程包括:
步骤501,主处理器中的读缓存程序接收应用程序下发的写请求,根据写请求读取读缓存。
步骤502,主处理器中的读缓存程序判断对读缓存是否全部未命中,如果是,则执行步骤504,否则,执行步骤503。
步骤503,读缓存完全命中或部分命中,主处理器的读缓存程序申请内存空间,将命中部分对应的写请求数据复制到申请到的内存空间中,而暂不替换写缓存中对应位置的原有数据,同时,读缓存程序对读缓存命中部分所在内存空间设置表示挂起的标记,然后将后续对命中部分的访问挂起,等待本流程的写请求完成并更新后才取消挂起,并执行步骤504。
步骤504,主处理器的读缓存程序将应用程序下发的写请求下发到I/O处理器的写缓存程序,并执行步骤505。
步骤505,I/O处理器中的写缓存程序或读写处理程序按照现有方式将写请求数据写入写缓存,或者直接写入磁盘组,并向主处理器中的读缓存程序返回表示写操作是否成功的响应信息。
步骤506,主处理器中的读缓存程序根据接收到的响应信息判断写操作是否成功,如果成功,则执行步骤507,否则执行步骤508。
步骤507,主处理器中的读缓存程序将申请到的内存空间中的写请求数据替换读缓存中对应位置的数据(即步骤503对读缓存命中的部分数据),并释放申请的内存空间,然后执行步骤509。
步骤508,主处理器中的读缓存程序丢弃申请到的内存空间中的写请求数据并释放该内存空间,然后执行步骤509。
步骤509,读缓存程序向主处理器中的应用程序返回完成写请求的响应,并执行步骤510。
步骤510,读缓存程序取消对命中部分数据所在内存空间设置的标记,处理由于本步骤之前访问该部分数据而被挂起的访问。
至此,本流程结束。
由上述流程可见,如果待写入的数据刚好也缓存在读缓存中,则为了同时更新磁盘和读缓存中的相同数据,以防止从读缓存中读出的数据(未经写操作的更新)与待写入的数据不符,需要将对读缓存中该部分对应数据的访问挂起,待写请求完成后再允许对该部分数据的访问,从而能够保证在写操作的过程中能够及时更新读缓存中的对应数据。
上述流程中,在步骤503申请的内存空间可以为临时buffer。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。
Claims (16)
1.一种包括读写缓存的存储设备,包括:主处理器、输入/输出I/O处理器、电池、读缓存、写缓存和磁盘组,
其特征在于,
所述读缓存和所述I/O处理器挂接在所述主处理器下,所述写缓存和所述磁盘组挂接在所述I/O处理器下;
所述主处理器,用于对所述读缓存进行访问控制;
所述I/O处理器,用于在所述主处理器的控制下对所述写缓存进行访问控制;
所述电池为所述写缓存供电。
2.如权利要求1所述的存储设备,其特征在于,还包括由所述主处理器执行的应用程序、驱动程序和读缓存程序,其中,
所述应用程序,用于向所述驱动程序下发读请求;
所述驱动程序,用于根据接收到的读请求,驱动所述读缓存程序从所述读缓存中读取该读请求对应的数据;
所述读缓存程序,用于从读缓存中读取读请求对应的数据,并判断对读缓存是否全部读命中,如果是,则向所述应用程序返回全部读命中的数据;否则,将表示对读缓存未命中部分的读请求下发到所述I/O处理器,并向所述应用程序返回读命中的数据。
3.如权利要求2所述的存储设备,其特征在于,所述主处理器中进一步包括:缓冲器buffer,用于存储返回给所述应用程序的读命中的数据;
所述应用程序下发的读请求中包括buffer指针,所述读缓存程序利用所述buffer指针将返回给所述应用程序的读命中的数据返回到所述buffer。
4.如权利要求2所述的存储设备,其特征在于,还包括由所述I/O处理器执行的读写处理程序和写缓存程序,其中,
所述写缓存程序,用于接收来自读缓存程序对读缓存未命中部分的读请求并读取所述写缓存,判断对写缓存是否全部读命中,如果是,则向所述应用程序返回读命中的数据,否则,将表示对写缓存读取未命中部分的读请求下发到读写处理程序;
所述读写处理程序,用于从所述磁盘中读取接收到的对写缓存未命中部分的读请求所对应的数据,并向所述应用程序返回读命中的数据。
5.如权利要求4所述的存储设备,其特征在于,所述主处理器中进一步包括:buffer,用于存储返回给所述应用程序的数据;
所述读缓存程序在未全部读命中时,重新构建并下发的读请求中包括所述buffer的指针,所述写缓存程序利用所述buffer指针将读命中的数据直接返回到所述buffer;
和/或,所述写缓存程序在判断出未全部读命中时,重新构建并下发的读请求中包括所述buffer指针,所述读写处理程序利用所述buffer指针将返回的读命中的数据直接返回到所述buffer。
6.如权利要求1所述的存储设备,其特征在于,还包括由所述主处理器执行的应用程序、驱动程序、读缓存程序,其中,
所述应用程序,用于向所述驱动程序下发写请求;
所述驱动程序,用于将所述应用程序下发的写请求下发到所述读缓存程序;
所述读缓存程序,用于根据所述写请求读取所述的读缓存,并判断对读缓存是否全部未命中,如果全部未命中,则将所述应用程序下发的写请求下发给所述I/O处理器;否则,申请内存空间,将命中部分对应的写请求数据复制到申请到的内存空间中,挂起后续对该读缓存中命中部分的访问,并将所述应用程序下发的写请求下发到所述I/O处理器;在接收到来自I/O处理器的表示写操作成功的响应信息后,将申请到的内存空间中的写请求数据替换读缓存中对应位置的数据,取消挂起;在接收到来自I/O处理器的表示写操作失败的响应信息后,将申请到的内存空间中的写请求数据丢弃,取消挂起;
所述I/O处理器根据接收到的写请求,向所述写缓存或磁盘组中写入对应的写请求数据,并在写操作成功后返回表示写操作成功的响应信息,在写操作失败后返回表示写操作失败的响应信息。
7.如权利要求6所述的存储设备,其特征在于,所述读缓存程序在将申请到的内存空间中的数据替换读缓存中对应位置的数据、或将申请到的内存空间中的数据丢弃之后,进一步释放所述申请的内存空间。
8.如权利要求6或7所述的存储设备,其特征在于,所述申请的内存空间为所述主处理器中的临时buffer。
9.一种存储设备中的读写缓存实现方法,其特征在于,将读缓存和输入/输出I/O处理器挂接在主处理器下,将写缓存和磁盘组挂接在所述I/O处理器下,由电池为所述写缓存供电,该方法包括:
所述主处理器对所述读缓存进行访问控制,且所述I/O处理器在所述主处理器的控制下对所述写缓存进行访问控制。
10.如权利要求9所述的方法,其特征在于,所述进行访问控制包括:对读请求进行访问控制;
所述对读请求进行访问控制包括:
主处理器中的读缓存程序从读缓存中读取应用程序下发的读请求所对应的数据,并判断对读缓存是否全部读命中,如果是,则读缓存程序向应用程序返回全部命中的数据,并结束流程;
否则,读缓存程序将读命中的部分数据向应用程序返回,并重新构建表示对读缓存未命中部分的读请求下发到I/O处理器。
11.如权利要求10所述的方法,其特征在于,所述主处理器中包括缓冲器buffer,所述应用程序下发的读请求中包括buffer指针;
所述读缓存程序向应用程序返回读命中的数据包括:读缓存程序利用所述buffer指针直接将读命中的数据返回到所述buffer中。
12.如权利要求10所述的方法,其特征在于,在重新构建表示对读缓存未命中部分的读请求下发到I/O处理器之后,所述对读请求进行访问控制进一步包括:
I/O处理器中的写缓存程序接收来自读缓存程序对读缓存未命中部分的读请求并读取所述写缓存并读取写缓存,判断对写缓存是否全部读命中,如果是,则向应用程序返回读命中的数据;
否则,将表示对写缓存读取未命中部分的读请求下发到读写处理程序由读写处理程序从磁盘中读取接收到的对写缓存未命中部分的读请求所对应的数据,并向所述应用程序返回读命中的数据,然后结束流程。
13.如权利要求12所述的方法,其特征在于,所述主处理器中包括缓冲器buffer;
所述读缓存程序重新构建并下发的读请求中包括buffer指针,所述写缓存程序向应用程序返回数据包括:写缓存程序利用所述buffer指针将读命中数据直接返回到所述buffer;
和/或,所述写缓存程序重新构建并下发的读请求中包括buffer指针,所述读写处理程序向应用程序返回数据包括:读写处理程序利用所述buffer指针将命中的数据直接返回到所述buffer。
14.如权利要求9所述的方法,其特征在于,所述进行访问控制包括:对写请求进行访问控制;
所述对写请求进行访问控制包括:
主处理器中的读缓存程序接收应用程序下发的写请求,根据所述写请求读取所述的读缓存;
在对读缓存全部未命中后,主处理器的读缓存程序将应用程序下发的写请求下发给所述I/O处理器;在对读缓存完全命中或部分命中后,主处理器的读缓存程序申请内存空间,将命中部分对应的写请求数据复制到申请到的内存空间中,并对读缓存命中部分设置标记,挂起后续对命中部分的访问,并将应用程序下发的写请求下发到所述I/O处理器;
I/O处理器将对应写请求数据写入写缓存、或者磁盘组;
在I/O处理器写操作成功后,读缓存程序将申请到的内存空间中的写请求数据替换读缓存中对应位置的数据,并取消挂起;在I/O处理器写操作失败后,将申请到的内存空间中的写请求数据丢弃,并取消挂起。
15.如权利要求14所述的方法,其特征在于,所述将申请到的内存空间中的数据替换读缓存中对应位置的数据、或将申请到的内存空间中的数据丢弃之后,该方法进一步包括:释放所述申请的内存空间。
16.如权利要求14或15所述的方法,其特征在于,所述中请内存空间包括:申请主处理器中的临时buffer。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101768047A CN100530071C (zh) | 2007-11-02 | 2007-11-02 | 一种包括读写缓存的存储设备及缓存实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101768047A CN100530071C (zh) | 2007-11-02 | 2007-11-02 | 一种包括读写缓存的存储设备及缓存实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101149668A true CN101149668A (zh) | 2008-03-26 |
CN100530071C CN100530071C (zh) | 2009-08-19 |
Family
ID=39250221
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101768047A Expired - Fee Related CN100530071C (zh) | 2007-11-02 | 2007-11-02 | 一种包括读写缓存的存储设备及缓存实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100530071C (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102981773A (zh) * | 2011-09-02 | 2013-03-20 | 深圳市快播科技有限公司 | 存储设备访问方法、访问系统及存储设备访问管理器 |
CN105183378A (zh) * | 2015-08-31 | 2015-12-23 | 北京神州云科数据技术有限公司 | 自适应混合读/写缓存的方法 |
CN105683930A (zh) * | 2013-10-29 | 2016-06-15 | 上海宝存信息科技有限公司 | 用于数据存储系统的动态缓存方法和系统 |
CN109213696A (zh) * | 2017-06-30 | 2019-01-15 | 伊姆西Ip控股有限责任公司 | 用于缓存管理的方法和设备 |
CN109407998A (zh) * | 2018-11-09 | 2019-03-01 | 郑州云海信息技术有限公司 | 一种缓存中io流同步的方法、系统及相关组件 |
CN109800185A (zh) * | 2018-12-29 | 2019-05-24 | 上海霄云信息科技有限公司 | 一种数据存储系统中的数据缓存方法 |
WO2019106457A1 (en) * | 2017-11-28 | 2019-06-06 | International Business Machines Corporation | Fast locate using imitation reads on tape drives |
CN111124302A (zh) * | 2019-12-18 | 2020-05-08 | 苏州浪潮智能科技有限公司 | 一种san共享文件存储和归档方法和系统 |
CN111324282A (zh) * | 2018-12-14 | 2020-06-23 | 北京兆易创新科技股份有限公司 | 一种存储器 |
CN111858399A (zh) * | 2019-04-30 | 2020-10-30 | 贵州白山云科技股份有限公司 | 一种数据传输方法、装置、计算机可读存储介质和计算机设备 |
CN113342265A (zh) * | 2021-05-11 | 2021-09-03 | 中天恒星(上海)科技有限公司 | 缓存管理方法、装置、处理器及计算机装置 |
CN116010293A (zh) * | 2022-12-30 | 2023-04-25 | 上海芷锐电子科技有限公司 | 数据请求处理电路、方法及其缓存电路和处理器 |
-
2007
- 2007-11-02 CN CNB2007101768047A patent/CN100530071C/zh not_active Expired - Fee Related
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102981773B (zh) * | 2011-09-02 | 2016-07-06 | 深圳市云帆世纪科技有限公司 | 存储设备访问方法、访问系统及存储设备访问管理器 |
CN102981773A (zh) * | 2011-09-02 | 2013-03-20 | 深圳市快播科技有限公司 | 存储设备访问方法、访问系统及存储设备访问管理器 |
CN105683930B (zh) * | 2013-10-29 | 2019-05-31 | 上海宝存信息科技有限公司 | 用于数据存储系统的动态缓存方法和系统 |
CN105683930A (zh) * | 2013-10-29 | 2016-06-15 | 上海宝存信息科技有限公司 | 用于数据存储系统的动态缓存方法和系统 |
CN105183378A (zh) * | 2015-08-31 | 2015-12-23 | 北京神州云科数据技术有限公司 | 自适应混合读/写缓存的方法 |
CN109213696A (zh) * | 2017-06-30 | 2019-01-15 | 伊姆西Ip控股有限责任公司 | 用于缓存管理的方法和设备 |
CN109213696B (zh) * | 2017-06-30 | 2023-06-06 | 伊姆西Ip控股有限责任公司 | 用于缓存管理的方法和设备 |
GB2581727B (en) * | 2017-11-28 | 2022-05-04 | Ibm | Fast locate using imitation reads on tape drives |
US11099737B2 (en) | 2017-11-28 | 2021-08-24 | International Business Machines Corporation | Fast locate using imitation reads on tape drives |
US10423336B2 (en) | 2017-11-28 | 2019-09-24 | International Business Machines Corporation | Fast locate using imitation reads on tape drives |
WO2019106457A1 (en) * | 2017-11-28 | 2019-06-06 | International Business Machines Corporation | Fast locate using imitation reads on tape drives |
US11106364B2 (en) | 2017-11-28 | 2021-08-31 | International Business Machines Corporation | Fast locate using imitation reads on tape drives |
GB2581727A (en) * | 2017-11-28 | 2020-08-26 | Ibm | Fast locate using imitation reads on tape drives |
CN109407998B (zh) * | 2018-11-09 | 2022-02-18 | 郑州云海信息技术有限公司 | 一种缓存中io流同步的方法、系统及相关组件 |
CN109407998A (zh) * | 2018-11-09 | 2019-03-01 | 郑州云海信息技术有限公司 | 一种缓存中io流同步的方法、系统及相关组件 |
CN111324282A (zh) * | 2018-12-14 | 2020-06-23 | 北京兆易创新科技股份有限公司 | 一种存储器 |
CN109800185B (zh) * | 2018-12-29 | 2023-10-20 | 上海霄云信息科技有限公司 | 一种数据存储系统中的数据缓存方法 |
CN109800185A (zh) * | 2018-12-29 | 2019-05-24 | 上海霄云信息科技有限公司 | 一种数据存储系统中的数据缓存方法 |
CN111858399A (zh) * | 2019-04-30 | 2020-10-30 | 贵州白山云科技股份有限公司 | 一种数据传输方法、装置、计算机可读存储介质和计算机设备 |
CN111858399B (zh) * | 2019-04-30 | 2023-11-24 | 贵州白山云科技股份有限公司 | 一种数据传输方法、装置、计算机可读存储介质和计算机设备 |
CN111124302A (zh) * | 2019-12-18 | 2020-05-08 | 苏州浪潮智能科技有限公司 | 一种san共享文件存储和归档方法和系统 |
CN111124302B (zh) * | 2019-12-18 | 2023-01-10 | 苏州浪潮智能科技有限公司 | 一种san共享文件存储和归档方法和系统 |
CN113342265A (zh) * | 2021-05-11 | 2021-09-03 | 中天恒星(上海)科技有限公司 | 缓存管理方法、装置、处理器及计算机装置 |
CN113342265B (zh) * | 2021-05-11 | 2023-11-24 | 中天恒星(上海)科技有限公司 | 缓存管理方法、装置、处理器及计算机装置 |
CN116010293A (zh) * | 2022-12-30 | 2023-04-25 | 上海芷锐电子科技有限公司 | 数据请求处理电路、方法及其缓存电路和处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN100530071C (zh) | 2009-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100530071C (zh) | 一种包括读写缓存的存储设备及缓存实现方法 | |
US9575889B2 (en) | Memory server | |
US8032700B2 (en) | Hybrid multi-tiered caching storage system | |
CN103714015B (zh) | 减少来自侦听过滤器的后无效事务的方法、装置和系统 | |
US7555599B2 (en) | System and method of mirrored RAID array write management | |
US11500797B2 (en) | Computer memory expansion device and method of operation | |
CN101013351A (zh) | 硬盘驱动器高速缓存存储器及重放装置 | |
KR101511972B1 (ko) | 계층적 캐싱 설계에서 캐시들 간 효율적 통신을 위한 방법 및 장치 | |
CN102612685A (zh) | 经由存储器高速缓存操纵的无阻碍数据传送 | |
US20040117588A1 (en) | Access request for a data processing system having no system memory | |
JP2012533124A (ja) | ブロックベースの非透過的キャッシュ | |
US8984230B2 (en) | Method of using a buffer within an indexing accelerator during periods of inactivity | |
US12019544B2 (en) | Memory mapping for hibernation | |
US20140173203A1 (en) | Block Memory Engine | |
JP2008503003A (ja) | コヒーレント・マルチプロセッサ・プロトコルを有するシステムにおけるダイレクト・プロセッサ・キャッシュ・アクセス | |
US20200379926A1 (en) | External block transfer in a memory system | |
US7017024B2 (en) | Data processing system having no system memory | |
US8751760B2 (en) | Systems and methods for power state transitioning in an information handling system | |
US8661169B2 (en) | Copying data to a cache using direct memory access | |
US20050055528A1 (en) | Data processing system having a physically addressed cache of disk memory | |
US9164904B2 (en) | Accessing remote memory on a memory blade | |
KR20220162605A (ko) | 메모리 시스템에서 페이지 마이그레이션을 위한 시스템, 방법 및 장치 | |
TWI243999B (en) | Apparatus and related method for maintaining read caching data of south bridge with north bridge | |
CN2603974Y (zh) | 磁盘高速缓存装置 | |
CN107589969A (zh) | 一种基于NVDIMM的Linux操作系统休眠快速启动方法 |
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 | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No. Patentee after: Xinhua three Technology Co., Ltd. Address before: 310053 Hangzhou hi tech Industrial Development Zone, Zhejiang province science and Technology Industrial Park, No. 310 and No. six road, HUAWEI, Hangzhou production base Patentee before: Huasan Communication Technology Co., Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090819 Termination date: 20191102 |