TW202314516A - 寫入資料到閃存記憶體的方法及電腦程式產品及裝置 - Google Patents
寫入資料到閃存記憶體的方法及電腦程式產品及裝置 Download PDFInfo
- Publication number
- TW202314516A TW202314516A TW111112707A TW111112707A TW202314516A TW 202314516 A TW202314516 A TW 202314516A TW 111112707 A TW111112707 A TW 111112707A TW 111112707 A TW111112707 A TW 111112707A TW 202314516 A TW202314516 A TW 202314516A
- Authority
- TW
- Taiwan
- Prior art keywords
- data
- accelerator
- parameter set
- flash memory
- engine
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0635—Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Networks & Wireless Communication (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Read Only Memory (AREA)
- Debugging And Monitoring (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Stored Programmes (AREA)
- Complex Calculations (AREA)
Abstract
本發明涉及一種寫入資料到閃存記憶體的方法、電腦程式產品和裝置。該方法由閃存控制器的主要處理單元執行,包含:為資料寫入的每個項目產生前端參數集、中端參數集和後端參數集;傳送每個項目的前端參數集給路由引擎,使得路由引擎依據前端參數集的內容驅動主機介面;傳送每個項目的中端參數集給加速器,使得加速器依據中端參數集的內容驅動獨立磁碟冗餘陣列引擎;以及傳送每個項目的後端參數集給所述加速器,使得加速器依據後端參數集的內容驅動資料存取引擎。通過專屬的路由引擎和加速器的設置,主要處理單元不需要監督整個資料寫入的資料流運作,提升系統的整體效能。
Description
本發明涉及儲存裝置,尤指一種寫入資料到閃存記憶體的方法、電腦程式產品及裝置。
閃存通常分為NOR閃存與NAND閃存。NOR閃存為隨機存取裝置,中央處理器(Host)可於位址腳位上提供任何存取NOR閃存的位址,並及時地從NOR閃存的資料腳位上獲得儲存於該位址上的資料。相反地,NAND閃存並非隨機存取,而是序列存取。NAND閃存無法像NOR閃存一樣,可以存取任何隨機位址,中央處理器反而需要寫入序列的位元組(Bytes)的值到NAND閃存中,用於定義請求命令(Command)的類型(如,讀取、寫入、抹除等),以及用在此命令上的位址。位址可指向一個頁面(閃存中寫入作業的最小資料塊)或一個區塊(閃存中抹除作業的最小資料塊)。提昇閃存模組的資料寫入效能,一直是影響閃存控制器的系統整體效能的重要課題。因此.本發明提出一種寫入資料到閃存記憶體的方法、產品電腦程式及裝置,用於提升資料寫入效能。
有鑑於此,如何減輕或消除上述相關領域的缺失,實為有待解決的問題。
本說明書涉及一種寫入資料到閃存記憶體的方法,由閃存控制器的主要處理單元執行,包含:為資料寫入的每個項目產生前端參數集、中端參數集和後端參數集;傳送每個項目的前端參數集給路由引擎,使得路由引擎依據前端參數集的內容驅動主機介面,用以從主機端獲取資料,以及將獲取的資料儲存至隨機存取記憶體中的第一位址;傳送每個項目的中端參數集給加速器,使得加速器依據中端參數集的內容驅動獨立磁碟冗餘陣列引擎(Redundant Array of Independent Disks,RAID Engine),用以從隨機存取記憶體中的第二位址獲取原始資料,加密原始資料或者依據多個頁面的原始資料產生奇偶校驗頁面的資料,以及將加密後的或者編碼後的結果儲存至隨機存取記憶體中的第三位址;以及傳送每個項目的後端參數集給所述加速器,使得加速器依據後端參數集的內容驅動資料存取引擎,用以從隨機存取記憶體中的第四位址獲取所述來源資料,將來源資料寫入到閃存模組的指定實體位址。
本說明書另涉及一種電腦程式產品,包含程式碼。當處理單元執行所述程式碼時,實施如上所述的寫入資料到閃存記憶體的方法。
本說明書更另涉及一種寫入資料到閃存記憶體的裝置,包含:路由引擎,耦接主機介面;加速器,耦接獨立磁碟冗餘陣列引擎和資料存取引擎;以及主要處理單元,耦接所述路由引擎和所述加速器。主要處理單元用於為資料寫入的每個項目產生前端參數集、中端參數集和後端參數集;傳送每個項目的前端參數集給路由引擎,使得路由引擎依據前端參數集的內容驅動主機介面,用以從主機端獲取資料,以及將獲取的資料儲存至隨機存取記憶體中的第一位址;傳送每個項目的中端參數集給加速器,使得加速器依據中端參數集的內容驅動獨立磁碟冗餘陣列引擎,用以從隨機存取記憶體中的第二位址獲取原始資料,加密原始資料或者依據多個頁面的原始資料產生奇偶校驗頁面的資料,以及將加密後的或者編碼後的結果儲存至隨機存取記憶體中的第三位址;以及傳送每個項目的後端參數集給所述加速器,使得加速器依據後端參數集的內容驅動資料存取引擎,用以從隨機存取記憶體中的第四位址獲取所述來源資料,將來源資料寫入到閃存模組的指定實體位址。
前端參數集包含主機寫入命令的資訊以及隨機存取記憶體中配置來儲存從主機端所獲取的資料的第一位址。中端參數集包含隨機存取記憶體中配置來儲存原始資料的第二位址和儲存加密後或編碼後的結果的第三位址,以及用來設定獨立磁碟冗餘陣列引擎的參數。後端參數集包含編程表和編程表的索引,編程表中包含隨機存取記憶體中配置來儲存來源資料的第四位址。
上述實施例的優點之一,通過專屬的路由引擎和加速器來統合主機介面、RAID引擎和資料存取引擎的運作以完成各式各樣的資料寫入操作,讓閃存控制器的主要處理單元不需要監督整個資料寫入的資料流運作,以及在資料流運作的過程中等待主機介面、RAID引擎和資料存取引擎的狀態回覆。這些節省下的時間和運算資源可以讓閃存控制器的主要處理單元執行其他的任務,提升系統的整體效能。
上述實施例的另一個優點,通過櫃位旗標可讓主機介面在前端處理階段中以亂序和分開執行的項目,在中端和後端處理階段中由加速器回復到原來的執行順序。
上述實施例的另一個優點,通過項目概要的操作設定,讓路由引擎可跳過不需要執行的前端處理階段,以及讓加速器可跳過不需要執行的中端和/或後端處理階段,提供組態的彈性。
本發明的其他優點將搭配以下的說明和圖式進行更詳細的解說。
以下說明為完成發明的較佳實現方式,其目的在於描述本發明的基本精神,但並不用以限定本發明。實際的發明內容必須參考之後的權利要求範圍。
必須了解的是,使用於本說明書中的“包含”、“包括”等詞,用以表示存在特定的技術特徵、數值、方法步驟、作業處理、元件以及/或組件,但並不排除可加上更多的技術特徵、數值、方法步驟、作業處理、元件、組件,或以上的任意組合。
於權利要求中使用如“第一”、“第二”、“第三”等詞是用來修飾權利要求中的元件,並非用來表示之間具有優先順序,前置關係,或者是一個元件先於另一個元件,或者是執行方法步驟時的時間先後順序,僅用來區別具有相同名字的元件。
必須了解的是,當元件描述為“連接”或“耦接”至另一元件時,可以是直接連結、或耦接至其他元件,可能出現中間元件。相反地,當元件描述為“直接連接”或“直接耦接”至另一元件時,其中不存在任何中間元件。使用來描述元件之間關係的其他語詞也可類似方式解讀,例如“介於”相對於“直接介於”,或者是“鄰接”相對於“直接鄰接”等等。
在閃存控制器中,整個資料寫入的資料流可分為三個處理階段:前端(Front-end);中端(Mid-end);和後端(Back-end)。前端處理階段負責獲取即將寫入的資料,其中還包含獲取資料的來源地址、資料的大小、靜態隨機存取記憶體(Static Random Access Memory,SRAM)中暫存這些資料的位置等資訊。中端處理階段涉及資料安全,其中包含資料重新排序、協調獨立磁碟冗餘陣列引擎(Redundant Array of Independent Disks,RAID Engine)來執行資料加密,產生奇偶校驗頁面(Parity Page)等操作。後端處理階段包含從靜態隨機存取記憶體取得資料、後資料處理(包含資料亂序、在資料後加上低密度奇偶校驗碼等)、實體資料寫入的控制等操作。需要注意的是,系統可依據資料寫入的不同特性忽略以上三個階段中的任何一個或兩個。在以前的實施方式,當閃存控制器執行主機寫入命令時,通常使用韌體(也可稱為韌體轉譯層,Firmware Translation Layer,FTL)來啟動、控制和監督資料流,以至於消耗了大部分的處理器負載和計算資源在如上所述的任務上。詳細來說,韌體可能消耗大量的時間和計算資源來檢查必要的資料是否已經儲存到靜態隨機存取記憶體中的指定位置,詢問相關的硬體(例如獨立磁碟冗餘陣列引擎、閃存介面等),以及等待回覆以知道運作的狀態等。為了解決如上所述的問題,本發明實施例修改了目前的架構,設置能夠和韌體搭配的專屬硬體電路,用於加速資料寫入的整題處理。
參考圖1。電子裝置10包含主機端(Host Side)110、閃存控制器130及閃存模組150,並且閃存控制器130及閃存模組150可合稱為裝置端(Device Side)。電子裝置10可實施於個人電腦、筆記型電腦(Laptop PC)、平板電腦、手機、數位相機、數位攝影機等電子產品之中。主機端110與閃存控制器130的主機介面(Host Interface)131之間可以通用序列匯流排(Universal Serial Bus,USB)、先進技術附著(advanced technology attachment,ATA)、序列先進技術附著(serial advanced technology attachment,SATA)、快速周邊元件互聯(peripheral component interconnect express,PCI-E)、通用快閃記憶儲存(Universal Flash Storage,UFS)、嵌入式多媒體卡(Embedded Multi-Media Card,eMMC)等通訊協定彼此溝通。閃存控制器130的閃存介面(Flash Interface)139與閃存模組150之間可以雙倍資料率(Double Data Rate,DDR)通訊協定彼此溝通,例如,開放NAND快閃(Open NAND Flash Interface,ONFI)、雙倍資料率開關(DDR Toggle)或其他通訊協定。閃存控制器130包含第一處理單元134(又可稱為主要處理單元,Primary Processing Unit),可使用多種方式實施,如使用通用硬體(例如,單一處理器、具平行處理能力的多處理器、圖形處理器或其他具運算能力的處理器),並且在執行軟體以及/或韌體指令時,提供之後描述的功能。處理單元134通過主機介面131接收主機命令,例如讀取命令(Read Command)、寫入命令(Write Command)、丟棄命令(Discard Command)、抹除命令(Erase Command)等,排程並執行這些命令。閃存控制器130另包含隨機存取記憶體(Random Access Memory, RAM)136,可實施為動態隨機存取記憶體(Dynamic Random Access Memory,DRAM)、靜態隨機存取記憶體(Static Random Access Memory,SRAM)或上述兩者的結合,用於配置空間作為資料緩衝區,儲存從主機端110讀取並即將寫入閃存模組150的使用者資料(也可稱為主機資料),以及從閃存模組150讀取並即將輸出給主機端110的使用者資料。隨機存取記憶體136另可儲存執行過程中需要的資料,例如,變數、資料表、主機與閃存位址對照表(Host-to-Flash Address Mapping Table,簡稱H2F表)、閃存與主機位址對照表(Flash-to-Host Address Mapping Table,簡稱F2H表)等。
閃存控制器130中可配置共享匯流排架構(Shared Bus Architecture),用於讓元件之間彼此耦接以傳遞資料、位址、控制訊號等,這些元件包含主機介面131、第一處理單元134、RAID引擎135、RAM 136、資料存取引擎(Data Access Engine)137等。匯流排包含並行的物理線,連接閃存控制器130中兩個以上的組件。共享匯流排是一種共享的傳輸媒體,在任意的時間上,只能有兩個裝置可以使用這些線來彼此溝通,用於傳遞資料。資料及控制訊號能夠在組件間分別沿資料和控制線進行雙向傳播,但另一方面,位址訊號只能沿位址線進行單向傳播。例如,當處理單元134想要讀取RAM 136的特定位址上的資料時,處理單元134在位址線上傳送此位址給RAM 136。接著,此位址的資料會在資料線上回覆給處理單元134。為了完成資料讀取操作,控制訊號會使用控制線進行傳遞。
閃存控制器130中還可配置專屬匯流排(Dedicated Bus),獨立於共享匯流排架構之外,讓第一處理單元134、路由引擎(Routing Engine)132和加速器(Accelerator)133彼此連接,用於傳遞控制訊號和控制資訊。路由引擎132用於完成前端處理階段的任務,加速器133用於完成中端和後端處理的任務。路由引擎132和加速器133可不耦接共享匯流排架構,避免佔據共享匯流排架構的頻寬,降低整體的系統效能。
閃存模組150提供大量的儲存空間,通常是數百個千兆位元組(Gigabytes,GB),甚至是數個兆兆位元組(Terabytes,TB),用於儲存大量的使用者資料,例如高解析度圖片、影片等。閃存模組150中包含控制電路以及記憶體陣列,記憶體陣列中的記憶單元可組態為單層式單元(Single Level Cells,SLCs)、多層式單元(Multiple Level Cells,MLCs)三層式單元(Triple Level Cells,TLCs)、四層式單元(Quad-Level Cells,QLCs)或上述的任意組合。第一處理單元134可通過閃存介面139寫入使用者資料到閃存模組150中的指定位址(目的位址),以及從閃存模組150中的指定位址(來源位址)讀取使用者資料。閃存介面139使用數個電子訊號來協調閃存控制器130與閃存模組150間的資料與命令傳遞,包含資料線(Data Line)、時脈訊號(Clock Signal)與控制訊號(Control Signal)。資料線可用於傳遞命令、位址、讀出及寫入的資料;控制訊號線可用於傳遞晶片致能(Chip Enable,CE)、位址提取致能(Address Latch Enable,ALE)、命令提取致能(Command Latch Enable,CLE)、寫入致能(Write Enable,WE)等控制訊號。
參考圖2,閃存模組150中的介面151可包含四個輸出入通道(I/O channels,以下簡稱通道)CH#0至CH#3,每一個通道連接四個NAND閃存單元,例如,通道CH#0連接NAND閃存單元153#0、153#4、153#8及153#12。每個NAND閃存單元可封裝為獨立的芯片(die)。閃存介面139可通過介面151發出致能訊號CE#0至CE#3中的一個來致能NAND閃存單元153#0至153#3、153#4至153#7、153#8至153#11、或153#12至153#15,接著以並行的方式從致能的NAND閃存單元讀取使用者資料,或者寫入使用者資料至致能的NAND閃存單元。
參考圖3所示的資料寫入的流程圖。前端處理階段檢查操作設定,判斷是否存在關聯於主機介面131的待執行任務(步驟S310)。如果是(步驟S310中“是”的路徑),驅動主機介面131以從主機端110獲取資料,並且將資料儲存在RAM 136中的指定位址(步驟S320)。否則(步驟S310中“否”的路徑),流程直接進入下個階段(也就是中端處理階段)(步驟S330)。中端處理階段檢查操作設定,判斷是否存在關聯於RAID引擎135的待執行任務(步驟S330)。如果是(步驟S330中“是”的路徑),驅動RAID引擎135以從RAM 136的指定位址讀取資料,重新排序獲取的資料以恢復既有的資料順序,為重新排序後資料的資料群組進行加密或者產生奇偶校驗頁面的資料,並將加密後資料或者奇偶校驗頁面的資料儲存在RAM 136中的指定位址(步驟S340)。否則(步驟S330中“否”的路徑),流程直接進入下個階段(也就是後端處理階段)(步驟S350)。後端處理階段檢查操作設定,判斷是否存在關聯於資料存取引擎137的待執行任務(步驟S350)。如果是(步驟S350中“是”的路徑),驅動資料存取引擎137以從RAM 136的指定位址讀取資料,這些資料可以是從主機端110獲取的資料、RAID引擎135加密後的資料、RAID引擎135產生的奇偶校驗頁面的資料等等。此外,驅動資料存取引擎137以對讀取資料執行後處理,例如對讀取資料進行亂序,附加讀取資料的低密度奇偶校驗碼等等,以及寫入後處理過的資料到閃存模組150中的指定位址(步驟S360)。否則(步驟S350中“否”的路徑),流程結束。
在先前的實施方式中,通常使用第一處理單元134執行韌體來啟動、控制和監督整個資料寫入的資料流。為了減少佔用第一處理單元134的時間和計算資源,本發明實施例在閃存控制器130中設置了包含由專屬電路實作的路由引擎132和加速器133,用於讓第一處理單元134通過一種控制協議來選擇性地啟動路由引擎132、加速器133和第二處理器138,並且讓整個資料流的執行能夠被路由引擎132、加速器133和第二處理器138自己串接起來。除此之外,此控制協議還可依據資料寫入的特性選擇性地忽略資料流中的一個或二個階段。
本發明實施例提出以逐項目(Transaction by Transaction)的方式來管理資料寫入的整個資料流運作,用於讓欲寫入的資料可流經指定硬體以被處理。為了讓路由引擎132、加速器133和第二處理器138知道資料寫入的項目概要(Transaction Profile),本發明實施例讓第一處理單元134產生和傳送前置資訊(Leading Information)和櫃位旗標(Cargo Flags)給路由引擎132和加速器133,用於通知路由引擎132、加速器133和第二處理器138每個項目(也可稱為資料寫入項目)所要寫入的資料屬於哪個載具(Carrier),此載具中每個櫃位(Cargo)的準備狀態,以及此載具需要經過哪些處理階段等資訊,以協調路由引擎132、加速器133和第二處理器138之間的執行。參考圖4的項目概要的示意圖,包含2個位元組(Byte0~Byte1)的前置資訊410和4個位元組(Byte2~Byte5)的櫃位旗標(Cargo Flags)420。假設一次寫入128KB的資料到閃存模組150可以得到較佳的效能:閃存控制器130可在每次搜集完成128KB的資料後,驅動資料存取引擎137將128KB的資料以多通道交錯的方式寫入閃存模組150中的多個NAND閃存單元。因應以上的示例,前置資訊410的第0個位元組(Byte0)儲存載具識別碼(Carrier ID),用於指出特定的128KB資料。前置資訊410的第1個位元組(Byte1)儲存操作設定(Operation Setting)的資訊,其中的最低三個位元儲存是否啟動三個處理階段的資訊,例如,當第1個位元組中的最低三個位元為“0b111”時,代表前端、中端及後端處理階段都要啟動。通過載具識別碼的提供,讓具有相同載具識別碼的128K資料就好像裝載在同一個虛擬載具(Virtual Carrier)上,協同每個項目在路由引擎132和加速器133之間的運行。在這裡需要注意的是,一個虛擬載具也可依據不同類型的閃存模組裝載不同大小的資料,例如16KB、32KB、64KB等大小的資料。由於一個項目可能無法用來控制整個128KB的資料寫入操作,櫃位旗標420中的每個位元用於指出128KB資料中的特定位置(也可稱為櫃位)的資料是否已經準備就緒,“1”代表已經準備就緒,“0”代表尚未就緒。例如,當第2個位元組(Byte2)中的最低兩個位元為“0b11”時,代表128KB資料中的第0個和第1個4KB資料已經準備就緒。當第3個位元組(Byte3)中的最低兩個位元為“0b11”時,代表128KB資料中的第8個和第9個4KB資料已經準備就緒。在這裡需要理解的是,在一些系統的設置中,4KB的資料也可當作一個主頁面(Host Page,包含八個連續的LBAs)的資料。
舉一個例子來說,當第一處理單元134執行的韌體通過主機介面131接收到主機端110指示寫入128KB資料的主機寫入命令時,產生如下項目概要:載具識別碼為“0x00”; 操作設定為“0x07”, 代表這個項目需要啟動前端、中端和後端處理階段;櫃位旗標為“0x00000000” (可稱為初始化的櫃位旗標),代表沒有任何資料已經準備就緒。接著,第一處理單元134將項目概要、主機寫入命令、以及RAM 136中用以儲存128KB資料的指定位址(亦可稱為目的位址)傳送給路由引擎131。主機寫入命令可包含以下的資訊:操作碼、開始的邏輯區塊位址編號(Logic Block Address,LBA Number)、LBA長度等。主機寫入命令和目的位址可合稱為前端參數集(Front-end Parameter Set)。一個LBA通常指向512B的資料,而一個主頁面(Host Page)包含八個連續LBA的資料。雖然本發明實施例描述了一個LBA的大小為512B且一個主頁面包含八個LBA的資料,所屬技術領域人員可依據系統的需要將一個LBA的大小修改為其他的長度(如256B、1KB、2KB等),和/或將一個主頁面修改為包含更多或更少數目的LBA的資料。
舉另一個例子來說,當第一處理單元134執行的韌體通過主機介面131接收到主機端110指示寫入64KB資料的主機寫入命令時,產生如下前置資訊:載具識別碼為“0x01”; 操作設定為“0x07”;櫃位旗標為“0xFFFF0000”(可稱為初始化的櫃位旗標),代表第0個到第15個櫃位的資料尚未就緒,而第16個到第31個櫃位的資料已經就緒(也隱含了可以忽略這些資料,不需要再處理)。接著,第一處理單元134將項目概要、主機寫入命令的資訊、以及RAM 136中用以儲存64KB資料的指定位址給路由引擎131。
舉另一個例子來說,當第一處理單元134執行的韌體在垃圾回收程序中搜集了 128KB資料時,產生如下的前置資訊:載具識別碼為“0x01”, 操作設定為“0x04”,代表這個項目只需要啟動後端處理階段;櫃位旗標為“0xFFFFFFFF”(可稱為初始化的櫃位旗標), 代表所有資料已經準備就緒。
第一處理單元134傳送以上所述的每個項目的初始的櫃位旗標給路由引擎132和加速器133,用於通知路由引擎132和加速器133關於每個所述項目中的哪些部分的資料需要在前端處理階段準備完成。
在實際將一個項目的前置資訊和前端參數集推入到路由引擎132之前,第一處理單元134還需要準備關聯於此項目的中端參數集和後端參數集。第一處理單元134執行的韌體可儲存最多不超過一個數目(例如64個)的項目的中端和後端處理階段的操作細節至加速器133中的靜態隨機存取記憶體(Static Random Access Memory)。中端參數集指出如何驅動RAID引擎135以完成中端處理階段的細節,可包含RAM 136中配置來儲存原始資料的來源位址、用來設定RAID引擎135的加密或編碼的參數、RAM 136中配置來儲存加密後或編碼後的結果的目的位址等。後端參數集指出如何驅動資料存取引擎137以完成後端處理階段的細節,可包含編程表和此編程表的索引。此編程表的索引可用來計算加速器133的SRAM中配置來儲存此編程表的位址。編程表包含RAM 136中配置來儲存來源資料的位址(可稱為來源位址)、一系列的閃存命令及其編程參數(例如命令類型、編程模式、欲寫入的實體位址等)。實體位址(可稱為目的地址)可包含通道編號、實體塊編號、實體頁面編號、區段編號等資訊。
因應一系列的主機寫入命令或者背景程序的執行,第一處理單元134產生多個項目的前置資訊、初始的櫃位旗標、前端參數集、中端參數和後端參數集。第一處理單元134將多個項目的前置資訊、初始的櫃位旗標和前端參數集傳給路由引擎132,以及將多個項目的前置資訊、初始的櫃位旗標、中端參數和後端參數集傳給加速器133之後,路由引擎132、加速器133和資料存取引擎137就能夠據以完成各式各樣的資料寫入操作,而不需要第一處理單元134監督整個資料寫入的資料流運作,以及在資料流運作的過程中等待主機介面131、RAID引擎135和資料存取引擎137的狀態回覆。換句話說,第一處理單元134在資料寫入的過程中不會直接驅動主機介面131、RAID引擎135和資料存取引擎137以完成如上所述的前端、中端和後端處理階段的操作,而是通過路由引擎132和加速器133來完成對主機介面131、RAID引擎135和資料存取引擎137的驅動。這些節省下的時間和運算資源可以讓第一處理單元134執行其他的任務,提升系統的整體效能。之後,第一處理單元134每隔一段時間可從RAM 136中的指定位址讀取每個項目的執行狀態,或者詢問路由引擎132和/或加速器133以獲取每個項目的執行狀態。
路由引擎132從第一處理單元134接收到一個項目的操作設定和前端參數集,操作設定指出前端處理階段、中端處理階段和後端處理階段中的每一個是否需要啟動的資訊。當路由引擎132依據操作設定判定需要啟動前端處理階段時,依據前端參數集驅動主機介面131,使得主機介面131從主機端110獲取資料,並且通過共享匯流排架構將獲取的資料儲存至隨機存取記憶體136的指定位址。
參考圖5所示的路由引擎132的方塊圖,路由引擎132包含狀態佇列510、控制器520和啟動佇列530,控制器520可使用通用處理器或者專屬電路實施,並且狀態佇列510和啟動佇列530可實施在SRAM中預先配置的空間。路由引擎132可通過高級高性能(Advanced High-Performance,AHB)匯流排和第一處理單元134進行一系列的訊號交互。如果存在任何項目(也就是虛擬載具)需要通過主機介面131從主機端110獲取資料,第一處理單元134中執行的韌體將項目概要(包含初始化的櫃位旗標)和前端參數集推入狀態佇列510,用於指示路由引擎132如何驅動主機介面131以獲取指定的資料並儲存到RAM 136中的指定位址。前端參數集指出主機資料的邏輯位址範圍(可使用起始LBA編號和LBA長度表示),以及RAM 136中儲存主機資料的指定位置。
另參考圖6所示的由控制器520執行的前端處理階段的方法流程圖,此方法會反覆執行一個外迴圈(從步驟S610至S670)和一個內迴圈(從步驟S630至S660)。大迴圈的每次反覆都是由控制器520從狀態佇列510推出一個項目開始(步驟S610),接著依據項目中的操作設定判斷此項目的資料是否需要經過前端處理階段(步驟S620)。如果是(步驟S620中“是”的路徑),開始執行小迴圈,用於依據項目的內容驅動(或啟動)主機介面131以從主機端110獲取指定邏輯位址的主機資料,並且儲存所獲取的主機資料到RAM 136中的指定位址(步驟S630)。需要注意的是,為了獲得更好的效能,排隊中的項目的啟動順序可能與它們到達狀態佇列510的時間順序不一致。也就是說,較早到達狀態佇列510的項目,並不一定是較早被控制器520處理的項目。換句話說,在控制器520驅動主機介面131以完成一個項目的前端參數集所指示的操作的期間,狀態佇列510中可能還儲存著更早到達的項目尚未被處理。
由於控制器520可能以多個批次來完成一個項目的主機資料的獲取,每次只要有任何主頁面的(或者是任何LBA區間的)主機資料已經成功的儲存到RAM 136中的指定位置後(步驟S630),控制器520更新櫃位旗標以反映主機介面131的執行狀態(步驟S640),並且將前置資訊和更新後的櫃位旗標推入啟動佇列530,用於讓加速器133可據以決定是否啟動後續處理階段的操作(步驟S650)。舉例來說,推出的項目紀錄了如下項目概要:載具識別碼為“0x01”; 操作設定為“0x07”;和櫃位旗標為“0xFFFF0000”,並且控制器520使用兩個批次來驅動主機介面131以完成整個64KB資料的讀取。在第一個批次的32KB資料的執行成功後,控制器520更新櫃位旗標成為“0xFFFF00FF”,並且將更新後的項目概要(包含載具識別碼 “0x01”; 操作設定“0x07”;和櫃位旗標“0xFFFF00FF”)推入啟動佇列530。在第二個批次的32KB資料的執行成功後,控制器520更新櫃位旗標成為“0xFFFFFF00”,並且將更新後的項目概要(包含載具識別碼 “0x01”; 操作設定“0x07”;和櫃位旗標為“0xFFFFFF00”)推入啟動佇列530。
如果項目中的操作設定指出此項目的資料不需要經過前端處理階段(步驟S620中“否”的路徑),控制器520直接將原始的項目概要推入啟動佇列530(步驟S670)。
每次當控制器520原始的或者更新後的項目概要推入啟動佇列530時,可代表控制器520通知加速器133相應項目的啟動訊息。
加速器從第一處理單元134接收到一個項目的操作設定、中端參數集和後端參數集,操作設定指出前端處理階段、中端處理階段和後端處理階段中的每一個是否需要啟動的資訊。當加速器133從路由引擎132接收到此項目的啟動訊息,以及當加速器133依據操作設定判定需要啟動中端處理階段時,依據中端參數集驅動RAID引擎135,使得RAID引擎135通過所述共享匯流排架構從RAM 136的指定位址獲取資料,加密獲取的資料或者依據獲取的多個頁面的資料產生奇偶校驗頁面的資料。接著,當加速器133依據操作設定判定此寫入項目不需要啟動中端處理階段或者是此寫入項目的中端處理階段已經執行完成時,以及當加速器133依據操作設定判定需要啟動後端處理階段時,依據後端參數集驅動資料存取引擎137,使得資料存取引擎137通過共享匯流排架構從RAM 136的指定位址獲取資料,並且將獲取的資料寫入閃存模組150的指定位址。
參考圖7所示的加速器133的方塊圖,加速器133包含控制器710、執行表720、中端參數集730、後端參數集740和編程表750,控制器710可使用通用處理器或者專屬電路實施,並且執行表720、中端參數集730、後端參數集740和編程表750可實施在加速器133的SRAM中預先配置的空間。加速器133可通過高級高性能匯流排和第一處理單元134進行一系列的訊號交互。執行表720儲存多個項目(也就是虛擬載具)的項目概要,執行表720的內容由第一處理單元134填寫。執行表720的範例如表1所示:
表1
第一處理單元134依據項目的執行順序依序填寫項目概要(包含前置資訊和櫃位旗標)。例如,第一處理單元134分別依序填入第10個到第13個項目的項目概要到執行表720中的第0項(entry#0)到第3項(entry#3)。第10個項目的項目概要包含相應的前置資訊(leadInfo#10)和櫃位旗標(cargoFlag#10),第11個項目的項目概要包含相應的前置資訊(leadInfo#11)和櫃位旗標(cargoFlag#11),依此類推。雖然啟動佇列530中的項目的推入順序不一定是第一處理單元134原來推入到狀態佇列510的順序,控制器710必須按照執行表720中的儲存順序來執行項目。也就是說,當第10個項目所需的中端處理階段和/或後端處理階段還沒有完成時,控制器710不能為第11個到第13個項目中的任何一個驅動RAID引擎135和資料存取引擎137。
項目編號 | 前置資訊 | 櫃位旗標 |
entry#0 | leadInfo#10 | cargoFlag#10 |
entry#1 | leadInfo#11 | cargoFlag#11 |
entry#2 | leadInfo#12 | cargoFlag#12 |
entry#3 | leadInfo#13 | cargoFlag#13 |
: | : | : |
entry#62 | N/A | N/A |
entry#63 | N/A | N/A |
如果存在任何項目需要通過RAID引擎135處理,第一處理單元134事先將相應的中端參數集730儲存至加速器133的SRAM中的指定位址,讓控制器710可據以設定RAID引擎135來完成此項目的中端處理操作。如果存在任何項目需要通過資料存取引擎137處理,第一處理單元134事先將相應的後端參數集740和編程表750儲存至加速器133的SRAM中的指定位址,讓資料存取引擎137中的第二處理單元138可據以驅動閃存介面139來完成此項目的後端處理操作。
另參考圖8所示的由控制器710執行的中端和後端處理階段的方法流程圖,此方法會反覆執行一個迴圈(從步驟S810至S880)。迴圈的每次反覆都是由控制器710從啟動佇列530推出一個項目開始(步驟S810),接著將推出項目中的櫃位旗標和執行表720中的相應櫃位旗標進行邏輯或運算,將計算結果更新回執行表720中的相應櫃位旗標(步驟S820),並且判斷執行表720中的第零個項目的櫃位旗標是否等於0xFFFFFFFF(步驟S830)。如果是(步驟S830中“是”的路徑),代表第零個項目的前端處理階段已經執行完成或者不需要執行前端處理階段,讓執行表720中的第零個項目進入中端處理階段(步驟S840至S860)。如果不是(步驟S830中“否”的路徑),代表第零個項目的前端處理階段尚未執行完成,控制器710繼續從啟動佇列530推出下一個項目來處理(步驟S810)。
舉例來說,假設執行表720儲存兩個項目。在時間點t0,第零個項目包含如下項目概要:載具識別碼為“0x10”; 操作設定為“0x07”;和櫃位旗標為“0x00000000”。 第一個項目包含如下項目概要:載具識別碼為“0x11”; 操作設定為“0x07”;和櫃位旗標為“0x00000000”。
在時間點t1,控制器710從啟動佇列530推出一個項目,包含如下項目概要載具識別碼為“0x10”; 操作設定為“0x07”;和櫃位旗標為“0x0000FFFF”(步驟S810)。控制器710將推出項目中的櫃位旗標“0x0000FFFF”和執行表720中的相應櫃位旗標(也就是第零個項目的櫃位旗標)“0x00000000”進行邏輯或運算,並且將計算後的結果為“0x0000FFFF”更新回執行表720中的相應櫃位旗標(步驟S820)。由於執行表720中的第零個項目的櫃位旗標“0x0000FFFF”不等於0xFFFFFFFF(步驟S830中“否”的路徑),因此流程並不能夠向下執行。
在時間點t2,控制器710從啟動佇列530推出一個項目,包含如下項目概要載具識別碼為“0x11”; 操作設定為“0x07”;和櫃位旗標為“0xFFFFFFFF”(步驟S810)。控制器710將推出項目中的櫃位旗標“0xFFFFFFFF”和執行表720中的相應櫃位旗標(也就是第一個項目的櫃位旗標)“0x00000000”進行邏輯或運算,並且將計算後的結果為“0xFFFFFFFF”更新回執行表720中的相應櫃位旗標(步驟S820)。由於執行表720中的第零個項目的櫃位旗標“0x0000FFFF”還是不等於0xFFFFFFFF(步驟S830中“否”的路徑),就算第一個項目已經準備好,流程還是並不能夠向下執行。
在時間點t3,控制器710從啟動佇列530推出一個項目,包含如下項目概要載具識別碼為“0x10”; 操作設定為“0x07”;和櫃位旗標為“0xFFFF0000”(步驟S810)。控制器710將推出項目中的櫃位旗標“0xFFFF0000”和執行表720中的相應櫃位旗標(也就是第零個項目的櫃位旗標)“0x0000FFFF”進行邏輯或運算,並且將計算後的結果為“0xFFFFFFFF”更新回執行表720中的相應櫃位旗標(步驟S820)。由於執行表720中的第零個項目的櫃位旗標“0xFFFFFFFF”等於0xFFFFFFFF(步驟S830中“是”的路徑),流程繼續進行第零個項目的中端處理階段(步驟S840至S860)。在這裡需要注意的是,當流程執行完後端處理階段時,控制器710會刪除執行表720中原來的第零個項目的資料,並且將執行表720中原來的第一個以及以後項目的資料向前移動一個項目。也就是說.更新後的執行表720的第零個項目中包含如下的概要資訊:載具識別碼為“0x11”; 操作設定為“0x07”;和櫃位旗標為“0xFFFFFFFF”。
在中端處理階段的一開始,控制器710通過項目中的操作設定判斷第零個項目的資料是否需要經過中端處理階段(步驟S840)。如果是(步驟S840中“是”的路徑),依據第零個項目的中端參數集730設定RAID引擎135,用於驅動RAID引擎135為第零個項目的資料完成指定的資料加密或資料編碼操作(步驟S850)。由於RAID引擎135的編碼需要花費一段時間,控制器710可每隔一段時間發出詢問(Polling)給RAID引擎135,並依據回覆的狀態判斷是否完成中端處理階段(步驟S860)。如果尚未完成中端處理階段(步驟S860中“否”的路徑),則繼續等待與詢問。如果完成中端處理階段(步驟S860中“是”的路徑),流程進入下個階段(也就是後端處理階段)(步驟S870和S880)。此外,如果不需要執行中端處理階段(步驟S840中“否”的路徑),流程直接進入下個階段(步驟S870和S880)。
RAID引擎135可依據加速器133發出的指令執行清除和編碼(Clear and Encode)、編碼(Encode)、結束編碼(Terminate Encode)、中斷(Terminate)、中斷後回復(Resume)等功能。當接收到清除和編碼指令時,RAID引擎135中的控制器通過共享匯流排從RAM 136的指定位址(可稱為來源位址)讀取多個主頁面(例如32個主頁面)的資料,並且以讀取的資料覆寫RAID引擎135中的SRAM所儲存的資料。當接收到編碼指令時,RAID引擎135中的控制器通過共享匯流排從RAM 136的指定位址讀取多個主頁面的資料,將讀取的資料和RAID引擎135中的SRAM所儲存的資料進行互斥或(Exclusive-OR)計算,並且將計算結果覆寫RAID引擎135中的SRAM所儲存的資料。當接收到結束編碼指令時,RAID引擎135中的控制器通過共享匯流排從RAM 136的指定位址讀取多個主頁面的資料,將讀取的資料和RAID引擎135中的SRAM所儲存的資料進行互斥或(Exclusive-OR)計算,將計算結果覆寫RAID引擎135中的SRAM所儲存的資料,並且將計算結果通過共享匯流排儲存到RAM 136的指定位址(可稱為目的位址)。
舉例來說,第一處理單元134可在執行表中儲存64個項目(其載具識別碼依序為“0x20”至“0x5F”)。第0個項目的中端參數集730包含清除和編碼指令,第1至第62個項目的中端參數集730包含編碼指令,並且第63個項目的中端參數集730包含結束編碼指令。於是,第一處理單元134可通過RAID引擎135執行這64個項目的指令來獲得相應主機資料的奇偶校驗頁面。
在後端處理階段的一開始,控制器710通過項目中的操作設定判斷第零個項目的資料是否需要經過後端處理階段(步驟S870)。如果是(步驟S870中“是”的路徑),控制器710依據第零個項目所關聯的後端參數集740發送訊息給第二處理單元138,用於完成指定的資料寫入操作(步驟S880)。如果不需要經過後端處理階段(步驟S870中“否”的路徑),控制器710繼續從啟動佇列530推出下一個項目來處理(步驟S810)。
控制器710發送給第二處理單元138的訊息中包含編程索引(Programming Index)和來源地址,編程索引指向加速器133的SRAM中的特定位址,而來源地址指向RAM 136中所儲存的欲寫入到閃存模組150的資料。第二處理單元138依據來源地址通過共享匯流排從RAM 136的指定地址讀取資料,依據編程索引從加速器133的SRAM讀取相應於第零個項目的編程表750,以及依據讀取的編程表750中的閃存命令及其編程參數驅動閃存介面139,用於將讀取的資料寫入閃存模組150中的指定實體位址。
在這裡需要注意的是,第一處理單元134負責整個閃存控制器130的運行,包含系統開機、系統關機、各種主機命令的操作排程和執行、背景操作的排程和執行、瞬間斷電回復(Sudden Power-Off Recovery,SPOR)的處理等等,而第二處理單元138主要負責和閃存模組150之間交互的任務,包含驅動閃存介面139來從閃存模組150的指定位址讀取資料,寫入資料到閃存模組150的指定位址,抹寫閃存模組150的指定實體塊等。
如上所述的設計能夠讓整個系統有彈性的組態資料流,舉例來說,表2顯示四個項目的資料寫入都需要經過前端、中端和後端的處理階段,並組態成並行執行的流水線。
表2
時間 | Carrier#0 | Carrier#1 | Carrier#2 | Carrier#3 |
t0 | 前端處理 | |||
t1 | 中端處理 | 前端處理 | ||
t2 | 後端處理 | 中端處理 | 前端處理 | |
t3 | 後端處理 | 中端處理 | 前端處理 | |
t4 | 後端處理 | 中端處理 | ||
t5 | 後端處理 |
表3顯示第0至第2個項目的資料寫入需要經過前端和中端處理階段,第3個項目的資料寫入都需要經過前端、中端和後端處理階段,並組態成並行執行的流水線。
表3
時間 | Carrier#0 | Carrier#1 | Carrier#2 | Carrier#3 |
t0 | 前端處理 | |||
t1 | 中端處理 | 前端處理 | ||
t2 | 中端處理 | 前端處理 | ||
t3 | 中端處理 | 前端處理 | ||
t4 | 中端處理 | |||
t5 | 後端處理 |
表4顯示第0至第1個項目的資料寫入需要經過前端和中端處理階段,第2個項目的資料寫入只需要經過中端處理階段,第3個項目的資料寫入需要經過中端和後端處理階段,並組態成並行執行的流水線。
表4
時間 | Carrier#0 | Carrier#1 | Carrier#2 | Carrier#3 |
t0 | 前端處理 | |||
t1 | 中端處理 | 前端處理 | ||
t2 | 中端處理 | |||
t3 | 中端處理 | |||
t4 | 中端處理 | |||
t5 | 後端處理 |
表5顯示第0至第2個項目的資料寫入需要經過前端處理階段,第3個項目的資料寫入需要經過前端和中端處理階段,並組態成並行執行的流水線。
表5
時間 | Carrier#0 | Carrier#1 | Carrier#2 | Carrier#3 |
t0 | 前端處理 | |||
t1 | 前端處理 | |||
t2 | 前端處理 | |||
t3 | 前端處理 | |||
t4 | 中端處理 |
本發明所述的方法中的全部或部分步驟可以計算機指令實現,例如儲存裝置中的韌體轉換層(Firmware Translation Layer,FTL)、特定硬體的驅動程式等。此外,也可實現於其他類型程式。所屬技術領域具有通常知識者可將本發明實施例的方法撰寫成計算機指令,為求簡潔不再加以描述。依據本發明實施例方法實施的計算機指令可儲存於適當的電腦可讀取媒體,例如DVD、CD-ROM、USB碟、硬碟,亦可置於可通過網路(例如,網際網路,或其他適當載具)存取的網路伺服器。
雖然圖1、圖2、圖5、圖7中包含了以上描述的元件,但不排除在不違反發明的精神下,使用更多其他的附加元件,已達成更佳的技術效果。此外,雖然圖3、圖6、圖8的流程圖採用指定的順序來執行,但是在不違反發明精神的情況下,熟習此技藝人士可以在達到相同效果的前提下,修改這些步驟間的順序,所以,本發明並不侷限於僅使用如上所述的順序。此外,熟習此技藝人士亦可以將若干步驟整合為一個步驟,或者是除了這些步驟外,循序或平行地執行更多步驟,本發明亦不因此而侷限。
雖然本發明使用以上實施例進行說明,但需要注意的是,這些描述並非用以限縮本發明。相反地,此發明涵蓋了熟習此技藝人士顯而易見的修改與相似設置。所以,申請權利要求範圍須以最寬廣的方式解釋來包含所有顯而易見的修改與相似設置。
10:電子裝置
110:主機端
130:閃存控制器
131:主機介面
132:路由引擎
133:加速器
134:第一處理單元
135:RAID引擎
136:隨機存取記憶體
137:資料存取引擎
138:第二處理單元
139:閃存介面
150:閃存模組
151:介面
153#0~153#15:NAND閃存單元
CH#0~CH#3:通道
CE#0~CE#3:致能訊號
S310~S360:方法步驟
410:前置資訊
420:櫃位旗標
510:狀態佇列
520:控制器
530:啟動佇列
S610~S670:方法步驟
710:控制器
720:執行表
730:中端參數集
740:後端參數集
750:編程表
S810~S880:方法步驟
圖1為依據本發明實施例的電子裝置的系統架構圖。
圖2為依據本發明實施例的閃存模組的示意圖。
圖3為依據本發明實施例的資料寫入流程圖。
圖4為依據本發明實施例的項目概要示意圖。
圖5為依據本發明實施例的路由引擎的方塊圖。
圖6為依據本發明實施例的前端處理階段的方法流程圖。
圖7為依據本發明實施例的加速器的方塊圖。
圖8為依據本發明實施例的中端和後端處理階段的方法流程圖。
10:電子裝置
110:主機端
130:閃存控制器
131:主機介面
132:路由引擎
133:加速器
134:第一處理單元
135:RAID引擎
136:隨機存取記憶體
137:資料存取引擎
138:第二處理單元
139:閃存介面
150:閃存模組
Claims (15)
- 一種寫入資料到閃存記憶體的方法,由閃存控制器的主要處理單元執行,所述方法包含: 為資料寫入的每個項目產生前端參數集、中端參數集和後端參數集,其中,所述前端參數集包含主機寫入命令的資訊以及隨機存取記憶體中配置來儲存從主機端所獲取的資料的第一位址,所述中端參數集包含所述隨機存取記憶體中配置來儲存原始資料的第二位址和儲存加密後或編碼後的結果的第三位址,以及用來設定獨立磁碟冗餘陣列引擎的參數,所述後端參數集包含編程表和所述編程表的索引,所述編程表中包含所述隨機存取記憶體中配置來儲存來源資料的第四位址; 傳送每個所述項目的所述前端參數集給路由引擎,使得所述路由引擎依據所述前端參數集的內容驅動主機介面,用以從所述主機端獲取資料,以及將獲取的資料儲存至所述隨機存取記憶體中的所述第一位址; 傳送每個所述項目的所述中端參數集給加速器,使得所述加速器依據所述中端參數集的內容驅動所述獨立磁碟冗餘陣列引擎,用以從所述隨機存取記憶體中的所述第二位址獲取原始資料,加密所述原始資料或者依據多個頁面的所述原始資料產生奇偶校驗頁面的資料,以及將加密後的或者編碼後的結果儲存至所述隨機存取記憶體中的所述第三位址;以及 傳送每個所述項目的所述後端參數集給所述加速器,使得所述加速器依據所述後端參數集的內容驅動資料存取引擎,用以從所述隨機存取記憶體中的所述第四位址獲取所述來源資料,將所述來源資料寫入到閃存模組的指定實體位址。
- 如請求項1所述的寫入資料到閃存記憶體的方法,其中,所述主要處理單元在資料寫入的過程中不會直接驅動所述主機介面、所述獨立磁碟冗餘陣列引擎和所述資料存取引擎。
- 如請求項1所述的寫入資料到閃存記憶體的方法,包含: 傳送相應於每個所述項目的載具識別碼給所述路由引擎和所述加速器,用於協同每個所述項目在所述路由引擎和所述加速器之間的運行。
- 如請求項1所述的寫入資料到閃存記憶體的方法,包含: 傳送每個所述項目是否需要經過前端處理階段的資訊給所述路由引擎,用於讓所述路由引擎判斷是否為每個所述項目驅動所述主機介面。
- 如請求項1所述的寫入資料到閃存記憶體的方法,包含: 傳送每個所述項目是否需要經過中端處理階段的資訊給所述加速器,用於讓所述加速器判斷是否為每個所述項目驅動所述獨立磁碟冗餘陣列引擎;以及 傳送每個所述項目是否需要經過後端處理階段的資訊給所述加速器,用於讓所述加速器判斷是否為每個所述項目驅動所述資料存取引擎。
- 如請求項5所述的寫入資料到閃存記憶體的方法,包含: 將多個所述項目的所述中端參數集和所述後端參數集依照指定順序儲存在所述加速器中的執行表,使得所述加速器依照所述指定順序為多個所述項目啟動所述中端處理階段和/和後端處理階段。
- 如請求項6所述的寫入資料到閃存記憶體的方法,包含: 將每個所述項目的多個初始的櫃位旗標傳送給所述加速器,用於通知所述加速器關於每個所述項目中的哪些部分的資料需要在前端處理階段準備完成。
- 一種電腦程式產品,包含程式碼,其中,當閃存控制器的主要處理單元執行所述程式碼時,實施如請求項1至7中任一項所述的寫入資料到閃存記憶體的方法。
- 一種寫入資料到閃存記憶體的裝置,包含: 路由引擎,耦接主機介面; 加速器,耦接獨立磁碟冗餘陣列引擎和資料存取引擎;以及 主要處理單元,耦接所述路由引擎和所述加速器,用於為資料寫入的每個項目產生前端參數集、中端參數集和後端參數集,其中,所述前端參數集包含主機寫入命令的資訊以及隨機存取記憶體中配置來儲存從主機端所獲取的資料的第一位址,所述中端參數集包含所述隨機存取記憶體中配置來儲存原始資料的第二位址和儲存加密後或編碼後的結果的第三位址,以及用來設定所述獨立磁碟冗餘陣列引擎的參數,所述後端參數集包含編程表和所述編程表的索引,所述編程表中包含所述隨機存取記憶體中配置來儲存來源資料的第四位址;傳送每個所述項目的所述前端參數集給路由引擎,使得所述路由引擎依據所述前端參數集的內容驅動所述主機介面以從所述主機端獲取資料,以及將獲取的資料儲存至所述隨機存取記憶體中的所述第一位址;傳送每個所述項目的所述中端參數集給所述加速器,使得所述加速器依據所述中端參數集的內容從驅動所述獨立磁碟冗餘陣列引擎,用以所述隨機存取記憶體中的所述第二位址獲取原始資料,加密所述原始資料或者依據多個頁面的所述原始資料產生奇偶校驗頁面的資料,以及將加密後的或者編碼後的結果儲存至所述隨機存取記憶體中的所述第三位址;以及傳送每個所述項目的所述後端參數集給所述加速器,使得所述加速器依據所述後端參數集的內容驅動所述資料存取引擎,用以從所述隨機存取記憶體中的所述第四位址獲取所述來源資料,將所述來源資料寫入到閃存模組的指定實體位址。
- 如請求項9所述的寫入資料到閃存記憶體的裝置,其中,所述主要處理單元在資料寫入的過程中不會直接驅動所述主機介面、所述獨立磁碟冗餘陣列引擎和所述資料存取引擎。
- 如請求項9所述的寫入資料到閃存記憶體的裝置,其中,所述主要處理單元用於傳送相應於每個所述項目的載具識別碼給所述路由引擎和所述加速器,用於協同每個所述項目在所述路由引擎和所述加速器之間的運行。
- 如請求項9所述的寫入資料到閃存記憶體的裝置,其中,所述主要處理單元用於傳送每個所述項目是否需要經過前端處理階段的資訊給所述路由引擎,用於讓所述路由引擎判斷是否為每個所述項目驅動所述主機介面。
- 如請求項9所述的寫入資料到閃存記憶體的裝置,其中,所述主要處理單元用於傳送每個所述項目是否需要經過中端處理階段的資訊給所述加速器,用於讓所述加速器判斷是否為每個所述項目驅動所述獨立磁碟冗餘陣列引擎;以及傳送每個所述項目是否需要經過後端處理階段的資訊給所述加速器,用於讓所述加速器判斷是否為每個所述項目驅動所述資料存取引擎。
- 如請求項13所述的寫入資料到閃存記憶體的裝置,其中,所述主要處理單元用於將多個所述項目的所述中端參數集和所述後端參數集依照指定順序儲存在所述加速器中的執行表,使得所述加速器依照所述指定順序為多個所述項目啟動所述中端處理階段和/和後端處理階段。
- 如請求項14所述的寫入資料到閃存記憶體的裝置,其中,所述主要處理單元用於將每個所述項目的多個初始的櫃位旗標傳送給所述加速器,用於通知所述加速器關於每個所述項目中的哪些部分的資料需要在前端處理階段準備完成。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163249702P | 2021-09-29 | 2021-09-29 | |
US63/249,702 | 2021-09-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202314516A true TW202314516A (zh) | 2023-04-01 |
TWI805302B TWI805302B (zh) | 2023-06-11 |
Family
ID=85769324
Family Applications (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW111112364A TWI821965B (zh) | 2021-09-29 | 2022-03-31 | 編碼歷程資訊的存取方法及電腦程式產品及裝置 |
TW111112706A TWI787110B (zh) | 2021-09-29 | 2022-04-01 | 寫入資料到閃存記憶體的方法及裝置 |
TW111112709A TWI799221B (zh) | 2021-09-29 | 2022-04-01 | 寫入資料到閃存記憶體的方法及裝置 |
TW111112708A TWI801191B (zh) | 2021-09-29 | 2022-04-01 | 寫入資料到閃存記憶體的方法及裝置 |
TW111112707A TWI805302B (zh) | 2021-09-29 | 2022-04-01 | 寫入資料到閃存記憶體的方法及電腦程式產品及裝置 |
Family Applications Before (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW111112364A TWI821965B (zh) | 2021-09-29 | 2022-03-31 | 編碼歷程資訊的存取方法及電腦程式產品及裝置 |
TW111112706A TWI787110B (zh) | 2021-09-29 | 2022-04-01 | 寫入資料到閃存記憶體的方法及裝置 |
TW111112709A TWI799221B (zh) | 2021-09-29 | 2022-04-01 | 寫入資料到閃存記憶體的方法及裝置 |
TW111112708A TWI801191B (zh) | 2021-09-29 | 2022-04-01 | 寫入資料到閃存記憶體的方法及裝置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11966604B2 (zh) |
CN (5) | CN115878020A (zh) |
TW (5) | TWI821965B (zh) |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8027194B2 (en) * | 1988-06-13 | 2011-09-27 | Samsung Electronics Co., Ltd. | Memory system and method of accessing a semiconductor memory device |
US9582431B2 (en) * | 2010-03-22 | 2017-02-28 | Seagate Technology Llc | Storage address space to NVM address, span, and length mapping/converting |
TWI432987B (zh) | 2011-03-15 | 2014-04-01 | Phison Electronics Corp | 記憶體儲存裝置、其記憶體控制器與病毒掃描方法 |
US20130318285A1 (en) * | 2012-05-23 | 2013-11-28 | Violin Memory Inc | Flash memory controller |
US8661301B1 (en) * | 2012-09-07 | 2014-02-25 | Storart Technology Co. Ltd. | Method for dodging bad page and bad block caused by suddenly power off |
US9383795B2 (en) * | 2013-03-10 | 2016-07-05 | Seagate Technololgy Llc | Storage device power failure infrastructure |
WO2016038710A1 (ja) * | 2014-09-11 | 2016-03-17 | 株式会社日立製作所 | ストレージシステム |
CN105653609B (zh) * | 2015-12-24 | 2019-08-09 | 中国建设银行股份有限公司 | 基于内存的数据处理方法及装置 |
TWI614759B (zh) * | 2016-04-27 | 2018-02-11 | 慧榮科技股份有限公司 | 存取快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 |
CN112463433B (zh) * | 2016-04-27 | 2024-03-29 | 慧荣科技股份有限公司 | 存取闪存模块的方法及相关的闪存控制器与记忆装置 |
CN109308280B (zh) * | 2017-07-26 | 2021-05-18 | 华为技术有限公司 | 数据处理方法和相关设备 |
TWI721565B (zh) * | 2017-10-20 | 2021-03-11 | 慧榮科技股份有限公司 | 儲存裝置以及其介面晶片 |
KR20190063054A (ko) * | 2017-11-29 | 2019-06-07 | 삼성전자주식회사 | 메모리 시스템 및 이의 동작 방법 |
TWI661307B (zh) | 2017-12-06 | 2019-06-01 | 慧榮科技股份有限公司 | 資料儲存裝置、主機裝置、以及資料寫入方法 |
CN109901782A (zh) * | 2017-12-07 | 2019-06-18 | 上海宝存信息科技有限公司 | 数据储存装置与数据储存方法 |
GB2569358B (en) * | 2017-12-15 | 2020-01-29 | Advanced Risc Mach Ltd | Code realms |
EP3726364B1 (en) * | 2017-12-28 | 2022-07-27 | Huawei Technologies Co., Ltd. | Data write-in method and solid-state drive array |
US10599548B2 (en) * | 2018-06-28 | 2020-03-24 | Intel Corporation | Cache monitoring |
TWI664634B (zh) | 2018-08-17 | 2019-07-01 | 慧榮科技股份有限公司 | 快閃記憶體控制器、管理快閃記憶體模組的方法及相關的電子裝置 |
TWI703501B (zh) * | 2018-08-23 | 2020-09-01 | 慧榮科技股份有限公司 | 具有分散式信箱架構的多處理器系統及其溝通方法 |
TWI677879B (zh) * | 2018-09-03 | 2019-11-21 | 慧榮科技股份有限公司 | 資料儲存裝置與資料處理方法 |
TWI703438B (zh) | 2018-09-11 | 2020-09-01 | 慧榮科技股份有限公司 | 映射表更新方法 |
CN112823331B (zh) * | 2018-10-10 | 2024-03-29 | 阿里巴巴集团控股有限公司 | 用于具有较细粒度的并行多租户ssd中的数据恢复的系统和方法 |
US10909012B2 (en) * | 2018-11-12 | 2021-02-02 | H3 Platform, Inc. | System having persistent memory |
US11003373B2 (en) * | 2019-06-28 | 2021-05-11 | Western Digital Technologies, Inc. | Systems and methods for managing physical-to- logical address information |
CN110688242A (zh) * | 2019-09-10 | 2020-01-14 | 苏州浪潮智能科技有限公司 | SSD异常掉电后恢复block信息的方法及相关组件 |
CN112905854A (zh) * | 2021-03-05 | 2021-06-04 | 北京中经惠众科技有限公司 | 数据处理方法、装置、计算设备及存储介质 |
-
2022
- 2022-03-31 TW TW111112364A patent/TWI821965B/zh active
- 2022-03-31 CN CN202210333516.2A patent/CN115878020A/zh active Pending
- 2022-04-01 CN CN202210339875.9A patent/CN115878023A/zh active Pending
- 2022-04-01 CN CN202210338471.8A patent/CN115878021A/zh active Pending
- 2022-04-01 TW TW111112706A patent/TWI787110B/zh active
- 2022-04-01 TW TW111112709A patent/TWI799221B/zh active
- 2022-04-01 TW TW111112708A patent/TWI801191B/zh active
- 2022-04-01 TW TW111112707A patent/TWI805302B/zh active
- 2022-04-01 CN CN202210339320.4A patent/CN115878022A/zh active Pending
- 2022-04-01 CN CN202210339882.9A patent/CN115878024A/zh active Pending
- 2022-08-02 US US17/879,182 patent/US11966604B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
TWI821965B (zh) | 2023-11-11 |
CN115878023A (zh) | 2023-03-31 |
TWI801191B (zh) | 2023-05-01 |
TWI787110B (zh) | 2022-12-11 |
TWI805302B (zh) | 2023-06-11 |
CN115878021A (zh) | 2023-03-31 |
CN115878024A (zh) | 2023-03-31 |
US11966604B2 (en) | 2024-04-23 |
CN115878022A (zh) | 2023-03-31 |
TW202314528A (zh) | 2023-04-01 |
TW202314529A (zh) | 2023-04-01 |
TW202314515A (zh) | 2023-04-01 |
CN115878020A (zh) | 2023-03-31 |
TWI799221B (zh) | 2023-04-11 |
TW202314517A (zh) | 2023-04-01 |
US20230103723A1 (en) | 2023-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112035381B (zh) | 一种存储系统及存储数据处理方法 | |
CN111435292A (zh) | 利用自适应写缓冲区释放的存储介质编程 | |
US11574664B2 (en) | Parsing stream identifiers to determine data stream attributes | |
TWI506638B (zh) | 用於非揮發性半導體記憶體之介面管理控制系統及方法 | |
US20140108714A1 (en) | Apparatus and method for generating descriptors to transfer data to and from non-volatile semiconductor memory of a storage drive | |
KR102645983B1 (ko) | 오픈 채널 벡터 커맨드 실행 | |
CN115113799A (zh) | 主机命令的执行方法及装置 | |
TWI805302B (zh) | 寫入資料到閃存記憶體的方法及電腦程式產品及裝置 | |
TWI797905B (zh) | 驅動獨立磁碟冗餘陣列引擎的裝置及方法 | |
CN110633225B (zh) | 实体存储对照表产生装置及方法 | |
WO2023056687A1 (zh) | 一种固态硬盘及其数据操作方法、装置及电子设备 | |
CN116340047A (zh) | 驱动独立磁碟冗余数组引擎的方法和装置 | |
TWI835027B (zh) | 更新主機與閃存位址對照表的方法及電腦程式產品及裝置 | |
TWI818762B (zh) | 排程和執行主機資料更新命令的方法及電腦程式產品及裝置 | |
TWI805505B (zh) | 排程和執行主機資料更新命令的方法及電腦程式產品及裝置 | |
TWI822517B (zh) | 執行主機寫入命令的方法及電腦程式產品及裝置 | |
US11972150B2 (en) | Method and non-transitory computer-readable storage medium and apparatus for programming data into flash memory through dedicated acceleration hardware | |
TWI661302B (zh) | 實體儲存對照表產生裝置及方法以及電腦程式產品 | |
US11860775B2 (en) | Method and apparatus for programming data into flash memory incorporating with dedicated acceleration hardware | |
TWI774277B (zh) | 主機命令的執行方法及裝置 | |
TWI822516B (zh) | 執行主機寫入命令的方法及電腦程式產品及裝置 | |
US20230094250A1 (en) | Method and apparatus for programming data into flash memory | |
TWI705329B (zh) | 實體儲存對照表產生裝置及方法以及電腦程式產品 | |
TW202340939A (zh) | 因應主機丟棄命令的資料存取方法及產品電腦程式及裝置 | |
CN116149540A (zh) | 更新主机与闪存地址对照表的方法和计算机可读取存储介质和装置 |