一种降低读延时的方法及装置的制作方法

文档序号:6367562阅读:181来源:国知局
专利名称:一种降低读延时的方法及装置的制作方法
技术领域
本发明属于数据存储技术领域,涉及一种降低读延时的方法及装置。
背景技术
存储领域常用的数据载体是机械硬盘和固态硬盘(SSD),由于SSD具有高性能、低延迟、低功耗、环境适应性强等优点,同时成本也在不断降低,因此目前应用的越来越普遍。SSD 一般由NAND flash芯片组成,它存在固有的比特跳变、读干扰等问题,会导致读出的数据出错,同时还有擦写次数的限制,因此在NAND flash芯片的结构和SSD设计上都采取了保证可靠性的措施。例如NAND flash内部包括一个或多个晶片,每个晶片包括多个平面,每个平面包括多个块,每个块包括多个页。其中页是读、写数据的基本单元,包括多个字节(例如2048+64字节),其中每512字节+16字节为一个检错/纠错单元,512字节用来保存数据,16字节用来保存检错/纠错码。当读取数据时,每个512+16字节的单元会进行校验,如果出错的位数较少可以被纠正,如果出错的位数太多无法纠正就需要利用上层的纠错机制例如RAID算法来解决。NAND flash的块是基本的擦除单元,每个块包括多个页(例如64个)。为了修改flash中已经写入的数据,必须先将该数据所在的块擦除,然后才能写入新数据,这是flash的基本特征。SSD在工作过程中需要不断执行擦除或写操作,而flash芯片在执行这两种操作的时候处于忙状态(通过芯片的硬件管脚R/B#来表示,高电平表示准备好,低电平表示忙),不能再响应读操作,只有等待擦除或写操作完成后才能继续执行读操作。由于NANDflash芯片的块擦除一般需要3ms,写操作一般需要900us,而读操作一般只需要50us,这样擦除和写操作会阻塞读操作,造成较大的读延时,影响存储系统的性能,在擦除或写操作特别频繁的场景下这种现象更为明显。

发明内容
本发明为解决现有的基于flash芯片的存储设备在读、写、擦除同时存在的情况下,读操作被擦除和写操作阻塞,从而造成较大读延时的问题,提供了一种降低读延时的方法及装置。本发明的实施例提供了一种降低读延时的方法,包括当读命令对应的一个或多个flash芯片处于忙状态时,将处于忙状态的一个或多个flash上读取到的数据置为错误的数据;根据所述错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,并将所述正确数据上报。本发明的实施例还提供了一种降低读延时的装置,包括 置错单元,用于当读命令对应的一个或多个flash芯片处于忙状态时,将处于忙状态的一个或多个flash上读取到的数据置为错误的数据;
重建上报单元,用于根据所述错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,并将所述正确数据上报。由上述本发明的实施例提供的技术方案可以看出,通过从flash芯片上读取到的数据置为错误的数据,并根据错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,使flash芯片处于忙状态时能够避免读操作被擦除和写操作阻塞,从而有效减少延时,提高了存储系统的性能。


为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图I为本发明的实施例提供的结合具体硬件的SSD设备的结构示意图;图2为本发明的实施例提供的SSD控制器的结构示意图;图3为本发明的实施例提供的降低读延时的方法的整体流程框图;图4为本发明的实施例提供的降低读延时的方法的流程示意图;图5为本发明的实施例提供的基于RAID控制器的结合具体硬件的SSD设备的结 构示意图;图6为本发明的实施例提供的基于RAID控制器的SSD控制器的结构示意图;图7为本发明的实施例提供的降低读延时的装置的结构示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本实施例提供了一种降低读延时的方法,包括当读命令对应的一个或多个flash芯片处于忙状态时,将处于忙状态的一个或多个flash上读取到的数据置为错误的数据;根据所述错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,并将所述正确数据上报。本实施例提供的技术方案主要应用在由主机、SSD控制器以及多个通道的flash组成的SSD设备中,相应的主机通过SSD控制器读写flash中的数据。其中,SSD设备的硬件结构包括一个服务器机框,在服务器机框中设有一块底板,底板上安装有CPU、内存、南桥等芯片,用于对其它扩展卡进行控制,实现主机的功能;SSD控制器(对SSD内部的flash进行控制)也可采用芯片,如FPGA、ASIC等,通过对这个芯片进行编程来完成接收主机的读写请求,并对SSD设备中的flash芯片进行各种访问及控制;SSD控制器对应的芯片可以与各个flash都设置在一个PCB板上,通过PCB走线相连,最后呈现的形式是一个硬盘盒,通过SATA或SAS接口与底板相连,或者也可以将flash芯片和SSD控制器做成一个扩展卡,通过PCIe接口与底板相连。一个结合具体硬件的SSD设备的结构如图I所示。其中的SSD控制器的结构如图2所示,包括主机接口、检错/纠错模块、收发模块几个部分。相应的主机接口用来从主机接收各种命令及其对应的地址、数据,例如读某个地址的数据或将数据写入某个地址等,目前常见的接口是SATA、SAS、PCIe ;收发模块用来完成数据或命令的收发;检错/纠错模块用于保证来自flash数据的正确性,然后将数据上报给主机,主要完成两个功能1、将每个flash通道的数据及其校验码进行检错和纠错,如果超出纠错能力则调用RAID算法恢复数据,2、执行RAID算法,当某个通道的数据有错且无法纠正时,利用其他通道的正确数据恢复该通道数据;收发模块用于接收来自多个通道的flash数据或状态,其中数据再转发给检错/纠错模块而状态一般不会返回主机(如果主机需要的话也会返回给主机,例如SATA接口也可以查询SSD的忙状态),而是由收发模块自己使用,或者将来自主机的命令转换为flash可以识别的命令,或者将来自主机的数据写入多个通道的flash,同时还要满足RAID算法对数据排列方式的要求(即条带方式)。图3所示的是本实施例提供的降低读延时的方法的整体流程框图,下面结合说明书附图对本实施例作详细说明,如图4所示,该方法包括
步骤41,当读命令对应的一个或多个flash芯片处于忙状态时,将处于忙状态的一个或多个flash上读取到的数据置为错误的数据。当主机下发读取flash芯片数据的读命令时,根据读命令中包含的地址信息,确定该地址信息对应的flash芯片,即对应于哪些flash芯片组成的条带。另外,还查询上述地址信息对应的flash芯片的当前状态,即是否处于忙状态。如果某个flash芯片的当前状态为空闲,则将读取的该flash芯片的数据直接上报给SSD设备的检错/纠错模块;如果其中某个flash芯片处于忙状态,则将来自该flash芯片的数据进行置错处理,使转发给检错/纠错模块的数据不符合flash芯片内部的校验规则。例如,假设校验规则为偶校验,那么收发模块构造一个不满足偶校验要求的数据,并且让检错/纠错模块能够发现这个错误,从而触发该模块执行RAID算法来纠正这个通道flash芯片的错误数据。其中,各通道flash芯片的忙/闲状态可以通过软件方式、硬件方式或者软硬件结合的方式来实现,具体为①、软件方式NAND flash的内部提供了一个状态寄存器,通过芯片状态读取命令(read status)可以得到该寄存器的值,根据指定位的O、I状态就能知道flash芯片的忙/闲状态。当主机下发读数据的命令时,需要将该命令对应的所有flash芯片状态都读取一遍。②、硬件方式NAND flash芯片还提供了一个R/B#信号,可以将它们都接入SSD控制器,通过查询对应信号的电平状态就能知道flash芯片的忙/闲状态。③、软硬件结合方式R/B#信号是漏级开路输出,可以支持线与的连接方式,可以将同一个通道所有flash芯片的该信号连接起来,然后接入控制器,这样信号线总数会减少很多。SSD控制器通过检测这个线与信号的电平可以知道是否某个通道有flash芯片处于忙状态,然后再通过read status命令来区分该通道下是哪一个flash芯片处于忙状态。如果要读取数据所在的flash芯片处于空闲状态,可以直接读取数据;如果所在的flash芯片处于忙状态,则读取到的数据置为错误的数据。并且,flash芯片的状态查询命令(read status)的发起不受芯片忙/闲状态影响,如果这个状态查询命令是主机下发的,则当收发模块取得对应通道上的flash芯片状态之后,不经过检错/纠错模块的处理而是直接上报给主机,因为状态信息没有经过RAID
算法处理。
另外,flash芯片内部的校验规则还可以采用具有检错和纠错能力的汉明码,而且产生的错误数据可以有很多选择,可以在设计控制器的时候事先确定下来。这是因为flash芯片处于忙状态时不能响应读数据的命令,该命令会被忽略,这样SSD控制器读到的数据是不确定的,可能通过检错/纠错模块的校验,也可能通不过,如果前一种情况发生就会把无效数据当成正确数据上报了,所以为了确保可靠性必须人为构造错误数据。步骤42,根据所述错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,并将所述正确数据上报。具体的,SSD设备的检错/纠错模块会将每个通道的数据分别做校验,如果检测到有错误的数据,则通过RAID算法纠正,否则直接上报给主机。当检错/纠错模块检测到从处于忙状态的flash读取的数据存在错误时,会通过相应的RAID算法纠正,然后结合从其它通道得到的重建数据一起上报给主机,以完成相应的读操作。检错/纠错模块在发现某个通道的数据出错并将其纠正之后,一般会做错误统计,当超出某个门限时会上报给主机,要求更换整个SSD (对于flash芯片无法单独更换的场合,例如焊接在底板上)或者更换某个通道上的flash芯片(对于flash芯片可以单独更换的场合,例如每个通道上的flash芯片组成一个可更换的模块)。由于本实施例是将处于忙状态的flash芯片的通道数据当作错误数据处理的,而该通道的flash芯片并未发生故障,因此需要区分这种情况避免误判。可以在收发模块中定义一个标识位,缺省为0,每次当该模块有意构造错误数据上报给检错/纠错模块时,标识位设置为1,否则为0,于是检错/纠错模块可以根据这个标识位来决定是否给错误计数器增值。在重建数据的过程中,由于各通道flash芯片的擦除、写命令都是由收发模块发出来的,而RAID算法的数据重建能力有限,例如RAID5只能纠正一个通道上的错误,因此必须根据具体的RAID算法来限制任意时刻每个条带上处于忙状态的flash芯片的数量,这是由收发模块完成的。它可以通过控制每次向各通道上flash芯片发出的擦除、写命令数量,并实时查询各通道上flash芯片的忙/闲状态,来保证每个条带上处于忙状态的flash芯片数量不会超出RAID算法重建数据的能力。由于步骤42中纠正的是人为制造的错误数据,目的都是为了重建数据,可以将来源不同的问题统一处理,相应的问题可以是flash芯片的数据错误,也可以是flash芯片处于忙状态,有利于模块的重用。本实施例还提供了一种通过RAID控制器降低读延时的方法,为了进一步提高容错能力同时提高性能,SSD控制器通常支持多个通道,每个通道上连接多个flash芯片,而且按照RAID模式工作。另外,多个flash芯片按照RAID算法将数据和校验码按条带方式保存,当某个flash芯片不可用时可以通过条带上其他flash芯片读取的数据恢复出来,从而提高了可靠性。RAID有多种类别,SSD中常用的是RAID4和RAID5,其中RAID4是将校验码固定保存在某个通道的所有flash芯片上,而RAID5是将校验码逐一保存在多个通道的所有flash芯片上。与上述SSD控制器的情形类似,RAID控制器也是一种常用的提高存储系统性能和可靠性的器件,它与主机一般通过PCI或PCIe接口相连,然后通过多个通道(例如8个)与硬盘相连(可以是机械硬盘或SSD),每个通道采用SAS或FC接口并且只能连接一个硬盘,如图5所示。一个具体的应用场景示例如图6所示,机架服务器当中其中一个扩展卡为RAID卡,RAID卡中有RAID控制器,与多个SSD硬盘盒(包括SSD控制器及多个Flash)中的SSD控制器相连;多个扩展卡仍然通过PCIe接口与底板相连。RAID控制器按照RAID算法将数据以条带方式保存在多个SSD上,当主机通过PCI/PCIe接口向RAID控制器下发读数据请求时,如果某个SSD正在执行NAND flash的擦除及写操作并且不具备相应的数据重建功能,那么在RAID控制器和SSD之间必须按照上述实施例中SSD控制器和NAND flash芯片那种方式来重建数据,即RAID控制器通过命令查询各通道SSD的忙/闲状态,对处于忙状态的SSD,RAID控制器内部的数据收发模块将该通道的数据置为错误,结合其它通道得到的有效数据一起上报给RAI D控制器内部的检错/纠错模块,RAID控制器内部的检错/纠错模块先对各通道的数据进行检测,发现上述忙状态的通道数据有误,则按照RAID算法通过其他通道的数据重建该错误数据,然后通过PCI/PCIe接口统一上报给主机。
采用本实施例提供的技术方案,通过从flash芯片上读取到的数据置为错误的数据,并根据错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,使flash芯片处于忙状态时能够避免读操作被擦除和写操作阻塞,从而有效减少延时,提高了存储系统的性能。需要说明的是,本领域普通技术人员可以理解实现上述各方法实施例中的全部或部分步骤是可以通过程序来指令相关的硬件完成,相应的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。本发明的实施例还提供了一种降低读延时的装置,如图7所示,包括置错单元71,用于当读命令对应的一个或多个flash芯片处于忙状态时,将处于忙状态的一个或多个flash上读取到的数据置为错误的数据;重建上报单元72,用于根据所述错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,并将所述正确数据上报。本实施例可以对SSD控制器(如FPGA或类似的硬件芯片)或RAID控制器进行相应的编程,制得能够完成相应的功能的单元模块。其中,降低读延时的装置的各单元模块可设置在如图2所示的SSD控制器中,也可以设置在如图5所示的RAID控制器中。可选的,在置错单元71中可以包括判断子单元,用于通过检测每个flash芯片的忙/闲信号电平、通过下发读状态命令、或者同时检测每个flash芯片的忙/闲信号电平及下发读状态命令确定flash芯片是否处于忙状态。可选的,在置错单元71中,读取flash芯片数据的读命令通过SATA、SAS或PCIe接口接收。可选的,在置错单元71中还可以包括读取子单元,用于根据读命令报文携带的地址字段与SSD内部的flash芯片地址的对应关系确定所述读命令与flash芯片的对应关系。可选的,在置错单元71中,置为错误的数据包括将读取的数据置为任何不符合flash数据校验规则的数据组合。可选的,在重建上报单元72中可以包括重建子单元,用于SSD控制器接收到发送来的错误的数据并检测到数据错误后,启动纠错功能,利用多组flash存储单元之间存在的数据约束关系,获得重建后的正确数据。可选的,该装置还可以包括错误计数单元,用于当检测到读数据错误并且标识位是0时,错误计数器加I ;当检测到读数据错误并且标识位是I时,错误计数器不变。采用本实施例的方案,通过从flash芯片上读取到的数据置为错误的数据,并根据错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,使flash芯片处于忙状态时能够避免读操作被擦除和写操作阻塞,从而有效减少延时,提高了存储系统的性能。上述降低读延时的装置中包含的各单元的处理功能的具体实施方式
在之前的方法实施方式中已经描述,在此不再重复描述。本发明方案可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序单元。一般地,程序单元包括执行特定任务或实现特定抽象数据类型的例程、程序、对 象、组件、数据结构等等。也可以在分布式计算环境中实践本发明方案,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序单元可以位于包括存储设备在内的本地和远程计算机存储介质中。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,通用硬件包括通用集成电路、通用CPU、通用存储器、通用元器件等,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换, 都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种降低读延时的方法,其特征在于,包括 当读命令对应的一个或多个flash芯片处于忙状态时,将处于忙状态的一个或多个flash上读取到的数据置为错误的数据; 根据所述错误的数据以及从其它fla sh芯片上读取的数据获得重建后的正确数据,并将所述正确数据上报。
2.根据权利要求I所述的方法,其特征在于,所述判断flash芯片处于忙状态包括 通过检测每个flash芯片的忙/闲信号电平、通过下发读状态命令、或者同时检测每个flash芯片的忙/闲信号电平及下发读状态命令确定flash芯片是否处于忙状态。
3.根据权利要求2所述的方法,其特征在于,所述读取flash芯片数据的读命令通过SATA, SAS 或 PCIe 接口接收。
4.根据权利要求2或3所述的方法,其特征在于,该方法还包括根据读命令报文携带的地址字段与SSD内部的flash芯片地址的对应关系确定所述读命令与flash芯片的对应关系。
5.根据权利要求I所述的方法,其特征在于,所述置为错误的数据包括将读取的数据置为任何不符合flash数据校验规则的数据组合。
6.根据权利要求I所述的方法,其特征在于,所述获得重建后的正确数据包括 SSD控制器接收到发送来的错误的数据并检测到数据错误后,启动纠错功能,利用多组flash存储单元之间存在的数据约束关系,获得重建后的正确数据。
7.根据权利要求I所述的控制方法,其特征在于,该方法还包括 当检测到读数据错误并且标识位是O时,错误计数器加I ;当检测到读数据错误并且标识位是I时,错误计数器不变。
8.一种降低读延时的装置,其特征在于,包括 置错单元,用于当读命令对应的一个或多个flash芯片处于忙状态时,将处于忙状态的一个或多个flash上读取到的数据置为错误的数据; 重建上报单元,用于根据所述错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,并将所述正确数据上报。
9.根据权利要求8所述的装置,其特征在于,在置错单元中包括 判断子单元,用于通过检测每个flash芯片的忙/闲信号电平、通过下发读状态命令、或者同时检测每个flash芯片的忙/闲信号电平及下发读状态命令确定flash芯片是否处于忙状态。
10.根据权利要求9所述的装置,其特征在于,在置错单元中,所述读取flash芯片数据的读命令通过SATA、SAS或PCIe接口接收。
11.根据权利要求9或10所述的装置,其特征在于,在置错单元中还包括 读取子单元,用于根据读命令报文携带的地址字段与SSD内部的flash芯片地址的对应关系确定所述读命令与flash芯片的对应关系。
12.根据权利要求8所述的装置,其特征在于,在置错单元中,所述置为错误的数据包括将读取的数据置为任何不符合flash数据校验规则的数据组合。
13.根据权利要求8所述的装置,其特征在于,在重建上报单元中包括 重建子单元,用于SSD控制器接收到发送来的错误的数据并检测到数据错误后,启动纠错功能,利用多组flash存储单元之间存在的数据约束关系,获得重建后的正确数据。
14.根据权利要求8所述的装置,其特征在于,该装置还包括 错误计数单元,用于当检测到读数据错误并且标识位是O时,错误计数器加I ;当检测到读数据错误并且标识位是I时,错误计数器不变。
全文摘要
一种降低读延时的方法及装置,相应的方法包括当读命令对应的一个或多个flash芯片处于忙状态时,将处于忙状态的一个或多个flash上读取到的数据置为错误的数据;根据所述错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,并将所述正确数据上报。本发明通过从flash芯片上读取到的数据置为错误的数据,并根据错误的数据以及从其它flash芯片上读取的数据获得重建后的正确数据,使flash芯片处于忙状态时能够避免读操作被擦除和写操作阻塞,从而有效减少延时,提高了存储系统的性能。
文档编号G06F3/06GK102662608SQ20121009590
公开日2012年9月12日 申请日期2012年3月30日 优先权日2012年3月30日
发明者李延松 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1