本發(fā)明涉及計算機技術領域,尤其涉及一種交互方法及、NVMe(Non Volatile Memory express,非易失存儲快速通道)設備、HOST(主機)及物理機系統(tǒng)。
背景技術:
通常,運行在物理機CPU(Central Processing Unit,處理器)之上的軟件可以分為系統(tǒng)軟件和用戶的業(yè)務軟件。如圖1所示,是現(xiàn)有的SDI(Service Driven lnfrastructure,業(yè)務驅動基礎架構)架構,即將原來部署在處理器之上的系統(tǒng)軟件卸載到獨立的SDI卡上,CPU上僅運行用戶的業(yè)務軟件。這樣,就將系統(tǒng)分為了HOST側、NVMe設備側兩部分,二者之間通過PCIe(Peripheral Component Interconnect express,快速外部組件互聯(lián))總線進行通信。
SDI卡對CPU(HOST側)呈現(xiàn)為NVMe設備,通過PCIe總線以及標準NVMe協(xié)議進行通信。NVMe設備(如:SDI卡)與HOST側進行通信交互的過程中,HOST側的CPU需要先后兩次對NVMe設備的寄存器進行寫操作(即進行門鈴操作),改寫NVMe設備的寄存器中某個字段,使得NVMe獲知將與HOST進行交互,以保證交互正常進行。
通常,SDI卡是個插在服務器標準PCIe槽位上的獨立硬件卡,卡上有承載系統(tǒng)軟件和固件,這些軟件和固件在使用過程中是需要進行升級。在一般情況下,軟件及固件的升級都需要將SDI卡系統(tǒng)復位才能生效。SDI卡系統(tǒng)復位,對HOST側而言等同于NVMe設備突然被拔掉。如果在HOST側的CPU操作SDI卡的寄存器的時候,SDI卡系統(tǒng)復位,導致CPU的讀/寫請求得不到響應,CPU就會誤認為設備異常,報出MCE(Machine Check Exception,機器校驗錯誤)讓整個系統(tǒng)掛死。
技術實現(xiàn)要素:
本發(fā)明實施例提供一種交互方法、NVMe設備、HOST及物理機系統(tǒng),保證HOST側與NVMe設備正常交互的前提下,能夠有效避免由于SDI卡(NVMe設備)系統(tǒng)復位導致的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插 拔。
本發(fā)明的實施例采用如下技術方案:
第一方面,公開了一種交互方法,包括:
主機HOST將任務指令寫入所述HOST內存中的第一隊列中,所述任務指令指示非易失存儲快速通道NVMe設備將執(zhí)行的操作;所述NVMe設備為與所述HOST通過快速外部組件互聯(lián)PCIe總線進行交互的外圍設備;
所述HOST將觸發(fā)標識寫入所述HOST內存中的第二隊列;所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互,所述交互為所述NVMe設備執(zhí)行所述操作需要與所述HOST進行的交互;
所述HOST確認所述操作已完成,則將完成標識寫入所述第一隊列,所述完成標識代表所述HOST已確認所述交互已完成。
結合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述HOST確認所述操作已完成包括:
所述HOST接收所述NVMe設備發(fā)送的預設中斷,訪問所述HOST內存中的第三隊列,檢測到操作完成標識,則確認所述操作已完成;
其中,所述預設中斷用于指示所述HOST訪問所述第三隊列,所述操作完成標識指示所述操作已完成。
第二方面,公開了一種交互方法,包括:
非易失存儲快速通道NVMe設備輪詢第一隊列;所述第一隊列存儲在主機HOST的內存中;
所述NVMe設備在所述第一隊列中檢測到觸發(fā)標識,所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互;所述交互為所述NVMe設備執(zhí)行操作需要與所述HOST進行的交互;
所述NVMe設備獲取任務指令;所述任務指令指示所述NVMe設備將執(zhí)行的所述操作;
所述NVMe設備執(zhí)行所述操作;
所述NVMe設備在所述第一隊列中檢測到完成標識;所述完成標識指示所述HOST已確認所述交互已完成,所述完成標識是所述HOST 確認所述操作完成之后寫入所述第一隊列的。
結合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述NVMe設備獲取任務指令包括:
所述NVMe設備訪問所述HOST內存中的第二隊列,在所述第二隊列中獲取所述任務指令。
結合第二方面或第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,若所述操作為寫數(shù)據(jù),則所述NVMe設備執(zhí)行所述操作具體包括:
所述NVMe設備在所述HOST的寄存器中獲取待寫數(shù)據(jù),并將所述待寫數(shù)據(jù)存儲在所述NVMe設備的本地內存中;
所述NVMe設備將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成;
所述NVMe設備向所述HOST發(fā)送第預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
結合第二方面或第二方面的第一種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,若所述操作為讀數(shù)據(jù),則所述NVMe設備執(zhí)行所述操作具體包括:
所述NVMe設備接收所述HOST的讀數(shù)據(jù)請求,并將所述待讀數(shù)據(jù)發(fā)送給所述HOST;
所述NVMe設備接收所述HOST發(fā)送的第一中斷,將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成,所述第一中斷用于指示所述NVMe設備將所述操作完成標識寫入所述HOST內存中的第三隊列;
所述NVMe設備向所述HOST發(fā)送預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
結合第二方面,在第二方面的第四種可能的實現(xiàn)方式中,所述NVMe設備輪詢第一隊列包括:
所述NVMe設備主動輪詢所述第一隊列;
或,所述NVMe設備接收所述HOST發(fā)送的指示信息后輪詢所述 第一隊列。
第三方面,公開了一種主機HOST,包括:
寫入單元,用于將任務指令寫入所述HOST內存中的第一隊列中,所述任務指令指示非易失存儲快速通道NVMe設備將執(zhí)行的操作;所述NVMe設備為與所述HOST通過快速外部組件互聯(lián)PCIe總線進行交互的外圍設備;
所述寫入單元還用于,將觸發(fā)標識寫入所述HOST內存中的第二隊列;所述觸發(fā)標識代表所述HOST已確認將與非易失存儲快速通道NVMe設備進行交互,所述交互為所述NVMe設備執(zhí)行所述操作需要與所述HOST進行的交互;
確認單元,用于確認所述操作已完成;
所述寫入單元還用于,在所述確認單元確認所述操作已完成時,將完成標識寫入所述第一隊列,所述完成標識代表所述HOST已確認所述交互已完成。
結合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,所述確認單元具體用于,
所述HOST接收所述NVMe設備發(fā)送的預設中斷,訪問所述HOST內存中的第三隊列,檢測到操作完成標識,則確認所述操作已完成;
其中,所述預設中斷用于指示所述HOST訪問所述第三隊列,所述操作完成標識指示所述操作已完成。
第四方面,公開了一種非易失存儲快速通道NVMe設備,包括:
檢測單元,用于輪詢第一隊列;所述第一隊列存儲在主機HOST的內存中;
所述檢測單元還用于,在所述第一隊列中檢測到觸發(fā)標識,所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互;所述交互為所述NVMe設備執(zhí)行操作需要與所述HOST進行的交互;
獲取單元,用于獲取任務指令;所述任務指令指示所述HOST將執(zhí)行的所述操作;
執(zhí)行單元,用于執(zhí)行所述操作;
所述檢測單元還用于,在所述第一隊列中檢測到完成標識;所述完成標識指示所述HOST已確認與所述交互已完成,所述完成標識是所述HOST確認所述操作完成之后寫入所述第一隊列的。
結合第四方面,在第四方面的第一種可能的實現(xiàn)方式中,所述獲取單元具體用于:訪問所述HOST內存中的第二隊列,在所述第二隊列中獲取所述任務指令。
結合第四方面或第四方面的第一種可能的實現(xiàn)方式,在第四方面的第二種可能的實現(xiàn)方式中,若操作為寫數(shù)據(jù),則所述執(zhí)行單元具體用于:
在所述HOST的寄存器中獲取待寫數(shù)據(jù),并將所述待寫數(shù)據(jù)存儲在所述NVMe設備的本地內存中;
將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成;
向所述HOST發(fā)送第預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
結合第四方面或第四方面的第一種可能的實現(xiàn)方式,在第四方面的第三種可能的實現(xiàn)方式中,若操作為讀數(shù)據(jù),則所述執(zhí)行單元具體用于:
接收所述HOST的讀數(shù)據(jù)請求,并將所述待讀數(shù)據(jù)發(fā)送給所述HOST;
接收所述HOST發(fā)送的第一中斷,將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成,所述第一中斷用于指示所述NVMe設備將所述操作完成標識寫入所述HOST內存中的第三隊列;
向所述HOST發(fā)送預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
結合第四方面,在第四方面的第四種可能的實現(xiàn)方式中,所述檢測單元具體用于,設備主動輪詢所述第一隊列;
或,接收所述HOST發(fā)送的指示信息后輪詢所述第一隊列。
第五方面,公開了一種物理機系統(tǒng),包括主機HOST和非易失存儲快速通道NVMe設備,
所述HOST將任務指令寫入所述HOST內存中的第一隊列中,所述任務指令指示非易失存儲快速通道NVMe設備將執(zhí)行的操作;所述NVMe設備為與所述HOST通過快速外部組件互聯(lián)PCIe總線進行交互的外圍設備;
所述HOST將觸發(fā)標識寫入所述HOST內存中的第二隊列;所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互,所述交互為所述NVMe設備執(zhí)行所述操作需要與所述HOST進行的交互;
所述NVMe設備輪詢所述第二隊列;
所述NVMe設備在所述第二隊列中檢測到觸發(fā)標識;
所述NVMe設備在所述第一隊列中獲取任務指令;
所述NVMe設備執(zhí)行所述操作;
所述HOST獲取所述操作完成標識,確認所述操作已完成,則將完成標識寫入所述第二隊列;所述操作完成標識指示所述操作已完成;所述完成標識代表所述HOST已確認所述交互已完成;
所述NVMe設備在所述第二隊列中檢測到完成標識。
本發(fā)明實施例提供的交互方法、NVMe設備、HOST及物理機系統(tǒng),所述NVMe設備在主機HOST的內存中的第一隊列中輪詢到觸發(fā)指令;所述觸發(fā)指令指示所述HOST已確認將與所述NVMe設備進行交互。所述NVMe設備獲取任務指令,執(zhí)行所述任務指令指示的操作。NVMe設備在所述HOST的內存中的第一隊列中檢測到完成指令;所述完成指令指示所述HOST已確認與所述NVMe設備完成了交互。這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有的SDI架構的示意圖;
圖2是本發(fā)明實施例1提供的交互方法的流程示意圖;
圖3是本發(fā)明實施例2提供的交互方法的流程示意圖;
圖4是本發(fā)明實施例3提供的交互方法的流程示意圖;
圖5是本發(fā)明實施例4提供的寫數(shù)據(jù)的流程示意圖;
圖6是本發(fā)明實施例5提供的讀數(shù)據(jù)的流程示意圖;
圖7是本發(fā)明實施例6提供的HOST的結構框圖;
圖8是本發(fā)明實施例7提供的NVMe設備的結構框圖;
圖9是本發(fā)明實施例8提供的HOST的結構框圖;
圖10是本發(fā)明實施例9提供的NVMe設備的結構框圖;
圖11是本發(fā)明實施例10提供的物理機系統(tǒng)的架構圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
所謂SDI架構,即將原來部署在處理器之上的系統(tǒng)軟件卸載到獨立的SDI卡上,CPU上僅運行用戶的業(yè)務軟件。這樣,就將系統(tǒng)分為了兩部分。如圖1所示,A部分稱為HOST(主機)側、B部分稱為NVMe設備側。通常,需要將SDI卡系統(tǒng)復位才能使得卡上有承載系統(tǒng)軟件和固件正常升級。在SDI卡做系統(tǒng)復位動作時,對CPU而言等同于NVMe設備突然被拔掉。
現(xiàn)有標準中,NVMe設備與HOST側交互流程具體包括:
(1)CPU(HOST側的CPU)寫入命令到SQ(Submission Queue,提交隊列),即將本次交互執(zhí)行的命令寫入SQ中;
(2)CPU寫NVMe設備的Doorbell(門鈴)寄存器,這是CPU對NVMe設備寄存器的直接操作,HOST側告知NVMe設備將要進行二者間的交互;
(3)NVMe設備從SQ隊列中讀取在步驟(1)寫入的命令;
(4)NVMe設備執(zhí)行該命令;
(5)NVMe設備將完成數(shù)據(jù)寫入CQ(Completion Queue,完成隊列)指示已完成步驟(1)寫入的命令,并釋放SQ;
(6)NVMe Contreller發(fā)送MSI-X中斷到CPU,指示CPU執(zhí)行CQ;
(7)CPU接收到中斷后執(zhí)行CQ;
(8)CPU寫NVMe設備的Doorbell寄存器,這是HOST對NVMe設備寄存器的直接操作。隨后NVMe設備釋放CQ隊列。一次完整的NVMe協(xié)議交互完成。
上述流程中,第(2)個步驟和第(8)步是HOST對NVMe設備寄存器的直接操作,其余步驟都是HOST側對本方內存的讀寫、設備側的行為。在步驟(2)、(8)中,如果NVMe設備突然被拔出(如:SDI卡進行復位),這時HOST側CPU發(fā)起的讀/寫請求得不到響應,HOST就會認為設備異常,報出MCE錯誤讓整個系統(tǒng)掛死。
所謂熱插拔(hot-plugging或Hot Swap),即帶電插拔,就是用戶在不關閉系統(tǒng),不切斷電源的情況下取出和更換損壞的硬盤、電源或板卡等部件,同時不影響系統(tǒng)的正常運行。本發(fā)明旨在提供一種NVMe設備的熱插拔實現(xiàn)方法,使得在NVMe設備拔出(如:SDI卡做系統(tǒng)復位)時,不影響系統(tǒng)的正常運行。
另外,對本發(fā)明涉及的隊列做以解釋說明。隊列是常用數(shù)據(jù)結構之一,是一種特殊的線性表,它只允許在表的前端(frent)進行刪除操作,而在表的后端(rear)進行插入操作。其中,進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
實施例1:
本發(fā)明實施例提供一種交互方法,如圖2所示,所述方法包括以下步 驟:
101、HOST將任務指令寫入所述HOST內存中的第一隊列中,所述任務指令指示NVMe設備將執(zhí)行的操作;所述NVMe設備為與所述HOST通過快速外部組件互聯(lián)PCIe總線進行交互的外圍設備。
其中,所述操作,可以是所述NVMe設備在所述HOST的內存中讀取數(shù)據(jù),或者,是所述NVMe設備接收HOST讀數(shù)據(jù)的請求,將響應數(shù)據(jù)發(fā)送給HOST。隊列是一種數(shù)據(jù)結構,用于存儲數(shù)據(jù)。
102、所述HOST將觸發(fā)標識寫入所述HOST內存中的第二隊列;所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互,所述交互為所述NVMe設備執(zhí)行所述操作需要與所述HOST進行的交互。
其中,所謂交互即參與活動的對象可以相互交流,雙方面互動。在本發(fā)明實施例中特指:HOST指示NVMe設備要執(zhí)行某操作時,在NVMe設備執(zhí)行操作之前、完成操作之后,NVMe設備與HOST間要進行的交流,以確保NVMe設備與HOST知曉進行的每一步流程。示例的,當HOST指示NVMe設備寫數(shù)據(jù),還需要寫入觸發(fā)標識,使得NVMe設備檢測到觸發(fā)標識后知曉HOST已經確認所述NVMe設備將從HOST的內存中寫數(shù)據(jù)。又如:當NVMe設備執(zhí)行寫數(shù)據(jù)操作時,不單單是在HOST的內存中獲取數(shù)據(jù),還需要在完成寫數(shù)據(jù)后寫操作完成標識到HOST的內存,使得HOST知曉NVMe設備已完成寫數(shù)據(jù)。
另外,所述觸發(fā)指令可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認將與所述NVMe設備進行交互。示例的,地址位為“0”代表所述HOST未確認將與所述NVMe設備進行交互,地址位為“1”代表所述HOST已確認將與所述NVMe設備進行交互。
103、所述HOST確認所述操作已完成,則將完成標識寫入所述第一隊列,所述完成標識代表所述HOST已確認所述交互已完成。
需要說明的是,與所述觸發(fā)標識一樣,所述完成標識也可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認所述交互已完成。
具體實現(xiàn)中,所述HOST確認所述操作已完成包括:
所述HOST接收所述NVMe設備發(fā)送的預設中斷,訪問所述HOST內存中的第三隊列,檢測到操作完成標識,則確認所述操作已完成;
其中,所述預設中斷用于指示所述HOST訪問所述第三隊列,所述操作完成標識指示所述操作已完成。
需要說明的是,所述預設中斷可以是MSI(Message Signaled Interrupt,消息信息中斷)-X。另外,在本實施例中,所述第一隊列可以是SQ(Submit Queue,提交隊列),所述第二隊列可以是DQ(Doorbell Queue,門鈴隊列),所述第三隊列可以是CQ(Complete Queue,完成隊列)。
在現(xiàn)有NVMe設備與HOST交互過程中,HOST對NVMe設備的Doorbell操作是由指HOST直接寫NVMe設備的寄存器,修改某個字段以告知NVMe設備需要與HOST進行交互,在此過程中,如果NVMe設備系統(tǒng)復位,就會導致HOST的寫請求得不到響應,系統(tǒng)報出MCE,進而系統(tǒng)被掛起。本發(fā)明中,將Doorbell操作修改為由NVMe設備驅動去HOST的寄存器內存輪循第一隊列,以確定是否將與HOST進行交互。這樣既保證了NVMe設備與HOST之間交互的正常進行,又避免了由于NVMe設備系統(tǒng)復位導致的系統(tǒng)掛死。
本發(fā)明實施例提供的交互方法,所述NVMe設備在主機HOST的內存中的第一隊列中輪詢到觸發(fā)指令;所述觸發(fā)指令指示所述HOST已確認將與所述NVMe設備進行交互。所述NVMe設備獲取任務指令,執(zhí)行所述任務指令指示的操作。NVMe設備在所述HOST的內存中的第一隊列中檢測到完成指令;所述完成指令指示所述HOST已確認與所述NVMe設備完成了交互。這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
實施例2:
本發(fā)明實施例提供一種交互方法,如圖3所示,所述方法包括以下步驟:
201、NVMe設備輪詢第一隊列;所述第一隊列存儲在主機HOST的內存中。
所謂輪詢,是指NVMe設備去監(jiān)控或者不斷的去讀取HOST內存中的第一隊列,直到讀取到所述觸發(fā)指令(如:特定地址位的數(shù)值有變化:變?yōu)椤?”),則認為NVMe設備將與所述HOST進行交互。
202、所述NVMe設備在所述第一隊列中檢測到觸發(fā)標識,所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互;所述交互為所述NVMe設備執(zhí)行操作需要與所述HOST進行的交互。
其中,所述觸發(fā)指令可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認將與所述NVMe設備進行交互。示例的,地址位為“0”代表所述HOST未確認將與所述NVMe設備進行交互,地址位為“1”代表所述HOST已確認將與所述NVMe設備進行交互。
另外,所述操作,可以是所述NVMe設備在所述HOST的內存中讀取數(shù)據(jù),或者,是所述NVMe設備接收HOST讀數(shù)據(jù)的請求,將響應數(shù)據(jù)發(fā)送給HOST。隊列是一種數(shù)據(jù)結構,用于存儲數(shù)據(jù)。
所謂交互,是指HOST指示NVMe設備要執(zhí)行某操作時,在NVMe設備執(zhí)行操作之前、完成操作之后,NVMe設備與HOST間要進行的交互,以確保NVMe設備與HOST知曉進行的某一步流程。如:HOST在步驟101中寫入任務指令,將指示NVMe設備寫數(shù)據(jù),之后在寫入觸發(fā)標識,使得NVMe設備檢測到觸發(fā)標識后知曉HOST已經確認所述NVMe設備將從HOST的內存中寫數(shù)據(jù)。
203、所述NVMe設備獲取任務指令;所述任務指令指示所述NVMe設備將執(zhí)行的所述操作。
具體地,所述NVMe設備訪問所述HOST內存中的第二隊列,在所述第二隊列中獲取所述任務指令。
204、所述NVMe設備執(zhí)行所述操作。
具體可以是,所述NVMe設備在所述HOST的內存中讀取數(shù)據(jù),或者,是所述NVMe設備接收HOST讀數(shù)據(jù)的請求,將響應數(shù)據(jù)發(fā)送給HOST。
205、所述NVMe設備在所述第一隊列中檢測到完成標識;所述完成標識指示所述HOST已確認所述交互已完成,所述完成標識是所述HOST確認所述操作完成之后寫入所述第一隊列的。
與所述觸發(fā)標識一樣,所述完成標識也可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認所述交互已完成。
在現(xiàn)有NVMe設備與HOST交互過程中,HOST對NVMe設備的Doorbell操作是由指HOST直接寫NVMe設備的寄存器,修改某個字段以告知NVMe設備需要與HOST進行交互,在此過程中,如果NVMe設備系統(tǒng)復位,就會導致HOST的寫請求得不到響應,系統(tǒng)報出MCE,進而系統(tǒng)被掛起。本發(fā)明中,將Doorbell操作修改為由NVMe設備驅動去HOST的寄存器內存輪循第一隊列,以確定HOST是否已確認將進行交互。這樣,HOST不用去對NVMe設備的寄存器進行寫操作,就可以避免了由于NVMe設備突然拔出(即SDI卡系統(tǒng)復位)導致的系統(tǒng)掛死。另外,告知NVMe設備將與HOST進行交互,交互完成之前不能進行NVMe設備拔出(即SDI卡系統(tǒng)復位)。
所述NVMe設備執(zhí)行所述操作,具體可以包括以下兩種情況:
第一、若所述操作為寫數(shù)據(jù),則所述NVMe設備執(zhí)行所述操作具體包括:
所述NVMe設備在所述HOST的寄存器中獲取待寫數(shù)據(jù),并將所述待寫數(shù)據(jù)存儲在所述NVMe設備的本地內存中;所述NVMe設備將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成;所述NVMe設備向所述HOST發(fā)送第預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
具體地,(1)NVMe Controller從SQ中讀取NVMe命令。
其中,所述NVMe Controller是NVMe設備側的控制模塊,所述SQ即所述第二隊列,所述NVMe命令即所述任務指令。這里,所述NVMe命令指示的操作為將待寫數(shù)據(jù)寫入到所述NVMe設備。
(2)NVMe Controller操作NVMe設備側的DMA()引擎在HOST的內存中獲取數(shù)據(jù)。
(3)NVMe Controller封裝所述待寫數(shù)據(jù)后發(fā)送至NVMe設備側的分布式存儲軟件。
其中,所述分布式存儲軟件是所述NVMe設備側的用于存儲數(shù)據(jù)的。所謂封裝待寫數(shù)據(jù)即將待寫數(shù)據(jù)封裝成分布式存儲軟件可以識別的格式。
(4)分布式存儲軟件向NVMe Controller返回Response。
實際上,就是分布式存儲軟件在存儲完NVMe Controller發(fā)送的數(shù)據(jù)之后,向NVMe Controller返回一個信息,用于告知NVMe Controller本次交互要寫入NVMe設備的待寫數(shù)據(jù)已經傳完。
(5)NVMe Controller將操作完成標識寫入第三隊列。
其中,所述第三隊列可以是CQ,所述操作完成標識指示操作已完成(即已將待寫數(shù)據(jù)寫入NVMe設備)。
(6)NVMe Controller向HOST發(fā)送MSI-X,指示所述HOST訪問所述第三隊列,在第三隊列中獲取操作完成標識后確認所述操作已完成。
第二、若所述操作為讀數(shù)據(jù),則所述NVMe設備執(zhí)行所述操作具體包括:所述NVMe設備接收所述HOST的讀數(shù)據(jù)請求,并將所述待讀數(shù)據(jù)發(fā)送給所述HOST;所述NVMe設備接收所述HOST發(fā)送的第一中斷,將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成,所述第一中斷用于指示所述NVMe設備將所述操作完成標識寫入所述HOST內存中的第三隊列;所述NVMe設備向所述HOST發(fā)送預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
其中,所述第一中斷可以是DMA((Direct Memory Access,直接內存存取))中斷。
具體地,(1)NVMe Controller從SQ隊列中讀取NVMe命令。
其中,所述NVMe Controller是NVMe設備側的控制模塊,所述SQ即所述第二隊列,所述NVMe命令即所述任務指令。這里,所述NVMe命令指示的操作為所述NVMe設備從HOST側的內存中讀數(shù)據(jù)。
(2)NVMe Controller封裝待讀數(shù)據(jù)后發(fā)送至分布式存儲軟件。
所謂封裝待讀數(shù)據(jù)即將待讀數(shù)據(jù)封裝成分布式存儲軟件可以識別的格式。
(3)分布式存儲軟件返回Response。
在此Response用于告知NVMe Controller所述待讀數(shù)據(jù)已完成接收。
(4)NVMe Controller設備側的DMA引擎在分布式存儲軟件中讀取待讀數(shù)據(jù),并將待讀數(shù)據(jù)發(fā)送至HOST。
(5)HOST完成待讀數(shù)據(jù)接收后向NVMe側返回DMA中斷。
其中,所述DMA中斷用于告知NVMe Controlle已完成數(shù)據(jù)接收。
(6)NVMe Controller接收DMA中斷后將操作完成標識寫入第三隊列。
其中,所述第三隊列可以是CQ,所述操作完成標識指示操作已完成(即已將待寫數(shù)據(jù)寫入NVMe設備)。
(7)NVMe Controller向HOST發(fā)送MSI-X,指示所述HOST訪問所述第三隊列,在第三隊列中獲取操作完成標識后確認所述操作已完成。
這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器。將HOST對NVMe設備的兩次直接寄存器操作變成NVMe設備側主動去HOST的內存隊列輪循,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。Doorbell操作由原來的HOST直接寫NVMe設備寄存器修改為由NVMe設備驅動去輪循Doorbell隊列(即本發(fā)明所述第一隊列),HOST將所述觸發(fā)指令、完成指令寫入內存中的Doorbell隊列,即認為是讀寫請求已經得到響應。這時候即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效 的避免系統(tǒng)掛死的情況。這樣,HOST不用去對NVMe設備的寄存器進行寫操作,二者之間還可以進行正常交互,還可以避免了由于NVMe設備突然拔出導致的系統(tǒng)掛死。另外,告知NVMe設備與HOST之間的交互完成,可以進行NVMe設備拔出,從而實現(xiàn)NVMe設備的熱插拔。
進一步地,在本發(fā)明的優(yōu)選實施例中,所述NVMe設備獲取完成指令之后,所述方法還包括:
所述NVMe設備釋放所述第三隊列。
在本發(fā)明的另一優(yōu)選實施例中,所述NVMe設備在所述HOST的寄存器中輪詢第一隊列包括:
所述NVMe設備主動輪詢所述第一隊列;
或,所述NVMe設備接收所述HOST發(fā)送的指示信息后輪詢所述第一隊列。
另外,需要說明的是,本實施例所述的第一隊列即實施例1所述的第二隊列,可以是門鈴隊列DQ。本實施例所述的所述第二隊列即實施例1所述的第一隊列,可以是提交隊列SQ。所述第三隊列可以是完成隊列CQ。
本發(fā)明實施例提供的交互方法,所述NVMe設備在主機HOST的內存中的第一隊列中輪詢到觸發(fā)指令;所述觸發(fā)指令指示所述HOST已確認將與所述NVMe設備進行交互。所述NVMe設備獲取任務指令,執(zhí)行所述任務指令指示的操作。NVMe設備在所述HOST的內存中的第一隊列中檢測到完成指令;所述完成指令指示所述HOST已確認與所述NVMe設備完成了交互。這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
實施例3:
本發(fā)明實施例提供一種交互方法,如圖4所示,所述方法包括以下步驟:
301、HOST將任務指令寫入所述HOST內存中的第一隊列中。
其中,所述任務指令指示非易失存儲快速通道NVMe設備將執(zhí)行的操作;所述NVMe設備為與所述HOST通過快速外部組件互聯(lián)PCIe總線進行交互的外圍設備。
302、所述HOST將觸發(fā)標識寫入所述HOST內存中的第二隊列。
所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互,所述交互為所述NVMe設備執(zhí)行所述操作需要與所述HOST進行的交互。
303、所述NVMe設備輪詢所述第二隊列。
304、所述NVMe設備在所述第二隊列中檢測到觸發(fā)標識。
305、所述NVMe設備在所述第一隊列中獲取任務指令,執(zhí)行任務指令指示的操作。
具體地,若所述操作為寫數(shù)據(jù),則所述NVMe設備執(zhí)行所述操作具體包括:
所述NVMe設備在所述HOST的寄存器中獲取待寫數(shù)據(jù),并將所述待寫數(shù)據(jù)存儲在所述NVMe設備的本地內存中;所述NVMe設備將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成;所述NVMe設備向所述HOST發(fā)送第預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
若所述操作為讀數(shù)據(jù),則所述NVMe設備執(zhí)行所述操作具體包括:所述NVMe設備接收所述HOST的讀數(shù)據(jù)請求,并將所述待讀數(shù)據(jù)發(fā)送給所述HOST;所述NVMe設備接收所述HOST發(fā)送的第一中斷,將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成,所述第一中斷用于指示所述NVMe設備將所述操作完成標識寫入所述HOST內存中的第三隊列。
其中,所述預設中斷可以是MSI-X,所述第一中斷可以是DMA中斷。
306、所述HOST獲取所述操作完成標識,確認所述操作已完成,則將完成標識寫入所述第二隊列。
所述操作完成標識指示所述操作已完成。所述完成標識代表所述HOST已確認所述交互已完成。
具體實現(xiàn)中,是所述HOST接收所述NVMe設備發(fā)送的預設中斷,并訪問所述第三隊列,在所述第三隊列中獲取所述操作完成標識。
307、所述NVMe設備在所述第二隊列中檢測到完成標識。
與所述觸發(fā)標識一樣,所述完成標識也可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認所述交互已完成。
在現(xiàn)有NVMe設備與HOST交互過程中,HOST對NVMe設備的Doorbell操作是由指HOST直接寫NVMe設備的寄存器,修改某個字段以告知NVMe設備需要與HOST進行交互,在此過程中,如果NVMe設備系統(tǒng)復位,就會導致HOST的寫請求得不到響應,系統(tǒng)報出MCE,進而系統(tǒng)被掛起。本發(fā)明中,將Doorbell操作修改為由NVMe設備驅動去HOST的寄存器內存輪循第一隊列,以確定HOST是否已確認將進行交互。這樣,HOST不用去對NVMe設備的寄存器進行寫操作,就可以避免了由于NVMe設備突然拔出(即SDI卡系統(tǒng)復位)導致的系統(tǒng)掛死。另外,告知NVMe設備將與HOST進行交互,交互完成之前不能進行NVMe設備拔出(即SDI卡系統(tǒng)復位)。
本發(fā)明實施例提供的交互方法,HOST將觸發(fā)指令寫入內存,所述NVMe設備在主機HOST的內存中的第一隊列中輪詢到觸發(fā)指令;所述觸發(fā)指令指示所述HOST已確認將與所述NVMe設備進行交互。所述NVMe設備獲取任務指令,執(zhí)行所述任務指令指示的操作。NVMe設備在所述HOST的內存中的第一隊列中檢測到完成指令;所述完成指令指示所述HOST已確認與所述NVMe設備完成了交互。這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
實施例4:
本發(fā)明實施例提供一種交互方法,主要用于NVMe設備與HOST交互,將數(shù)據(jù)寫入NVMe設備。如圖5所示,所述方法包括以下步驟:
401、HOST寫入命令到SQ隊列。
402、HOST將觸發(fā)指令寫入DQ(Doorbell Queue,門鈴隊列)。
403、NVMe Controller(控制器)從DQ中輪循到觸發(fā)指令。
404、NVMe Controller在HOST的內存中獲取SQ隊列。
405、NVMe Controller在SQ隊列中獲取任務指令。
406、NVMe Controller操作NVMe設備側的DMA引擎在HOST的內存中讀取待寫數(shù)據(jù)。
407、NVMe Controller封裝待寫數(shù)據(jù)后發(fā)送至分布式存儲軟件。
408、分布式存儲軟件向NVMe Controlle返回Response(響應)。
409、NVMe Controller將操作完成標識寫入CQ隊列并釋放SQ隊列。
410、NVMe Controller發(fā)送MSI-X中斷到HOST。
411、HOST接收到中斷后執(zhí)行CQ隊列。
即訪問CQ隊列,獲取操作完成標識。
412、HOST將完成指令寫入Doorbell隊列。
413、NVMe Controller從Doorbell隊列中輪詢到完成指令,NVMe Controller釋放CQ隊列。
至此,依照NVMe協(xié)議,HOST與NVMe之間一次完整的寫數(shù)據(jù)流程就完成了。
本發(fā)明實施例提供一種交互方法,所述NVMe設備寫入數(shù)據(jù)時,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起 的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
實施例5:
本發(fā)明實施例提供一種交互方法,主要用于NVMe設備與HOST交互,HOST在NVMe設備中讀數(shù)據(jù)。如圖6所示,所述方法包括以下步驟:
501、HOST寫入命令到SQ隊列。
502、HOST將觸發(fā)指令寫入Doorbell隊列。
503、NVMe Controller從Doorbell隊列中輪詢到觸發(fā)指令。
504、NVMe Controller在HOST的內存中獲取SQ隊列。
505、NVMe Controller從SQ隊列中獲取任務指令。
506、NVMe Controller封裝待讀數(shù)據(jù)后發(fā)送至分布式存儲軟件。
507、分布式存儲軟件返回Response。
508、NVMe Controller操作NVMe設備側的DMA引擎在分布式存儲軟件中讀取待讀數(shù)據(jù),并將待讀數(shù)據(jù)發(fā)送至HOST。
509、HOST完成待讀數(shù)據(jù)的接收后返回DMA中斷。
510、NVMe Controller將操作完成標識寫入CQ隊列并釋放SQ隊列。
511、NVMe Controller發(fā)送MSI-X中斷到HOST。
512、HOST接收到中斷后執(zhí)行CQ隊列。
即訪問CQ隊列,獲取操作完成標識。
513、HOST將完成指令寫入Doorbell隊列。
514、NVMe Controller從Doorbell隊列中輪詢到完成指令,NVMe Controller釋放CQ隊列。
至此,依照NVMe協(xié)議,HOST與NVMe之間一次完整的讀數(shù)據(jù)流程就完成了。
本發(fā)明實施例提供一種交互方法,所述NVMe設備讀數(shù)據(jù)時,避免 HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
實施例6:
本發(fā)明實施例提供一種HOST,如圖7所示,所述HOST包括:寫入單元601、確認單元602。
寫入單元601,用于將任務指令寫入所述HOST內存中的第一隊列中,所述任務指令指示NVMe設備將執(zhí)行的操作;所述NVMe設備為與所述HOST通過快速外部組件互聯(lián)PCIe總線進行交互的外圍設備。
其中,所述操作,可以是所述NVMe設備在所述HOST的內存中讀取數(shù)據(jù),或者,是所述NVMe設備接收HOST讀數(shù)據(jù)的請求,將響應數(shù)據(jù)發(fā)送給HOST。隊列是一種數(shù)據(jù)結構,用于存儲數(shù)據(jù)。
所述寫入單元601還用于,將觸發(fā)標識寫入所述HOST內存中的第二隊列;所述觸發(fā)標識代表所述HOST已確認將與非易失存儲快速通道NVMe設備進行交互,所述交互為所述NVMe設備執(zhí)行所述操作需要與所述HOST進行的交互。
所謂交互,是指HOST指示NVMe設備要執(zhí)行某操作時,在NVMe設備執(zhí)行操作之前、完成操作之后,NVMe設備與HOST間要進行的交互,以確保NVMe設備與HOST知曉進行的某一步流程。如:HOST在步驟101中寫入任務指令,將指示NVMe設備寫數(shù)據(jù),之后在寫入觸發(fā)標識,使得NVMe設備檢測到觸發(fā)標識后知曉HOST已經確認所述NVMe設備將從HOST的內存中寫數(shù)據(jù)。
另外,所述觸發(fā)指令可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認將與所述NVMe設備進行交互。示例的,地址位為“0”代表所述HOST未確認將與所述NVMe設備進行交互,地址位為“1”代表所述HOST已確認將與所述NVMe設備進行交互。
確認單元602,用于確認所述操作已完成。
所述寫入單元601還用于,在所述確認單元確認所述操作已完成時,將完成標識寫入所述第一隊列,所述完成標識代表所述HOST已確認所述交互已完成。
需要說明的是,與所述觸發(fā)標識一樣,所述完成標識也可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認所述交互已完成。
所述確認單元602具體用于,所述HOST接收所述NVMe設備發(fā)送的預設中斷,訪問所述HOST內存中的第三隊列,檢測到操作完成標識,則確認所述操作已完成。
其中,所述預設中斷用于指示所述HOST訪問所述第三隊列,所述操作完成標識指示所述操作已完成。
需要說明的是,所述預設中斷可以是MSI(Message Signaled Interrupt,消息信息中斷)-X。另外,在本實施例中,所述第一隊列可以是SQ(Submit Queue,提交隊列),所述第二隊列可以是DQ(Doorbell Queue,門鈴隊列),所述第三隊列可以是CQ(Complete Queue,完成隊列)。
在現(xiàn)有NVMe設備與HOST交互過程中,HOST對NVMe設備的Doorbell操作是由指HOST直接寫NVMe設備的寄存器,修改某個字段以告知NVMe設備需要與HOST進行交互,在此過程中,如果NVMe設備系統(tǒng)復位,就會導致HOST的寫請求得不到響應,系統(tǒng)報出MCE,進而系統(tǒng)被掛起。本發(fā)明中,將Doorbell操作修改為由NVMe設備驅動去HOST的寄存器內存輪循第一隊列,以確定是否將與HOST進行交互。這樣既保證了NVMe設備與HOST之間交互的正常進行,又避免了由于NVMe設備系統(tǒng)復位導致的系統(tǒng)掛死。
本發(fā)明實施例提供的HOST,將觸發(fā)指令寫入內存,使得所述NVMe設備在主機HOST的內存中的第一隊列中輪詢到觸發(fā)指令;所述觸發(fā)指令指示所述HOST已確認將與所述NVMe設備進行交互。所述NVMe設備獲取任務指令,執(zhí)行所述任務指令指示的操作。NVMe設備在所述HOST的內存中的第一隊列中檢測到完成指令;所述完成 指令指示所述HOST已確認與所述NVMe設備完成了交互。這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
實施例7:
本發(fā)明實施例提供一種NVMe設備,如圖8所示,所述HOST包括:檢測單元701、獲取單元702、執(zhí)行單元703。
檢測單元701,用于輪詢第一隊列;所述第一隊列存儲在主機HOST的內存中。
所謂輪詢,是指NVMe設備去監(jiān)控或者不斷的去讀取HOST內存中的第一隊列,直到讀取到所述觸發(fā)指令(如:特定地址位的數(shù)值有變化:變?yōu)椤?”),則認為NVMe設備將與所述HOST進行交互。
所述檢測單元701還用于,在所述第一隊列中檢測到觸發(fā)標識,所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互;所述交互為所述NVMe設備執(zhí)行操作需要與所述HOST進行的交互。
其中,所述觸發(fā)指令可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認將與所述NVMe設備進行交互。示例的,地址位為“0”代表所述HOST未確認將與所述NVMe設備進行交互,地址位為“1”代表所述HOST已確認將與所述NVMe設備進行交互。
另外,所述操作,可以是所述NVMe設備在所述HOST的內存中讀取數(shù)據(jù),或者,是所述NVMe設備接收HOST讀數(shù)據(jù)的請求,將響應數(shù)據(jù)發(fā)送給HOST。隊列是一種數(shù)據(jù)結構,用于存儲數(shù)據(jù)。
所謂交互,是指HOST指示NVMe設備要執(zhí)行某操作時,在NVMe設備執(zhí)行操作之前、完成操作之后,NVMe設備與HOST間要進行的交互,以確保NVMe設備與HOST知曉進行的某一步流程。如:HOST在步驟 101中寫入任務指令,將指示NVMe設備寫數(shù)據(jù),之后在寫入觸發(fā)標識,使得NVMe設備檢測到觸發(fā)標識后知曉HOST已經確認所述NVMe設備將從HOST的內存中寫數(shù)據(jù)。
獲取單元702,用于獲取任務指令;所述任務指令指示所述HOST將執(zhí)行的所述操作。
執(zhí)行單元703,用于執(zhí)行所述操作。
所述檢測單元701還用于,在所述第一隊列中檢測到完成標識;所述完成標識指示所述HOST已確認與所述交互已完成,所述完成標識是所述HOST確認所述操作完成之后寫入所述第一隊列的。
需要說明的是,與所述觸發(fā)標識一樣,所述完成標識也可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認所述交互已完成。
在現(xiàn)有NVMe設備與HOST交互過程中,HOST對NVMe設備的Doorbell操作是由指HOST直接寫NVMe設備的寄存器,修改某個字段以告知NVMe設備需要與HOST進行交互,在此過程中,如果NVMe設備系統(tǒng)復位,就會導致HOST的寫請求得不到響應,系統(tǒng)報出MCE,進而系統(tǒng)被掛起。本發(fā)明中,將Doorbell操作修改為由NVMe設備驅動去HOST的寄存器內存輪循第一隊列,以確定HOST是否已確認將進行交互。這樣,HOST不用去對NVMe設備的寄存器進行寫操作,就可以避免了由于NVMe設備突然拔出(即SDI卡系統(tǒng)復位)導致的系統(tǒng)掛死。另外,告知NVMe設備將與HOST進行交互,交互完成之前不能進行NVMe設備拔出(即SDI卡系統(tǒng)復位)。
所述獲取單元702具體用于:訪問所述HOST內存中的第二隊列,在所述第二隊列中獲取所述任務指令。
若操作為寫數(shù)據(jù),則所述執(zhí)行單元703具體用于:
在所述HOST的寄存器中獲取待寫數(shù)據(jù),并將所述待寫數(shù)據(jù)存儲在所述NVMe設備的本地內存中;
將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成;
向所述HOST發(fā)送第預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
示例的:(1)NVMe Controller從SQ中讀取NVMe命令。
其中,所述NVMe Controller是NVMe設備側的控制模塊,所述SQ即所述第二隊列,所述NVMe命令即所述任務指令。這里,所述NVMe命令指示的操作為將待寫數(shù)據(jù)寫入到所述NVMe設備。
(2)NVMe Controller操作NVMe設備側的DMA()引擎在HOST的內存中獲取數(shù)據(jù)。
(3)NVMe Controller封裝所述待寫數(shù)據(jù)后發(fā)送至NVMe設備側的分布式存儲軟件。
其中,所述分布式存儲軟件是所述NVMe設備側的用于存儲數(shù)據(jù)的。所謂封裝待寫數(shù)據(jù)即將待寫數(shù)據(jù)封裝成分布式存儲軟件可以識別的格式。
(4)分布式存儲軟件向NVMe Controller返回Response。
實際上,就是分布式存儲軟件在存儲完NVMe Controller發(fā)送的數(shù)據(jù)之后,向NVMe Controller返回一個信息,用于告知NVMe Controller本次交互要寫入NVMe設備的待寫數(shù)據(jù)已經傳完。
(5)NVMe Controller將操作完成標識寫入第三隊列。
其中,所述第三隊列可以是CQ,所述操作完成標識指示操作已完成(即已將待寫數(shù)據(jù)寫入NVMe設備)。
(6)NVMe Controller向HOST發(fā)送MSI-X,指示所述HOST訪問所述第三隊列,在第三隊列中獲取操作完成標識后確認所述操作已完成。
若操作為讀數(shù)據(jù),則所述執(zhí)行單元703具體用于:
接收所述HOST的讀數(shù)據(jù)請求,并將所述待讀數(shù)據(jù)發(fā)送給所述HOST;
接收所述HOST發(fā)送的第一中斷,將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成,所述第一中斷用于指示所述NVMe設備將所述操作完成標識寫入所述HOST內存中 的第三隊列;
向所述HOST發(fā)送預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
示例的,(1)NVMe Controller從SQ隊列中讀取NVMe命令。
其中,所述NVMe Controller是NVMe設備側的控制模塊,所述SQ即所述第二隊列,所述NVMe命令即所述任務指令。這里,所述NVMe命令指示的操作為所述NVMe設備從HOST側的內存中讀數(shù)據(jù)。
(2)NVMe Controller封裝待讀數(shù)據(jù)后發(fā)送至分布式存儲軟件。
所謂封裝待讀數(shù)據(jù)即將待讀數(shù)據(jù)封裝成分布式存儲軟件可以識別的格式。
(3)分布式存儲軟件返回Response。
在此Response用于告知NVMe Controller所述待讀數(shù)據(jù)已完成接收。
(4)NVMe Controller設備側的DMA引擎在分布式存儲軟件中讀取待讀數(shù)據(jù),并將待讀數(shù)據(jù)發(fā)送至HOST。
(5)HOST完成待讀數(shù)據(jù)接收后向NVMe側返回DMA中斷。
其中,所述DMA中斷用于告知NVMe Controlle已完成數(shù)據(jù)接收。
(6)NVMe Controller接收DMA中斷后將操作完成標識寫入第三隊列。
其中,所述第三隊列可以是CQ,所述操作完成標識指示操作已完成(即已將待寫數(shù)據(jù)寫入NVMe設備)。
(7)NVMe Controller向HOST發(fā)送MSI-X,指示所述HOST訪問所述第三隊列,在第三隊列中獲取操作完成標識后確認所述操作已完成。
所述檢測單元701具體用于,設備主動輪詢所述第一隊列;
或,接收所述HOST發(fā)送的指示信息后輪詢所述第一隊列。
本發(fā)明實施例提供的NVMe設備,在主機HOST的內存中的第一隊列中輪詢到觸發(fā)指令;所述觸發(fā)指令指示所述HOST已確認將與所 述NVMe設備進行交互。所述NVMe設備獲取任務指令,執(zhí)行所述任務指令指示的操作。NVMe設備在所述HOST的內存中的第一隊列中檢測到完成指令;所述完成指令指示所述HOST已確認與所述NVMe設備完成了交互。這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
實施例8:
本發(fā)明實施例提供一種HOST,如圖9所示,所述HOST包括:處理器801、系統(tǒng)總線802和存儲器803。
其中,處理器801可以為中央處理器(英文:central processing unit,縮寫:CPU)。
存儲器803,用于存儲程序代碼,并將該程序代碼傳輸給該處理器801,處理器801根據(jù)程序代碼執(zhí)行下述指令。存儲器803可以包括易失性存儲器(英文:volatile memory),例如隨機存取存儲器(英文:random-access memory,縮寫:RAM);存儲器803也可以包括非易失性存儲器(英文:non-volatile memory),例如只讀存儲器(英文:read-only memory,縮寫:ROM),快閃存儲器(英文:flash memory),硬盤(英文:hard disk drive,縮寫:HDD)或固態(tài)硬盤(英文:solid-state drive,縮寫:SSD)。存儲器803還可以包括上述種類的存儲器的組合。處理器801、存儲器803之間通過系統(tǒng)總線802連接并完成相互間的通信。
處理器801,用于將任務指令寫入所述HOST內存中的第一隊列中,所述任務指令指示NVMe設備將執(zhí)行的操作;所述NVMe設備為與所述HOST通過快速外部組件互聯(lián)PCIe總線進行交互的外圍設備。
其中,所述操作,可以是所述NVMe設備在所述HOST的內存中讀取數(shù)據(jù),或者,是所述NVMe設備接收HOST讀數(shù)據(jù)的請求,將響應數(shù)據(jù)發(fā)送給HOST。隊列是一種數(shù)據(jù)結構,用于存儲數(shù)據(jù)。
所述處理器801還用于,將觸發(fā)標識寫入所述HOST內存中的第二隊列;所述觸發(fā)標識代表所述HOST已確認將與非易失存儲快速通道NVMe設備進行交互,所述交互為所述NVMe設備執(zhí)行所述操作需要與所述HOST進行的交互。
其中,所謂交互,是指HOST指示NVMe設備要執(zhí)行某操作時,在NVMe設備執(zhí)行操作之前、完成操作之后,NVMe設備與HOST間要進行的交互,以確保NVMe設備與HOST知曉進行的某一步流程。如:HOST在步驟101中寫入任務指令,將指示NVMe設備寫數(shù)據(jù),之后在寫入觸發(fā)標識,使得NVMe設備檢測到觸發(fā)標識后知曉HOST已經確認所述NVMe設備將從HOST的內存中寫數(shù)據(jù)。
另外,所述觸發(fā)指令可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認將與所述NVMe設備進行交互。示例的,地址位為“0”代表所述HOST未確認將與所述NVMe設備進行交互,地址位為“1”代表所述HOST已確認將與所述NVMe設備進行交互。
確認處理器801,用于確認所述操作已完成,確認所述操作已完成時,將完成標識寫入所述第一隊列,所述完成標識代表所述HOST已確認所述交互已完成。
需要說明的是,與所述觸發(fā)標識一樣,所述完成標識也可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認所述交互已完成。
所述處理器801具體用于,所述HOST接收所述NVMe設備發(fā)送的預設中斷,訪問所述HOST內存中的第三隊列,檢測到操作完成標識,則確認所述操作已完成。
其中,所述預設中斷用于指示所述HOST訪問所述第三隊列,所述操作完成標識指示所述操作已完成。
本發(fā)明實施例提供的HOST,將觸發(fā)指令寫入內存,使得所述NVMe設備在主機HOST的內存中的第一隊列中輪詢到觸發(fā)指令;所述觸發(fā)指令指示所述HOST已確認將與所述NVMe設備進行交互。所述NVMe設備獲取任務指令,執(zhí)行所述任務指令指示的操作。NVMe 設備在所述HOST的內存中的第一隊列中檢測到完成指令;所述完成指令指示所述HOST已確認與所述NVMe設備完成了交互。這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
實施例9:
本發(fā)明實施例提供一種NVMe設備,如圖10所示,所述HOST包括:處理器901、系統(tǒng)總線902和存儲器903。
其中,處理器901可以為中央處理器(英文:central processing unit,縮寫:CPU)。
存儲器903,用于存儲程序代碼,并將該程序代碼傳輸給該處理器901,處理器901根據(jù)程序代碼執(zhí)行下述指令。存儲器903可以包括易失性存儲器(英文:volatile memory),例如隨機存取存儲器(英文:random-access memory,縮寫:RAM);存儲器903也可以包括非易失性存儲器(英文:non-volatile memory),例如只讀存儲器(英文:read-only memory,縮寫:ROM),快閃存儲器(英文:flash memory),硬盤(英文:hard disk drive,縮寫:HDD)或固態(tài)硬盤(英文:solid-state drive,縮寫:SSD)。存儲器903還可以包括上述種類的存儲器的組合。處理器901、存儲器903之間通過系統(tǒng)總線902連接并完成相互間的通信。
處理器901,用于輪詢第一隊列;所述第一隊列存儲在主機HOST的內存中。在所述第一隊列中檢測到觸發(fā)標識,所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互;所述交互為所述NVMe設備執(zhí)行操作需要與所述HOST進行的交互。
所謂輪詢,是指NVMe設備去監(jiān)控或者不斷的去讀取HOST內存中的第一隊列,直到讀取到所述觸發(fā)指令(如:特定地址位的數(shù)值有變化:變?yōu)椤?”),則認為NVMe設備將與所述HOST進行交互。
處理器901,用于獲取任務指令;所述任務指令指示所述HOST將執(zhí)行的所述操作。
其中,所述觸發(fā)指令可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認將與所述NVMe設備進行交互。示例的,地址位為“0”代表所述HOST未確認將與所述NVMe設備進行交互,地址位為“1”代表所述HOST已確認將與所述NVMe設備進行交互。
另外,所述操作,可以是所述NVMe設備在所述HOST的內存中讀取數(shù)據(jù),或者,是所述NVMe設備接收HOST讀數(shù)據(jù)的請求,將響應數(shù)據(jù)發(fā)送給HOST。隊列是一種數(shù)據(jù)結構,用于存儲數(shù)據(jù)。
所謂交互,是指HOST指示NVMe設備要執(zhí)行某操作時,在NVMe設備執(zhí)行操作之前、完成操作之后,NVMe設備與HOST間要進行的交互,以確保NVMe設備與HOST知曉進行的某一步流程。如:HOST在步驟101中寫入任務指令,將指示NVMe設備寫數(shù)據(jù),之后在寫入觸發(fā)標識,使得NVMe設備檢測到觸發(fā)標識后知曉HOST已經確認所述NVMe設備將從HOST的內存中寫數(shù)據(jù)。
處理器901還用于,執(zhí)行所述操作。
所述處理器901還用于,在所述第一隊列中檢測到完成標識;所述完成標識指示所述HOST已確認與所述交互已完成,所述完成標識是所述HOST確認所述操作完成之后寫入所述第一隊列的。與所述觸發(fā)標識一樣,所述完成標識也可以是所述第一隊列中的一個地址位,用于指示所述HOST是否已確認所述交互已完成。
所述處理器901具體用于:訪問所述HOST內存中的第二隊列,在所述第二隊列中獲取所述任務指令。
若操作為寫數(shù)據(jù),則所述處理器901具體用于:
在所述HOST的寄存器中獲取待寫數(shù)據(jù),并將所述待寫數(shù)據(jù)存儲在所述NVMe設備的本地內存中;
將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成;
向所述HOST發(fā)送第預設中斷,指示所述HOST訪問所述第三隊 列,確認所述操作已完成。
示例的,1)NVMe Controller從SQ中讀取NVMe命令。
其中,所述NVMe Controller是NVMe設備側的控制模塊,所述SQ即所述第二隊列,所述NVMe命令即所述任務指令。這里,所述NVMe命令指示的操作為將待寫數(shù)據(jù)寫入到所述NVMe設備。
(2)NVMe Controller操作NVMe設備側的DMA()引擎在HOST的內存中獲取數(shù)據(jù)。
(3)NVMe Controller封裝所述待寫數(shù)據(jù)后發(fā)送至NVMe設備側的分布式存儲軟件。
其中,所述分布式存儲軟件是所述NVMe設備側的用于存儲數(shù)據(jù)的。所謂封裝待寫數(shù)據(jù)即將待寫數(shù)據(jù)封裝成分布式存儲軟件可以識別的格式。
(4)分布式存儲軟件向NVMe Controller返回Response。
實際上,就是分布式存儲軟件在存儲完NVMe Controller發(fā)送的數(shù)據(jù)之后,向NVMe Controller返回一個信息,用于告知NVMe Controller本次交互要寫入NVMe設備的待寫數(shù)據(jù)已經傳完。
(5)NVMe Controller將操作完成標識寫入第三隊列。
其中,所述第三隊列可以是CQ,所述操作完成標識指示操作已完成(即已將待寫數(shù)據(jù)寫入NVMe設備)。
(6)NVMe Controller向HOST發(fā)送MSI-X,指示所述HOST訪問所述第三隊列,在第三隊列中獲取操作完成標識后確認所述操作已完成。
若操作為讀數(shù)據(jù),則所述處理器901具體用于:
接收所述HOST的讀數(shù)據(jù)請求,并將所述待讀數(shù)據(jù)發(fā)送給所述HOST;
接收所述HOST發(fā)送的第一中斷,將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成,所述第一中斷用于指示所述NVMe設備將所述操作完成標識寫入所述HOST內存中的第三隊列;
向所述HOST發(fā)送預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
示例的:(1)NVMe Controller從SQ隊列中讀取NVMe命令。
其中,所述NVMe Controller是NVMe設備側的控制模塊,所述SQ即所述第二隊列,所述NVMe命令即所述任務指令。這里,所述NVMe命令指示的操作為所述NVMe設備從HOST側的內存中讀數(shù)據(jù)。
(2)NVMe Controller封裝待讀數(shù)據(jù)后發(fā)送至分布式存儲軟件。
所謂封裝待讀數(shù)據(jù)即將待讀數(shù)據(jù)封裝成分布式存儲軟件可以識別的格式。
(3)分布式存儲軟件返回Response。
在此Response用于告知NVMe Controller所述待讀數(shù)據(jù)已完成接收。
(4)NVMe Controller設備側的DMA引擎在分布式存儲軟件中讀取待讀數(shù)據(jù),并將待讀數(shù)據(jù)發(fā)送至HOST。
(5)HOST完成待讀數(shù)據(jù)接收后向NVMe側返回DMA中斷。
其中,所述DMA中斷用于告知NVMe Controlle已完成數(shù)據(jù)接收。
(6)NVMe Controller接收DMA中斷后將操作完成標識寫入第三隊列。
其中,所述第三隊列可以是CQ,所述操作完成標識指示操作已完成(即已將待寫數(shù)據(jù)寫入NVMe設備)。
(7)NVMe Controller向HOST發(fā)送MSI-X,指示所述HOST訪問所述第三隊列,在第三隊列中獲取操作完成標識后確認所述操作已完成。
這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器。將HOST對NVMe設備的兩次直接寄存器操作變成NVMe設備側主動去HOST的內存隊列輪循,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。Doorbell操作由原來的HOST直接寫NVMe設備寄存器修改為由NVMe 設備驅動去輪循Doorbell隊列(即本發(fā)明所述第一隊列),HOST將所述觸發(fā)指令、完成指令寫入內存中的Doorbell隊列,即認為是讀寫請求已經得到響應。這時候即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免系統(tǒng)掛死的情況。這樣,HOST不用去對NVMe設備的寄存器進行寫操作,二者之間還可以進行正常交互,還可以避免了由于NVMe設備突然拔出導致的系統(tǒng)掛死。另外,告知NVMe設備與HOST之間的交互完成,可以進行NVMe設備拔出,從而實現(xiàn)NVMe設備的熱插拔。
所述處理器901具體用于,設備主動輪詢所述第一隊列;
或,接收所述HOST發(fā)送的指示信息后輪詢所述第一隊列。
本發(fā)明實施例提供的NVMe設備,在主機HOST的內存中的第一隊列中輪詢到觸發(fā)指令;所述觸發(fā)指令指示所述HOST已確認將與所述NVMe設備進行交互。所述NVMe設備獲取任務指令,執(zhí)行所述任務指令指示的操作。NVMe設備在所述HOST的內存中的第一隊列中檢測到完成指令;所述完成指令指示所述HOST已確認與所述NVMe設備完成了交互。這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
實施例10:
本發(fā)明實施例提供一種物理機系統(tǒng),如圖11所示,所述物理機系統(tǒng)包括包括HOST和NVMe設備。
具體地,所述HOST和NVMe設備間的交互包括:
所述HOST將任務指令寫入所述HOST內存中的第一隊列中,所述任務指令指示非易失存儲快速通道NVMe設備將執(zhí)行的操作。所述NVMe設備為與所述HOST通過快速外部組件互聯(lián)PCIe總線進行交互的外圍設備。
所述HOST將觸發(fā)標識寫入所述HOST內存中的第二隊列;所述觸發(fā)標識代表所述HOST已確認將與所述NVMe設備進行交互,所述交互為所述NVMe設備執(zhí)行所述操作需要與所述HOST進行的交互。
所述NVMe設備輪詢所述第二隊列。
所述NVMe設備在所述第二隊列中檢測到觸發(fā)標識。
所述NVMe設備在所述第一隊列中獲取任務指令;行所述操作。
所述HOST獲取所述操作完成標識,確認所述操作已完成,則將完成標識寫入所述第二隊列;所述操作完成標識指示所述操作已完成;所述完成標識代表所述HOST已確認所述交互已完成;
所述NVMe設備在所述第二隊列中檢測到完成標識。
需要說明的是,所述任務指令指示的操作具體可以是所述NVMe設備在所述HOST的內存中讀取數(shù)據(jù),或者,是所述NVMe設備接收HOST讀數(shù)據(jù)的請求,將響應數(shù)據(jù)發(fā)送給HOST。
若所述操作為寫數(shù)據(jù),則所述NVMe設備執(zhí)行所述操作具體包括:
所述NVMe設備在所述HOST的寄存器中獲取待寫數(shù)據(jù),并將所述待寫數(shù)據(jù)存儲在所述NVMe設備的本地內存中;所述NVMe設備將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成;所述NVMe設備向所述HOST發(fā)送第預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
若所述操作為讀數(shù)據(jù),則所述NVMe設備執(zhí)行所述操作具體包括:所述NVMe設備接收所述HOST的讀數(shù)據(jù)請求,并將所述待讀數(shù)據(jù)發(fā)送給所述HOST;所述NVMe設備接收所述HOST發(fā)送的第一中斷,將操作完成標識寫入所述HOST內的第三隊列;所述操作完成標識指示所述操作已完成,所述第一中斷用于指示所述NVMe設備將所述操作完成標識寫入所述HOST內存中的第三隊列;所述NVMe設備向所述HOST發(fā)送預設中斷,指示所述HOST訪問所述第三隊列,確認所述操作已完成。
這樣,HOST接收所述預設中斷后就會訪問第三隊列,獲取其中的操作完成標識,進而將完成標識寫入所述第二隊列。
本實施例所述的第一隊列,可以是提交隊列SQ,本實施例所述的第 二隊列,可以是門鈴隊列DQ。所述第三隊列可以是完成隊列CQ。所述預設中斷可以是MSI-X。
本發(fā)明實施例提供的物理機系統(tǒng),NVMe設備在主機HOST的內存中的第一隊列中輪詢到觸發(fā)指令;所述觸發(fā)指令指示所述HOST已確認將與所述NVMe設備進行交互。所述NVMe設備獲取任務指令,執(zhí)行所述任務指令指示的操作。NVMe設備在所述HOST的內存中的第一隊列中檢測到完成指令;所述完成指令指示所述HOST已確認與所述NVMe設備完成了交互。這樣,在HOST與NVMe設備交互的過程中,避免HOST的CPU直接操作NVMe設備的寄存器,從而避免HOST的CPU對NVMe設備側寄存器操作無響應導致系統(tǒng)掛死的情況出現(xiàn)。即使出現(xiàn)NVMe設備突然被拔掉也不會導致HOST的CPU操作寄存器無響應的情況,系統(tǒng)只會認為是一次讀寫超時,從而有效的避免NVMe設備復位引起的系統(tǒng)掛死,實現(xiàn)NVMe設備的熱插拔。
通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的裝置的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是一個物理單元或多個物理單元,即可以位于一個地方,或者也可以分布到多個不同地方??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產品銷售或使用時,可以存儲在一個可讀取存儲介質中。基于這樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方 案的全部或部分可以以軟件產品的形式體現(xiàn)出來,該軟件產品存儲在一個存儲介質中,包括若干指令用以使得一個設備(可以是單片機,芯片等)或處理器(processor)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應所述以權利要求的保護范圍為準。