CN114281245A - 同步写方法及装置、存储系统、电子设备 - Google Patents

同步写方法及装置、存储系统、电子设备 Download PDF

Info

Publication number
CN114281245A
CN114281245A CN202111422771.6A CN202111422771A CN114281245A CN 114281245 A CN114281245 A CN 114281245A CN 202111422771 A CN202111422771 A CN 202111422771A CN 114281245 A CN114281245 A CN 114281245A
Authority
CN
China
Prior art keywords
command
synchronous write
command queue
added
state table
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.)
Pending
Application number
CN202111422771.6A
Other languages
English (en)
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.)
Samsung China Semiconductor Co Ltd
Samsung Electronics Co Ltd
Original Assignee
Samsung China Semiconductor Co Ltd
Samsung Electronics 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 Samsung China Semiconductor Co Ltd, Samsung Electronics Co Ltd filed Critical Samsung China Semiconductor Co Ltd
Priority to CN202111422771.6A priority Critical patent/CN114281245A/zh
Publication of CN114281245A publication Critical patent/CN114281245A/zh
Priority to US17/743,204 priority patent/US11853614B2/en
Priority to KR1020220160886A priority patent/KR20230078577A/ko
Priority to US18/510,390 priority patent/US20240086113A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Abstract

公开了一种同步写方法及装置、存储系统、电子设备,包括:接收第一进程的第一同步写命令;若进程状态表中指示没有第一进程的其它同步写命令加入命令队列,将第一同步写命令加入命令队列,其中,进程状态表用于指示是否有进程的其它同步写命令已加入命令队列;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,先将保序命令加入命令队列,再将第一同步写命令加入命令队列,其中,保序命令用于指示命令队列中位于保序命令之前的同步写命令在第一同步写命令之前被存储设备执行;按照命令队列中命令的顺序,向存储设备发送命令队列中的命令。

Description

同步写方法及装置、存储系统、电子设备
技术领域
本公开涉及数据存储技术,更具体地讲,涉及同步写方法及装置、存储系统、电子设备。
背景技术
在Linux系统中,同步写占所有写操作的比率较高,同时同步写相对于普通写是很耗时的操作,所以,提高同步写的性能可以大幅提升系统运行的速度。目前,Linux内核通过fSync、noBarrier以及fBarrier这三种方式来保证数据有序安全地存储到存储设备(如Flash存储设备)上,其中,fSync方式的数据绝对安全,但时间开销太大;noBarrier方式的速率大概是fSync方式的5~6倍,但数据相对不安全;fBarrier方式的速度最快且数据安全与fSync方式相当,不足的是多线程时时间开销仍然很大,导致性能较差。
发明内容
本公开提供了一种同步写方法及装置、存储系统、电子设备,以至少提升上述相关技术中多线程并发时同步写的性能。
根据本公开示例性实施方式的第一方面,提供一种同步写方法,包括:接收第一进程的第一同步写命令;若进程状态表中指示没有第一进程的其它同步写命令加入命令队列,将第一同步写命令加入命令队列,其中,进程状态表用于指示是否有进程的其它同步写命令已加入命令队列;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,先将保序命令加入命令队列,再将第一同步写命令加入命令队列,其中,保序命令用于指示命令队列中位于保序命令之前的同步写命令在第一同步写命令之前被存储设备执行;按照命令队列中命令的顺序,向存储设备发送命令队列中的命令。
可选地,进程状态表中包括进程状态信息,方法还包括:若进程状态表中的第一进程的进程状态信息指示没有第一进程的其它同步写命令加入命令队列,在将第一同步写命令加入命令队列之后,将第一进程的进程状态信息更改为指示有第一进程的其它同步写命令已加入命令队列;若进程状态表中的第一进程的进程状态信息指示有第一进程的其它同步写命令已加入命令队列,在将保序命令加入命令队列后,将进程状态表中的其它进程的进程状态信息更改为指示没有其它进程的同步写命令加入命令队列。
可选地,进程状态表包括进程标识号;在接收到第一进程的第一同步写命令之后,还包括:若进程状态表中不包括第一进程的进程标识号,则确定进程状态表指示没有第一进程的其它同步写命令加入命令队列;若进程状态表中包括第一进程的进程标识号,则确定进程状态表指示有第一进程的其它同步写命令已加入命令队列。
可选地,上述方法还包括:若进程状态表中指示没有第一进程的其它同步写命令加入命令队列,将第一同步写命令加入命令队列后,将第一进程的进程标识号保存到进程状态表;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,将保序命令加入命令队列后,将进程状态表中其它进程的进程标识号移除。
可选地,进程状态表中还包括最近一次已加入到命令队列的同步写命令的类型,其中,同步写命令的类型包括指向数据页Data的同步写命令和指向节点页Node的同步写命令,上述方法还包括:确定第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,先将保序命令加入命令队列,再将第一同步写命令加入命令队列包括:若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,且第一进程的第一同步写命令的类型和最近一次已加入到命令队列的同步写命令的类型不同,则先将保序命令加入命令队列,再将第一同步写命令加入命令队列。
可选地,上述方法还包括:逻辑地址状态表,用于指示存储设备对应地址是否已写入数据;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,先将保序命令加入命令队列,再将第一同步写命令加入命令队列包括:若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,且携带有逻辑地址的所述第一同步写命令和最近一次已加入到命令队列的同步写命令的类型均为指向Data的同步写命令,则,根据所述逻辑地址状态表确定所述第一同步写命令携带的逻辑地址是否已写入数据;
若已写入数据,则先将保序命令加入命令队列,再将第一同步写命令加入命令队列。
可选地,在将保序命令加入向命令队列之后,方法还包括:将逻辑地址状态表中的其它逻辑地址的状态都更改为未写入数据。
根据本公开示例性实施方式的第二方面,提供一种同步写装置,包括:接收单元,被配置为接收第一进程的第一同步写命令;控制单元,被配置为若进程状态表中指示没有第一进程的其它同步写命令加入命令队列,将第一同步写命令加入命令队列,其中,进程状态表用于指示是否有进程的其它同步写命令已加入命令队列;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,先将保序命令加入命令队列,再将第一同步写命令加入命令队列,其中,保序命令用于指示命令队列中位于保序命令之前的同步写命令在第一同步写命令之前被存储设备执行;发送单元,被配置为按照命令队列中命令的顺序,向存储设备发送命令队列中的命令。
可选地,进程状态表中包括进程状态信息,控制单元,还被配置为若进程状态表中的第一进程的进程状态信息指示没有第一进程的其它同步写命令加入命令队列,在将第一同步写命令加入命令队列之后,将第一进程的进程状态信息更改为指示有第一进程的其它同步写命令已加入命令队列;第二命令发送单元,还被配置为若进程状态表中的第一进程的进程状态信息指示有第一进程的其它同步写命令已加入命令队列,在将保序命令加入命令队列后,将进程状态表中的其它进程的进程状态信息更改为指示没有其它进程的同步写命令加入命令队列。
可选地,进程状态表包括进程标识号;控制单元,还被配置为在接收到第一进程的第一同步写命令之后,若进程状态表中不包括第一进程的进程标识号,则确定进程状态表指示没有第一进程的其它同步写命令加入命令队列;若进程状态表中包括第一进程的进程标识号,则确定进程状态表指示有第一进程的其它同步写命令已加入命令队列。
可选地,控制单元,被配置为更新进程状态表,
若进程状态表中指示没有第一进程的其它同步写命令加入命令队列,将第一同步写命令加入命令队列后,将第一进程的进程标识号保存到进程状态表;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,将保序命令加入命令队列后,将进程状态表中其它进程的进程标识号移除。
可选地,进程状态表中还包括最近一次已加入到命令队列的同步写命令的类型,同步写命令的类型包括指向数据页Data的同步写命令和指向节点页Node的同步写命令,控制单元,还被配置为确定第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,且第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型不同,则先将保序命令加入命令队列,再将第一同步写命令加入命令队列。
可选地,控制单元,还被配置为维护指示存储设备对应地址是否已写入数据的逻辑地址表;若所述进程状态表中指示有所述第一进程的其它同步写命令已加入命令队列,且携带有逻辑地址的所述第一同步写命令和最近一次已加入到命令队列的同步写命令的类型均为指向Data的同步写命令,
则,根据所述逻辑地址状态表确定所述第一同步写命令携带的逻辑地址是否已写入数据;
若已写入数据,先将保序命令加入所述命令队列,再将所述第一同步写命令加入所述命令队列。
可选地,控制单元,还被配置为在将保序命令加入向命令队列之后,将逻辑地址状态表中的其它逻辑地址的状态都更改为未写入数据。
根据本公开示例性实施方式的第三方面,提供一种电子系统,所述电子系统包括:存储装置;主处理器,被配置为执行上述的同步写的方法来控制存储装置存储数据。
根据本公开示例性实施方式的第四方面,提供一种主机存储系统,所述主机存储系统包括:主机;存储装置,其中,主机被配置为执行上述的同步写的方法来控制存储装置存储数据。
根据本公开示例性实施方式的第五方面,提供一种通用闪存系统,所述通用闪存系统包括:通用闪存主机;通用接口;通用闪存装置,被配置为经由通用闪存接口与通用闪存主机通信,其中,通用闪存主机被配置为执行上述的同步写的方法来控制通用闪存主机存储数据。
根据本公开示例性实施方式的第六方面,提供一种数据中心,所述数据中心包括:应用服务器;存储服务器,被配置为通过网络与应用服务器通信,其中,应用服务器被配置为执行上述的同步写的方法来控制存储服务器存储数据。
根据本公开示例性实施方式的第七方面,提供一种存储系统,包括:文件系统层、驱动层、存储设备;文件系统层,向驱动层下发第一进程的第一同步写命令;驱动层,执行如上述的同步写入方法。
根据本公开示例性实施方式的第八方面,提供一种存储有计算机程序的计算机可读存储介质,其中,当所述计算机程序被处理器执行时,实现本公开所述的同步写方法。
根据本公开示例性实施方式的第九方面,提供一种电子设备,包括:至少一个处理器;至少一个存储计算机可执行指令的存储器,其中,所述计算机可执行指令在被所述至少一个处理器运行时,促使所述至少一个处理器执行本公开所述的同步写方法。
本公开的同步写方法及装置、存储系统、电子设备,考虑到了同步写命令的进程信息,从而可以在保证同一进程的同步写命令的下发顺序的基础上,尽量减少下发给存储设备的保序命令的个数,可以大幅提升多线程并发场景下的同步写性能。
将在接下来的描述中部分阐述本公开总体构思另外的方面和/或优点,有一部分通过描述将是清楚的,或者可以经过本公开总体构思的实施而得知。
附图说明
通过下面结合示例性地示出实施例的附图进行的描述,本公开的示例性实施例的上述和其他目的和特点将会变得更加清楚,其中:
图1是相关技术中fSync、noBarrier以及fBarrier三种方式的同步写示意图;
图2是根据本公开的示例性实施方式的同步写方法的流程图;
图3是根据本公开的示例性实施方式的同步写方法与相关技术同步写方法对比示意图;
图4是根据本公开的示例性实施方式的电子系统示意图;
图5是基于Android系统的部署本公开的同步写方法的Barrier-enabled根据IO栈的体系架构示意图;
图6是根据本公开的示例性实施方式的主机存储系统示意图;
图7是根据本公开的示例性实施方式的UFS系统示意图;
图8是根据本公开的示例性实施方式的数据中心示意图;
图9是根据本公开的示例性实施方式的同步写装置的框图示意图。
具体实施方式
提供下面的具体实施方式以帮助读者获得对在此描述的方法、设备和/或系统的全面理解。然而,在理解本申请的公开之后,在此描述的方法、设备和/或系统的各种改变、修改和等同物将是清楚的。例如,在此描述的操作的顺序仅是示例,并且不限于在此阐述的那些顺序,而是除了必须以特定的顺序发生的操作之外,可如在理解本申请的公开之后将是清楚的那样被改变。此外,为了更加清楚和简明,本领域已知的特征的描述可被省略。
在此描述的特征可以以不同的形式来实现,而不应被解释为限于在此描述的示例。相反,已提供在此描述的示例,以仅示出实现在此描述的方法、设备和/或系统的许多可行方式中的一些可行方式,所述许多可行方式在理解本申请的公开之后将是清楚的。
在此使用的术语仅用于描述各种示例,并不将用于限制公开。除非上下文另外清楚地指示,否则单数形式也意在包括复数形式。术语“包含”、“包括”和“具有”说明存在叙述的特征、数量、操作、构件、元件和/或它们的组合,但不排除存在或添加一个或多个其他特征、数量、操作、构件、元件和/或它们的组合。
除非另有定义,否则在此使用的所有术语(包括技术术语和科学术语)具有与由本公开所属领域的普通技术人员在理解本公开之后通常理解的含义相同的含义。除非在此明确地如此定义,否则术语(诸如,在通用词典中定义的术语)应被解释为具有与它们在相关领域的上下文和本公开中的含义一致的含义,并且不应被理想化或过于形式化地解释。
此外,在示例的描述中,当认为公知的相关结构或功能的详细描述将引起对本公开的模糊解释时,将省略这样的详细描述。
为了更好的理解本公开方案,下面对目前的fSync、noBarrier以及fBarrier三种方式进行简单的介绍,三种方式的对比如图1所示:
fSync方式:强制将缓存页(page cache)中的数据持久化到闪存(Flash)存储设备,保证后写入的数据不会在先写入的数据之前到达闪存存储设备,然后才会下发下一次同步写命令。目前的fSync机制主要包括两个步骤:等待传输(wait on transfer)和落盘(flush),这两个步骤都会带来巨大的开销,因此,fSync的调用影响了有序写的性能。fSync方式的优点是数据存储顺序不会被打乱,数据绝对安全,缺点是存储的时间开销太大,导致性能较差。
noBarrier方式:与传统的fSync方式相比,省去了flush操作,能达到提升性能的目标,但不能保证数据的有序存储。noBarrier方式的速率大概是fSync方式的5~6倍,但数据相对不安全。
fBarrier方式:在两次写操作中间增加屏障命令(barrier),后一次写操作等待前一次写操作到达小型计算机系统接口(SCSI,Small Computer System Interface)层即可下发,无需等待前一写操作到达存储设备;并且barrier命令可以保证数据有序落盘到存储设备,从而减少了wait on transfer和flush的开销。fBarrier方式速度最快,并且与fSync方式在数据安全方面性能相当,而在多线程情况下性能相对noBarrier较差。
以F2FS(Flash Friendly File System,闪存友好文件系统)为例说明fBarrier方式,为保证数据一致性,write data命令需要在write node命令之前被下发到存储设备,F2FS在write data命令与write node命令中间增加barrier命令,下发给屏障使能(barrier enabled)的存储设备,barrier enabled的存储设备收到barrier命令后,会确保barrier命令前的write data命令先于write node命令被落盘到Flash存储设备。通常情况下,在单线程场景下同步写性能得到了大幅提升,但是,随着线程数量的增加同步写性能则会不断下降,甚至出现负优化。其主要原因在于:虽然fBarrier使用等待发送(wait ondispatch)机制替代wait on transfer机制,充分发挥了直接存储器访问(Direct MemoryAccess,缩写为DMA)传输的并行性,提升了同步写性能。但是,支持保序命令(barrier命令)的存储设备收到barrier命令后,要进行保序操作,增加了额外的开销。尤其是fBarrier机制对于多线程中每个write data命令和write node命令之间均插入保序命令,这样在线程增多的情况下Flash存储设备的性能损耗较大,甚至抵消了等待发送(wait on dispatch)机制带来的性能提升。
针对上述问题,根据本公开示例性实施方式的一个方面,提供一种同步写的方法。参照图2所示,该同步写方法包括如下步骤:
在步骤S201中,接收第一进程的第一同步写命令。上述第一同步写命令是第一进程接收的多个同步写命令中的任一同步写命令。
在步骤S202中,若进程状态表中指示没有第一进程的其它同步写命令加入命令队列,将第一同步写命令加入命令队列,其中,进程状态表用于指示是否有进程的其它同步写命令已加入命令队列。
在该步骤中,在步骤S201中确定结果为否的情况下,可以将第一同步写命令的相关信息(如第一同步写命令的标识)加入命令队列。
在步骤S203中,若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,先将保序命令加入命令队列,再将第一同步写命令加入命令队列,其中,保序命令用于指示命令队列中位于保序命令之前的同步写命令在第一同步写命令之前被存储设备执行。
在本步骤中,在步骤S201中确定结果为是的情况下,则可以将保序命令的相关信息(如保序命令的标识)加入命令队列,再将所述第一同步写命令的相关信息(如第一同步写命令的标识)加入所述命令队列。
在步骤S204中,按照命令队列中命令的顺序,向存储设备发送命令队列中的命令。
需要说明的是,进程状态表可以包括但不限于采用如下两种方式:
方式一、进程状态表包括进程标识号和进程状态信息;
方式二、进程状态表可以仅包括进程标识号。
对于方式一,进程状态信息指示了是否有对应进程的其它命令已加入到命令队列。其中,进程状态信息可以采用标志位形式实现,如0代表确定无其它命令已加入到命令队列,1代表确定有其它命令已加入到命令队列。对于方式二,进程状态表中如果包括有第一进程的标识号则指示有其它命令已加入到命令队列,如果未包括第一进程的标识号则指示没有其它命令已加入到命令队列。
为了实时管理进程的同步写命令,以确定在同步写命令下发之前是否要下发保序命令,本公开需要实时更新进程状态表,具体的步骤如下:
对于方式一,若进程状态表中的第一进程的进程状态信息指示没有第一进程的其它同步写命令加入命令队列,在将第一同步写命令加入命令队列之后,将第一进程的进程状态信息更改为指示有第一进程的其它同步写命令已加入命令队列;若进程状态表中的第一进程的进程状态信息指示有第一进程的其它同步写命令已加入命令队列,在将保序命令加入命令队列后,将进程状态表中的其它进程的进程状态信息更改为指示没有其它进程的同步写命令加入命令队列,而第一进程的进程状态信息的仍然保持有第一进程的其它同步写命令已加入命令队列,并将所述第一同步写命令加入命令队列。通过本实施例,可以方便、快速的确定是否第一进程的其它同步写命令已加入命令队列。需要说明的是,对于进程状态表的更新和第一同步写命令加入命令队列两个步骤的执行顺序,可以先更新再加入,也可以先加入再更新,或者在某种情况下可以并行执行,本申请对此不作具体限定。
需要说明的是,若进程状态表中不包括第一进程,则表示所述命令队列中没有所述第一进程的其它同步写命令,在将所述第一同步写命令加入所述命令队列后,将所述第一进程的标识加入到所述进程状态表,并将所述第一进程的进程状态信息设置为有第一进程的其它同步写命令已加入命令队列。
对于方式二,若进程状态表中指示没有第一进程的其它同步写命令加入命令队列,将第一同步写命令加入命令队列后,将第一进程的进程标识号保存到进程状态表;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,先将保序命令加入命令队列,再将第一同步写命令加入命令队列后,还需要将进程状态表中其它进程的进程标识号移除,保留进程状态表中的第一进程的标识号。需要说明的是,对于进程状态表的更新和第一同步写命令加入命令队列两个步骤的执行顺序,可以先更新再加入,也可以先加入再更新,或者在某种情况下可以并行执行,本申请不对此进行限定。
根据本实施例,下发保序命令的同时,仅更新进程状态表中其它进程,因为该其它进程是在保序命令前发送的,保序命令已经对该其他进程进行了保序,所以此时仅更新进程状态表中其它进程(更新其它进程的进程状态信息或从进程状态表移除其它进程的标识号)。
如图3所示,为实现同样的保序效果,相关技术需要下发8个保序命令(barrier),因为目前fBarrier方式对于多线程中每个线程的data、node之间均需下发barrier命令,这样容易造成barrier命令的浪费,如图3所示,有两个B(Barrier)是挨着发送,此时可以将其合并,即只发一个保序命令即可;而且不同进程之间data、node并不需要保证写顺序,所以不同进程之间的data、node之间无需下发保序命令。因此,图3中本公开只需要两个barrier命令就可以,可以大大减少因为处理barrier命令带来的性能损耗。
在另一种示例性的实施例中,从文件系统(File system)层下发一个同步写命令后,由于该同步写命令携带的信息量大,可能到块(Block)层后会被分割成两个或多个命令,故传输到驱动层(Driver)层后则会被打包为多条的同步写命令,可能包括多条指向Data的同步写命令和/或多条指向Node的同步写命令,这样的多条命令在向下发送时,并不是任何同一进程的前后两条同步写命令之间需要加入保序命令Barrier。为了进一步减少保序命令(Barrier)的下发次数,还会考虑同步写命令类型。
相应的在本公开的实施例中,进程状态表中还可以包括第一进程的最近一次已加入到命令队列的同步写命令的类型,其中,同步写命令的类型包括指向数据页Data的同步写命令和指向节点页Node的同步写命令。对于上述两种类型的进程状态表,都可以包括第一进程的最近一次已加入到命令队列的同步写命令的类型,在每次向命令队列下发第一同步写命令后,会实时将第一同步写命令的类型更新为最近一次已加入到命令队列的同步写命令的类型。
具体的同步写处理流程包括:若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,再确定第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型。前后两次同步写命令存在以下情况:
一、第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型不同,则先将保序命令加入命令队列,再将第一同步写命令加入命令队列。
二、第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型均为指向Node的同步写命令,则无需在命令队列中加入保序命令,直接将第一同步写命令加入到命令队列。
三、第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型均为指向Data的同步写命令,还需要依据LBA(Logical block address,逻辑块地址)状态表(即逻辑地址状态表)确定所述第一同步写命令携带的逻辑地址是否有已写入的数据,若所述逻辑地址已写入数据,则先将保序命令加入命令队列,再将第一同步写命令加入命令队列;若所述逻辑地址没有写入数据,则直接将所述第一同步写命令加入命令队列。
对于均指向Data的同步写命令的场景下,本公开还需要维护有LBA状态表,用于指示存储设备对应LBA中的地址是否已有数据写入。
相应的,若所述逻辑地址已写入数据,在先将保序命令加入命令队列,再将第一同步写命令加入命令队列后,还需要将所述LBA状态表中其它逻辑地址的状态更改为指示未写入数据,而所述第一同步写命令携带的逻辑地址的状态不作更改。若所述逻辑地址没有写入数据,再将所述第一同步写命令加入命令队列后,将LBA状态表中所述第一同步写命令携带的逻辑地址的状态维护为已写入数据。
根据本实施例,在确定进程状态表中指示第一进程的其它同步写命令已加入命令队列时,同时考虑同步写命令的类型,可以进一步减少保序命令下发的次数。
另一种示例性的实施例,本公开还提供了一种应用了存储装置的系统1000的示意图,如图4所示。系统1000可以是移动系统,例如便携式通信终端(例如,移动电话)、智能手机、平板个人计算机(PC)、可穿戴装置、医疗保健装置或物联网(IOT)装置。但是,图4的系统1000不必限于移动系统,其可以是PC、膝上型计算机、服务器、媒体播放器或汽车装置(例如,导航装置)。
参照图4,系统1000可以包括主处理器1100、存储器(例如,1200a和1200b)以及存储装置(例如,1300a和1300b)。并且,系统1000可以包括图像捕获装置1410、用户输入装置1420、传感器1430、通信装置1440、显示器1450、扬声器1460、供电装置1470以及连接接口1480中的至少一个。
主处理器1100可以控制系统1000的所有操作,更具体地,可以控制系统1000中包括的其他组件的操作。主处理器1100可以被实现为通用处理器、专用处理器或应用程序处理器等。
主处理器1100可以包括至少一个中央处理器(CPU)核1110,并且还包括控制器1120,其用于控制存储器1200a和1200b和/或存储装置1300a和1300b。在一些实施例中,主处理器1100可以进一步包括加速器1130,其是用于诸如人工智能(AI)数据操作等的高速数据操作的专用电路。加速器1130可以包括图形处理单元(GPU)、神经处理单元(NPU)和/或数据处理单元(DPU)等,并且被实现为与主处理器1100的其他组件物理上分离的芯片。
存储器1200a和1200b可以用作系统1000的主存储装置。尽管存储器1200a和1200b可以分别包括易失性存储器,例如静态随机存取存储器(SRAM)和/或动态随机存取存储器(DRAM)等,但是存储器1200a和1200b可以分别包括非易失性存储器,例如闪存、相变随机存取存储器(PRAM)和/或电阻式随机存取存储器(RRAM)等。存储器1200a和1200b可以在与主处理器1100相同的封装中实现。
存储装置1300a和1300b可以用作非易失性存储装置,其被配置为不管是否被供电都存储数据,并且具有比存储器1200a和1200b更大的存储容量。存储装置1300a和1300b可以分别包括存储器控制器(STRG CTRL)1310a和1310b以及非易失性存储器(NVM)1320a和1320b,其被配置为经由存储器控制器1310a和1310b的控制来存储数据。尽管NVM 1320a和1320b可以包括具有二维(2D)结构的闪存或三维(3D)的V-NAND结构的闪存,但是NVM 1320a和1320b可以包括其他类型的NVM,例如PRAM和/或RRAM等。
存储装置1300a和1300b可以与主处理器1100物理上分离并且包括在系统1000中,或者可以在与主处理器1100相同的封装中实现。另外,存储装置1300a和1300b可以具有固态装置(SSDs)或存储卡的类型,并且可以通过诸如稍后将描述的连接接口1480之类的接口与系统100的其他组件可移除地结合。存储装置1300a和1300b可以是应用了诸如通用闪存(UFS)、嵌入式多媒体卡(eMMC)或NVMe之类的标准协议的装置,但不限于此。
图像捕获装置1410可以拍摄静止图像或运动图像。图像捕获装置1410可以包括照相机、便携式摄像机和/或网络摄像头等。
用户输入装置1420可以接收由系统1000的用户输入的各种类型的数据,并且包括触摸板、键区、键盘、鼠标和麦克风等。
传感器1430可以检测可以从系统1000的外部获得的各种类型的物理量,并将所检测的物理量转换成电信号。传感器1430可以包括温度传感器、压力传感器、照度传感器、位置传感器、加速度传感器、生物传感器和/或陀螺仪传感器等。
通信装置1440可以根据各种通信协议在系统1000外部的其他装置之间发送和接收信号。通信装置1440可以包括天线、收发器或调制解调器等。
显示器1450和扬声器1460可以用作输出装置,其被配置为分别向系统1000的用户输出视觉信息和听觉信息。
供电装置1470可以适当地转换从嵌入在系统1000中的电池(未示出)和/或外部电源供应的电力,并且将所转换的电力供应给系统1000的每个组件。
连接接口1480可以提供系统1000和外部装置之间的连接,该外部装置连接到系统1000并且能够向系统1000发送数据和从系统1000接收数据。连接接口1480可以通过使用各种接口方案来实现,例如,高级技术附件(ATA)、串行ATA(SATA)、外部串行ATA(e-SATA)、小型计算机系统接口(SCSI)、串行SCSI(SAS)、外部设备互连(PCI)、PCI express(PCIe)、NVMe、IEEE1394、通用串行总线(USB)接口、安全数码(SD)卡接口、多媒体卡(MMC)接口、嵌入式多媒体卡(eMMC)接口、UFS接口、嵌入式UFS(eUFS)接口和紧凑式闪存(CF)卡接口等。
其中,上述公开的同步写方法可以由主处理器1100执行,其中主处理器1100部署有IO栈,IO栈分布于文件系统层,驱动层等。本公开提供的同步写方法可以部署在驱动层,保序命令不再由文件系统层发送,节省了命令从文件系统层向驱动层发送的时间,进一步提高系统的性能。
如图5所示,示例性的提供了基于Android系统的部署本公开的同步写方法的barrier-enabled IO栈的体系结构。该IO栈的体系架构包括:文件系统层(File system),Block层(Block Layer),SCSI层(SCSI Layer)及驱动层(Flash Storage Driver)。当应用程序APP通过系统调用与内核交互,调用fsync()函数来执行同步写操作。fsync()将指令分配给文件相对应的文件系统(File system),文件系统将数据页写入Block层,然后Block层在调度后向SCSI层发送数据。SCSI将接收的数据(Write data)分派到设备队列后下发到驱动层,驱动层控制器将命令加入到命令队列。相关技术中IO栈继续等待闪存返回写回标志,这意味着传输过程完成;但是barrier enabled的SCSI层通知Block层页面被调度,因此不需要等待write back标志;然后文件系统继续将节点(元数据)(Write node)写入Block层,节点写入以与前面所述相同的方式执行。
参考图5所示,驱动层可以增加控制器,控制器可以以软件方式来实现,控制器可以维护上述实施例中所述的进程状态表,或进程状态表和LBA状态表,控制器可以依据进程状态表,或进程状态表和LBA状态表确定是否需要在同一进程的两条同步写命令之间加入barrier命令,以确保同步写命令的顺序,同时保证尽可能减少下发到存储装置的barrier命令,提高存储装置的性能。
另一示例性的实施例,本公开还提供了一种主机存储系统,如图6所示,主机存储系统10可以包括主机100和存储装置200。此外,存储装置200可以包括存储器控制器210和NVM 220。根据本发明的示例性实施例,主机100可以包括主机控制器110和主机存储器120。主机存储器120可以用作缓冲存储器,其被配置为临时存储要发送到存储装置200的数据或从存储装置200接收的数据。
存储装置200可以包括存储介质,其被配置为响应于来自主机100的请求而存储数据。作为示例,存储装置200可以包括SSD、嵌入式存储器和可装卸的外部存储器中的至少一个。当存储装置200是SSD时,存储装置200可以是符合NVMe标准的装置。当存储装置200是嵌入式存储器或外部存储器时,存储装置200可以是符合UFS标准或eMMC标准的装置。主机100和存储装置200均可以根据采用的标准协议来生成包(packet)并发送该包。
当存储装置200的NVM 220包括闪存时,所述闪存可以包括2D NAND存储阵列或3D(或垂直)NAND(VNAND)存储阵列。作为另一示例,存储装置200可以包括各种其他种类的NVM。例如,存储装置200可以包括磁性随机存取存储器(MRAM)、自旋转移扭矩MRAM、导电桥式RAM(CBRAM)、铁电RAM(FRAM)、PRAM、RRAM以及各种其他类型的存储器。
根据一实施例,主机控制器110和主机存储器120可以实现为单独的半导体芯片。或者,在一些实施例中,主机控制器110和主机存储器120可以集成在同一半导体芯片中。作为示例,主机控制器110可以是包括在应用处理器(AP)中的多个模块中的任何一个。所述AP可以实现为片上系统(SoC)。此外,主机存储器120可以是所述AP中包括的嵌入式存储器或所述AP外部的存储器模块。
主机控制器110可以管理将主机存储器120的缓冲区域的数据(例如,写入数据)存储在NVM 220中的操作或将NVM 220的数据(例如,读取数据)存储在缓冲区域中的操作。
存储器控制器210可以包括主机接口211、存储器接口212和CPU 213。另外,存储器控制器210还可以包括闪存转换层(FTL)214、包管理器215、缓冲存储器216、纠错码(ECC)引擎217和高级加密标准(AES)引擎218。存储器控制器210可以进一步包括其中装载有FTL214的工作存储器(未示出)。CPU 213可以执行FTL 214来控制NVM 220上的数据写入和读取操作。
主机接口211可以向主机100发送包和从主机100接收包。从主机100发送到主机接口211的包可以包括命令或要被写入NVM 220的数据等。从主机接口211发送到主机100的包可以包括对命令的响应或从NVM 220读取的数据等。存储器接口212可以将要被写入NVM220的数据发送到NVM 220或接收从NVM 220读取的数据。存储器接口212可以被配置为符合诸如切换(Toggle)或开放NAND闪存接口(ONFI)的标准协议。
FTL 214可以执行各种功能,例如地址映射操作、磨损均衡操作以及垃圾收集操作。地址映射操作可以是将从主机100接收的逻辑地址转换为用于在NVM 220中实际存储数据的物理地址的操作。磨损均衡操作可以是通过允许均匀地使用NVM 220的块来防止特定块的过度退化的技术。作为示例,磨损均衡操作可以通过使用平衡物理块的擦写计数的固件技术来实现。垃圾收集操作可以是通过在将现有块的有效数据复制到新块之后擦除现有块来确保NVM 220中的可用容量的技术。
包管理器215可以根据同一主机100的接口的协议生成包,或者从从主机100接收到的包中解析各种类型的信息。另外,缓冲存储器216可以临时存储要写入NVM 220的数据或要从NVM 220读取的数据。尽管缓冲存储器216可以是包括在存储器控制器210中的组件,但是缓冲存储器216可以在存储器控制器210的外部。
ECC引擎217可以对从NVM 220读取的读取数据执行错误检测和校正操作。更具体地,ECC引擎217可以生成用于要写入到NVM 220的写入数据的奇偶校验位,并且所生成的奇偶校验位可以与写入数据一起存储在NVM220中。在从NVM 220读取数据期间,ECC引擎217可以通过使用读取数据以及从NVM 220读取的奇偶校验位来校正读取数据中的错误,并输出错误校正后的读取数据。
AES引擎218可以通过使用对称密钥算法对输入到存储器控制器210的数据执行加密操作和解密操作中的至少一个。
其中,上述公开的同步写方法可以由主控制器1100执行,向存储装置200有序写入数据。
如图7所示,本申请还提供了一种USF系统2000,UFS系统2000可以是符合电子工程设计发展联合协会(JEDEC)所宣布的UFS标准的系统,并且包括UFS主机2100、UFS装置2200(对应上述UFS设备)以及UFS接口2300。UFS主机2100可以通过UFS接口2300连接到UFS装置2200。当图4的主处理器1100为应用处理器时,UFS主机2100可以实现为应用处理器的一部分。UFS主机控制器2110和主机存储器2140可以分别对应于图4的主处理器1100的和控制器1120以及存储器1200a和1200b。UFS装置2200可以对应于图4的存储装置1300a和1300b,并且UFS装置控制器2210和NVM 2220可以分别对应于图4的存储器控制器1310a和1310b以及NVM1320a和1320b。
UFS主机2100可以包括UFS主机控制器2110、应用程序2120、UFS驱动器2130,主机存储器2140和UFS互连(UIC)层2150。UFS装置2200可以包括UFS装置控制器2210、NVM 2220、存储接口2230、装置存储器2240、UIC层2250以及调节器2260。NVM 2220可以包括多个存储元件2221。尽管每个存储元件2221可以包括具有2D结构或3D结构的V-NAND闪存,但是每个存储元件2221可以包括另一种NVM,例如PRAM和/或RRAM等。UFS装置控制器2210可以通过存储接口2230连接到NVM 2220。存储接口2230可以设置为符合诸如Toggle或ONFI的标准协议。
应用程序2120可以指想要与UFS装置2200进行通信以使用UFS装置2200的功能的程序。应用程序2120可以发送输入-输出请求(IOR)到UFS驱动器2130,以用于UFS装置2200上的输入/输出(I/O)操作。IOR可以指数据读取请求、数据存储(或写入)请求和/或数据擦除(或丢弃)请求,但不限于此。
UFS驱动器2130可以通过UFS-主机控制器接口(UFS-HCI)来管理UFS主机控制器2110。UFS驱动器2130可以将由应用程序2120生成的IOR转换为由UFS标准定义的UFS命令,并且将UFS命令发送到UFS主机控制器2110。一个IOR可以被转换成多个UFS命令。尽管UFS命令基本上可以由SCSI标准定义,但是UFS命令可以是专用于UFS标准的命令。
UFS主机控制器2110可以通过UIC层2150和UFS接口2300将由UFS驱动器2130转换的UFS命令发送到UFS装置2200的UIC层2250。在UFS命令的发送期间,UFS主机控制器2110的UFS主机寄存器2111可以用作命令队列(CQ)。
参考图7所示,本申请公开的同步写方法可以应用到UFS驱动器,UFS驱动器维护进程状态表,或进程状态表和LBA状态表。当接收到UFS主机控制器2110下发的同步写命令后,根据进程状态表,或进程状态表和LBA状态表确定是否在命令队列中加入Barrier命令,在多线程环境下保证同步写命令有序写入UFS装置2200中的情况下,还能尽可能减少下发Barrier次数,提高UFS装置2200的性能。
另一种示例性的实施例,本公开还提供了应用上述实施例同步写方法的数据中心3000。如图8所示,数据中心3000可以是收集各种类型的数据并提供服务的设施,并且被称为数据存储中心。数据中心3000可以是用于操作搜索引擎和数据库的系统,并且可以是公司(如,银行或政府机构)所使用的计算系统。数据中心3000可以包括应用服务器3100至3100n和存储服务器3200至3200m。根据实施例,应用3100至3100n的数量和存储服务器3200至3200m的数量可以不是固定的。应用服务器3100至3100n的数量和存储服务器3200至3200m的数量可以彼此不同。
应用服务器3100或存储服务器3200可以包括处理器3110和3210以及存储器3120和3220中的至少一个。现在将以存储服务器3200为例进行描述。处理器3210可以控制存储服务器3200的所有操作,访问存储器3220,并且执行加载到存储器3220的指令和/或数据。存储器3220可以是双数据率同步DRAM(DDR SDRAM)、高带宽存储器(HBM)、混合内存立方体(HMC)、双列直插式内存模块(DIMM)、傲腾DIMM(Optane DIMM)或非易失性DIMM(NVMDIMM)。在一个实施例中,存储服务器3200中包括的处理器3210和存储器3220的数量可以被不同地选择。在一个实施例中,处理器3210和存储器3220可以提供处理器-存储器对。在一个实施例中,处理器3210的数量与存储器3220的数量可以彼此不同。处理器3210可以包括单核处理器或多核处理器。对于存储服务器3200的以上描述可以类似地应用于应用服务器3100。在一些实施例中,应用服务器3100可以不包括存储装置3150。存储服务器3200可以包括至少一个存储装置3250。根据实施例,存储服务器3200中包括的存储装置3250的数量可以被不同地选择。
在下文中,将主要描述应用服务器3100和存储服务器3200。应用服务器3100的描述可以应用于另一应用服务器3100n,并且存储服务器3200的描述可以应用于另一存储服务器3200m。
应用服务器3100可以通过网络3300将用户或客户端请求存储的数据存储在存储服务器3200至3200m中的一个。此外,应用服务器3100可以通过网络3300从存储服务器3200至3200m中的一个获得由用户或客户端请求读取的数据。例如,应用程序服务器3100可以被实现为网络服务器或数据库管理系统(DBMS)。
应用服务器3100可以通过网络3300访问包括在另一应用服务器3100n中的存储器3120n或存储装置3150n。或者,应用服务器3100可以通过网络3300访问包括在存储服务器3200至3200m中的存储器3220至3220m或存储装置3250至3250m。因此,应用服务器3100可以对存储在应用服务器3100至3100n和/或存储服务器3200至3200m中的数据执行各种操作。例如,应用服务器3100可以执行用于在应用服务器3100至3100n和/或存储服务器3200至3200m之间移动或复制数据的指令。在这种情况下,可以将数据从存储服务器3200至3200m的存储装置3250至3250m通过存储服务器3200至3200m的存储器3220至3220m或直接移动到应用服务器3100至3100n的存储器3120至3120n。通过网络3300移动的数据可以是为了安全或隐私而加密的数据。
需要说明的是,本公开的方法可以由如图8所示的应用服务器3100执行。
根据本公开示例性实施方式的另一个方面,提供了一种同步写装置,参照图9,该同步写装置900包括:接收单元902、控制单元904、发送单元906。
接收单元902,被配置为接收第一进程的第一同步写命令。
控制单元904,被配置为若进程状态表中指示没有第一进程的其它同步写命令加入命令队列,将第一同步写命令加入命令队列,其中,进程状态表用于指示是否有进程的其它同步写命令已加入命令队列;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,先将保序命令加入命令队列,再将第一同步写命令加入命令队列,其中,保序命令用于指示命令队列中位于保序命令之前的同步写命令在第一同步写命令之前被存储设备执行.
发送单元906,被配置为按照命令队列中命令的顺序,向存储设备发送命令队列中的命令。
在本公开的实施例中,进程状态表中包括进程状态信息;控制单元904,还被配置为若进程状态表中的第一进程的进程状态信息指示没有第一进程的其它同步写命令加入命令队列,在将第一同步写命令加入命令队列之后,将第一进程的进程状态信息更改为指示有第一进程的其它同步写命令已加入命令队列;若进程状态表中的第一进程的进程状态信息指示有第一进程的其它同步写命令已加入命令队列,在将保序命令加入命令队列后,将进程状态表中的其它进程的进程状态信息更改为指示没有其它进程的同步写命令加入命令队列。
在本公开的实施例中,进程状态表包括进程标识号;控制单元904,还被配置为在接收到第一进程的第一同步写命令之后,若进程状态表中不包括第一进程的进程标识号,则确定进程状态表指示没有第一进程的其它同步写命令加入命令队列;若进程状态表中包括第一进程的进程标识号,则确定进程状态表指示有第一进程的其它同步写命令已加入命令队列。
在本公开的实施例中,控制单元904还被配置为更新进程状态表,若进程状态表中指示没有第一进程的其它同步写命令加入命令队列,将第一同步写命令加入命令队列后,将第一进程的进程标识号保存到进程状态表;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,在将保序命令加入命令队列后,将进程状态表中其它进程的进程标识号移除。
在本公开的实施例中,进程状态表中还包括最近一次已加入到命令队列的同步写命令的类型,同步写命令的类型包括指向数据页Data的同步写命令和指向节点页Node的同步写命令;控制单元904,被配置为确定第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型;若进程状态表中指示有第一进程的其它同步写命令已加入命令队列,且第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型不同,则先将保序命令加入命令队列,再将第一同步写命令加入命令队列。
在本公开的实施例中,控制单元904,还被配置为维护指示存储设备对应地址是否已写入数据的逻辑地址表;若所述进程状态表中指示有所述第一进程的其它同步写命令已加入命令队列,且携带有逻辑地址的所述第一同步写命令和最近一次已加入到命令队列的同步写命令的类型均为指向Data的同步写命令,则,根据所述逻辑地址状态表确定所述第一同步写命令携带的逻辑地址是否已写入数据;若已写入数据,先将保序命令加入所述命令队列,再将所述第一同步写命令加入所述命令队列。
在本公开的实施例中,控制单元904,还被配置为在将保序命令加入向命令队列之后,将逻辑地址状态表中的其它逻辑地址的状态都更改为指示未写入数据。
应该理解,根据本公开的示例性实施方式的存储方法和存储装置中的各个单元/模块可被实现为硬件组件和/或软件组件。本领域技术人员根据限定的各个单元/模块所执行的处理,可以例如使用现场可编程门阵列(FPGA)或专用集成电路(ASIC)来实现各个单元/模块。
根据本公开示例性实施方式的一个方面,还提供一种存储系统,包括:文件系统层、驱动层、存储设备;文件系统层,向驱动层下发第一进程的第一同步写命令;驱动层,执行如上述的同步写入方法。
根据本公开示例性实施例的再一个方面,提供一种存储有计算机程序的计算机可读存储介质,其中,当所述计算机程序被处理器执行时,实现本公开所述的存储方法。
具体地,根据本公开的示例性实施例的用于同步写的方法可被编写为计算机程序、代码段、指令或它们的任何组合,并被记录、存储或固定在一个或多个非暂时性计算机可读存储介质中或一个或多个非暂时性计算机可读存储介质上。所述计算机可读存储介质是可存储由计算机系统读出的数据的任意数据存储装置。计算机可读存储介质的示例包括:只读存储器、随机存取存储器、只读光盘、磁带、软盘、光数据存储装置和载波(诸如经有线或无线传输路径通过互联网的数据传输)。
根据本公开示例性实施例的又一个方面,提供一种电子设备,其中,所述电子设备包括:至少一个处理器;至少一个存储计算机可执行指令的存储器,其中,所述计算机可执行指令在被所述至少一个处理器运行时,促使所述至少一个处理器执行本公开所述的同步写的方法。
具体地,所述电子设备可以广义地为平板电脑、智能手机、智能手表,或任何其他具有必要的计算和/或处理能力的电子设备。在一个实施例中,该电子设备可包括通过系统总线连接的处理器、存储器、网络接口、通信接口等。该电子设备的处理器可用于提供必要的计算、处理和/或控制能力。该电子设备的存储器可包括非易失性存储介质和内存储器。该非易失性存储介质中或上可存储有操作系统、计算机程序等。该内存储器可为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口和通信接口可用于与外部的设备通过网络连接和通信。

Claims (15)

1.一种同步写方法,其特征在于,包括:
接收第一进程的第一同步写命令;
若进程状态表中指示没有所述第一进程的其它同步写命令加入命令队列,将所述第一同步写命令加入所述命令队列,其中,所述进程状态表用于指示是否有进程的其它同步写命令已加入命令队列;
若进程状态表中指示有所述第一进程的其它同步写命令已加入命令队列,先将保序命令加入所述命令队列,再将所述第一同步写命令加入所述命令队列,其中,所述保序命令用于指示所述命令队列中位于所述保序命令之前的同步写命令在所述第一同步写命令之前被存储设备执行;
按照命令队列中命令的顺序,向所述存储设备发送所述命令队列中的命令。
2.根据权利要求1所述的同步写方法,其特征在于,所述进程状态表中包括进程状态信息,所述方法还包括:
若所述进程状态表中的所述第一进程的进程状态信息指示没有所述第一进程的其它同步写命令加入命令队列,在将所述第一同步写命令加入所述命令队列之后,将所述第一进程的进程状态信息更改为指示有所述第一进程的其它同步写命令已加入命令队列;
若所述进程状态表中的所述第一进程的进程状态信息指示有所述第一进程的其它同步写命令已加入命令队列,在将保序命令加入所述命令队列后,将所述进程状态表中的其它进程的进程状态信息更改为指示没有所述其它进程的同步写命令加入命令队列。
3.根据权利要求1所述的同步写方法,其特征在于,所述进程状态表包括进程标识号;
在接收第一进程的第一同步写命令之后,还包括:
若所述进程状态表中不包括所述第一进程的进程标识号,则确定所述进程状态表指示没有所述第一进程的其它同步写命令加入命令队列;
若所述进程状态表中包括所述第一进程的进程标识号,则确定所述进程状态表指示有所述第一进程的其它同步写命令已加入命令队列。
4.根据权利要求3所述的同步写方法,其特征在于,所述方法还包括:
若所述进程状态表中指示没有所述第一进程的其它同步写命令加入命令队列,将所述第一同步写命令加入所述命令队列后,将所述第一进程的进程标识号保存到所述进程状态表;
若所述进程状态表中指示有所述第一进程的其它同步写命令已加入命令队列,将保序命令加入所述命令队列后,将所述进程状态表中其它进程的进程标识号移除。
5.根据权利要求1所述的同步写方法,其特征在于,所述进程状态表中还包括最近一次已加入到命令队列的同步写命令的类型,其中,所述同步写命令的类型包括指向数据页Data的同步写命令和指向节点页Node的同步写命令,所述方法还包括:
确定所述第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型;
若进程状态表中指示有所述第一进程的其它同步写命令已加入命令队列,先将保序命令加入所述命令队列,再将所述第一同步写命令加入所述命令队列包括:
若进程状态表中指示有所述第一进程的其它同步写命令已加入命令队列,且所述第一进程的第一同步写命令和最近一次已加入到命令队列的同步写命令的类型不同,则先将保序命令加入所述命令队列,再将所述第一同步写命令加入所述命令队列。
6.根据权利要求5所述的同步写方法,其特征在于,所述方法还包括:逻辑地址状态表,用于指示存储设备对应地址是否已写入数据;
所述若进程状态表中指示有所述第一进程的其它同步写命令已加入命令队列,先将保序命令加入所述命令队列,再将所述第一同步写命令加入所述命令队列包括:
若所述进程状态表中指示有所述第一进程的其它同步写命令已加入命令队列,且携带有逻辑地址的所述第一同步写命令和最近一次已加入到命令队列的同步写命令的类型均为指向Data的同步写命令,
则根据所述逻辑地址状态表确定所述第一同步写命令携带的逻辑地址是否已写入数据;
若已写入数据,先将保序命令加入所述命令队列,再将所述第一同步写命令加入所述命令队列。
7.根据权利要求6所述的同步写方法,其特征在于,在将保序命令加入所述向命令队列之后,所述方法还包括:
将所述逻辑地址状态表中的其它逻辑地址的状态都更改为未写入数据。
8.一种同步写装置,其特征在于,包括:
接收单元,被配置为接收第一进程的第一同步写命令;
控制单元,被配置为若进程状态表中指示没有所述第一进程的其它同步写命令加入命令队列,将所述第一同步写命令加入所述命令队列,其中,所述进程状态表用于指示是否有进程的其它同步写命令已加入命令队列;
若进程状态表中指示有所述第一进程的其它同步写命令已加入命令队列,先将保序命令加入所述命令队列,再将所述第一同步写命令加入所述命令队列,其中,所述保序命令用于指示所述命令队列中位于所述保序命令之前的同步写命令在所述第一同步写命令之前被存储设备执行;
发送单元,被配置为按照命令队列中命令的顺序,向所述存储设备发送所述命令队列中的命令。
9.一种电子系统,所述电子系统包括:
存储设备;
主处理器,被配置为根据如权利要求1至7中任一项所述的同步写的方法来控制存储设备存储数据。
10.一种主机存储系统,所述主机存储系统包括:
主机;
存储设备,
其中,主机被配置为根据如权利要求1至7中任一项所述的同步写的方法来控制存储设备存储数据。
11.一种通用闪存系统,所述通用闪存系统包括:
通用闪存主机;
通用闪存接口;
通用闪存装置,被配置为经由通用闪存接口与通用闪存主机通信,
其中,通用闪存主机被配置为根据如权利要求1至7中任一项所述的同步写的方法来控制通用闪存主机存储数据。
12.一种数据中心,所述数据中心包括:
应用服务器;
存储服务器,被配置为通过网络与应用服务器通信,
其中,应用服务器被配置为根据如权利要求1至7中任一项所述的同步写的方法来控制存储服务器存储数据。
13.一种存储系统,其特征在于,包括:文件系统层、驱动层、存储设备,
所述文件系统层,被配置为向所述驱动层下发第一进程的第一同步写命令;
所述驱动层,被配置为执行如权利要求1至7中任一项权利要求所述的同步写入方法。
14.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,实现如权利要求1至7中任一项所述的同步写入方法。
15.一种电子设备,其特征在于,包括:
至少一个处理器;
至少一个存储计算机可执行指令的存储器,
其中,所述计算机可执行指令在被所述至少一个处理器运行时,促使所述至少一个处理器执行如权利要求1到7中的任一权利要求所述的同步写入方法。
CN202111422771.6A 2021-11-26 2021-11-26 同步写方法及装置、存储系统、电子设备 Pending CN114281245A (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202111422771.6A CN114281245A (zh) 2021-11-26 2021-11-26 同步写方法及装置、存储系统、电子设备
US17/743,204 US11853614B2 (en) 2021-11-26 2022-05-12 Synchronous write method and device, storage system and electronic device
KR1020220160886A KR20230078577A (ko) 2021-11-26 2022-11-25 동기식 쓰기 방법 및 장치, 스토리지 시스템 및 전자 장치
US18/510,390 US20240086113A1 (en) 2021-11-26 2023-11-15 Synchronous write method and device, storage system and electronic device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111422771.6A CN114281245A (zh) 2021-11-26 2021-11-26 同步写方法及装置、存储系统、电子设备

Publications (1)

Publication Number Publication Date
CN114281245A true CN114281245A (zh) 2022-04-05

Family

ID=80870049

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111422771.6A Pending CN114281245A (zh) 2021-11-26 2021-11-26 同步写方法及装置、存储系统、电子设备

Country Status (3)

Country Link
US (2) US11853614B2 (zh)
KR (1) KR20230078577A (zh)
CN (1) CN114281245A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302620A (zh) * 2023-05-18 2023-06-23 珠海星云智联科技有限公司 一种支持乱序回写和并行化的命令通道

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8006047B2 (en) 2007-06-27 2011-08-23 Hitachi Global Storage Technologies Netherlands B.V. Storage device with write barrier sensitive write commands and write barrier insensitive commands
US10248349B2 (en) 2016-03-22 2019-04-02 Oracle International Corporation Efficient and thread-safe objects for dynamically-typed languages
JP6944107B2 (ja) 2017-07-11 2021-10-06 富士通株式会社 情報処理装置、情報処理システム及びプログラム
CN110033799A (zh) 2018-01-12 2019-07-19 三星电子株式会社 基于屏障命令按顺序存储数据的存储设备
CN108268219B (zh) 2018-02-01 2021-02-09 杭州宏杉科技股份有限公司 一种处理io请求的方法及装置
CN114610654A (zh) 2018-05-21 2022-06-10 北京忆芯科技有限公司 一种固态存储设备以及向其写入数据的方法
KR20200044646A (ko) 2018-10-19 2020-04-29 한양대학교 산학협력단 듀얼 모드 저널링 방법 및 장치
CN109471596B (zh) 2018-10-31 2022-03-18 北京小米移动软件有限公司 数据写入方法、装置、设备及存储介质
KR20200076946A (ko) 2018-12-20 2020-06-30 삼성전자주식회사 스토리지 장치의 데이터 기입 방법 및 이를 수행하는 스토리지 장치

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302620A (zh) * 2023-05-18 2023-06-23 珠海星云智联科技有限公司 一种支持乱序回写和并行化的命令通道
CN116302620B (zh) * 2023-05-18 2023-08-18 珠海星云智联科技有限公司 一种支持乱序回写和并行化的命令通道

Also Published As

Publication number Publication date
US11853614B2 (en) 2023-12-26
US20230168841A1 (en) 2023-06-01
US20240086113A1 (en) 2024-03-14
KR20230078577A (ko) 2023-06-02

Similar Documents

Publication Publication Date Title
US10732893B2 (en) Non-volatile memory over fabric controller with memory bypass
KR102365312B1 (ko) 스토리지 컨트롤러, 연산 스토리지 장치, 및 연산 스토리지 장치의 동작 방법
US11288183B2 (en) Operating method of memory system and host recovering data with write error
US20240086113A1 (en) Synchronous write method and device, storage system and electronic device
US20230393959A1 (en) Out-of-band management method for storage apparatus, baseboard management controller and storage apparatus
US20230229357A1 (en) Storage controller, computational storage device, and operational method of computational storage device
US11921639B2 (en) Method for caching data, a host device for caching data, and a storage system for caching data
KR20230071730A (ko) 데이터 프로세싱 장치 및 그것의 동작 방법
CN114510372A (zh) 储存装置及其操作方法
EP4148572A1 (en) Computational storage device and storage system including the computational storage device
US11914879B2 (en) Storage controller and storage system comprising the same
US20230153237A1 (en) Method and device for storing data
US20230393749A1 (en) Method and device of storage data
US20240037027A1 (en) Method and device for storing data
US20230141936A1 (en) Secure processor, operating method thereof, and storage device including same
EP4258097A1 (en) Operation method of host device and operation method of storage device
CN117130551A (zh) 存储装置及其数据访问方法
KR20230067439A (ko) 보안 프로세서 및 이의 동작 방법과 이를 포함하는 스토리지 장치
CN117055816A (zh) 配置zns ssd的区域的方法和装置
CN116893877A (zh) 主机装置的操作方法及存储装置的操作方法
CN115480700A (zh) 数据存储方法、存储设备以及主机
CN117008826A (zh) 数据压缩方法和装置
KR20170110808A (ko) 데이터 저장 장치를 포함하는 데이터 처리 시스템

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication