亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

OS和應用程序的透明存儲器壓縮技術的制作方法

文檔序號:11653882閱讀:323來源:國知局
OS和應用程序的透明存儲器壓縮技術的制造方法與工藝

相關申請的交叉引用

本申請要求2016年3月21日提交的第62/311,282號美國臨時申請、2016年12月6日提交的第15/370,890號美國非臨時申請、2016年1月19日提交的第62/280,430號美國臨時申請以及2016年12月6日提交的第15/370,858號美國非臨時申請的優(yōu)先權,其全部內(nèi)容通過引用合并于本文。

本公開的示例性實施例涉及一種存儲系統(tǒng)及其操作方法。



背景技術:

計算機環(huán)境范式已經(jīng)轉(zhuǎn)變?yōu)榭梢噪S時隨地使用的普適計算系統(tǒng)。由于這個事實,諸如移動電話、數(shù)字照相機和筆記本電腦的便攜式電子設備的使用已經(jīng)迅速增加。這些便攜式電子設備通常使用具有存儲器件的存儲系統(tǒng),即,數(shù)據(jù)儲存設備。數(shù)據(jù)儲存設備用作便攜式電子設備的主存儲器件或輔助存儲器件。

由于它們不具有移動部件,因此使用存儲器件的數(shù)據(jù)儲存設備提供良好的穩(wěn)定性、耐久性、高信息訪問速度以及低功耗。具有這些優(yōu)點的數(shù)據(jù)儲存設備的示例包括通用串行總線(usb)存儲器件、具有各種接口的存儲卡以及固態(tài)驅(qū)動器(ssd)。

快速存儲器是計算系統(tǒng)中的關鍵資源,急需提高的存儲器容量。存儲器壓縮被用于增加存儲器容量,并且在存儲系統(tǒng)、方法、設備和過程中需要改進的存儲器壓縮。



技術實現(xiàn)要素:

本發(fā)明的方面包括存儲系統(tǒng)。該存儲系統(tǒng)可以包括存儲儲存器、軟件頁重新映射內(nèi)核驅(qū)動器(sprkd)和控制器,存儲儲存器包括快速存儲器部分和慢速存儲器部分,sprkd適用于:截獲由操作系統(tǒng)產(chǎn)生的存儲器管理命令;至少一個:在執(zhí)行操作系統(tǒng)存儲器管理命令之前,壓縮要從快速存儲器部分寫入到慢速存儲器部分的數(shù)據(jù),以及在執(zhí)行操作系統(tǒng)存儲器管理命令之前,解壓縮要從慢速存儲器部分寫入到快速存儲器部分的數(shù)據(jù);以及傳輸壓縮數(shù)據(jù)以寫入慢速存儲器部分,或者傳輸解壓縮數(shù)據(jù)以寫入快速存儲器部分,控制器適用于在通過sprkd傳輸之后執(zhí)行存儲器管理命令,使得數(shù)據(jù)的壓縮或解壓縮對操作系統(tǒng)而言透明地執(zhí)行。

本發(fā)明的其他方面包括方法。該方法可以包括:用軟件頁重新映射內(nèi)核驅(qū)動器(sprkd)截獲由操作系統(tǒng)產(chǎn)生的存儲器管理命令;至少一個:在執(zhí)行操作系統(tǒng)存儲器管理命令之前,用sprkd壓縮要從存儲儲存器的快速存儲器部分寫入存儲儲存器的慢速存儲器部分的數(shù)據(jù),以及在執(zhí)行操作系統(tǒng)存儲器管理命令之前,用sprkd解壓縮要從慢速存儲器部分寫入到快速存儲器部分的數(shù)據(jù);以及用sprkd傳輸壓縮數(shù)據(jù)以寫入慢速存儲器部分,或者傳輸解壓縮數(shù)據(jù)以寫入快速存儲器部分;以及在通過sprkd傳輸之后,用控制器執(zhí)行存儲器管理命令,使得數(shù)據(jù)的壓縮或解壓縮對操作系統(tǒng)而言透明地執(zhí)行。

本發(fā)明的額外方面包括存儲器件。該存儲器件可以包括存儲儲存器、軟件頁重新映射內(nèi)核驅(qū)動器(sprkd)和控制器,存儲儲存器包括快速存儲器部分和慢速存儲器部分,sprkd被配置為:截獲由操作系統(tǒng)產(chǎn)生的存儲器管理命令;至少一個:在執(zhí)行操作系統(tǒng)存儲器管理命令之前,壓縮要從快速存儲器部分寫入到慢速存儲器部分的數(shù)據(jù),以及在執(zhí)行操作系統(tǒng)存儲器管理命令之前,解壓縮要從慢速存儲器部分寫入到快速存儲器部分的數(shù)據(jù);以及傳輸壓縮數(shù)據(jù)以寫入到慢速存儲器部分,或者傳輸解壓縮數(shù)據(jù)以寫入到快速存儲器部分,控制器被配置為在通過sprkd傳輸之后執(zhí)行存儲器管理命令,使得數(shù)據(jù)的壓縮或解壓縮對操作系統(tǒng)而言透明地執(zhí)行。

附圖說明

圖1是示意性地圖示根據(jù)本發(fā)明的實施例的存儲系統(tǒng)的框圖。

圖2是圖示根據(jù)本發(fā)明的實施例的存儲系統(tǒng)的框圖。

圖3是圖示根據(jù)本發(fā)明的實施例的存儲器件的存儲塊的電路圖。

圖4是根據(jù)本發(fā)明的方面的具有用于壓縮和解壓縮的混合式存儲器的示例系統(tǒng)的示圖。

圖5是根據(jù)本發(fā)明的方面的具有用于壓縮和解壓縮的混合式存儲器的示例系統(tǒng)的示圖。

圖6是根據(jù)本發(fā)明的方面的具有用于壓縮和解壓縮的混合式存儲器的示例系統(tǒng)的示圖。

圖7是根據(jù)本發(fā)明的方面的用于頁重新映射的示例系統(tǒng)的示圖。

圖8是根據(jù)本發(fā)明的方面的用于頁重新映射和壓縮/解壓縮的cpu系統(tǒng)/過程的示圖。

圖9是根據(jù)本發(fā)明的方面的用于頁重新映射和壓縮/解壓縮的方法中的步驟的流程圖。

具體實施方式

下面將參照附圖來更詳細地描述各種實施例。然而,本發(fā)明可以以不同的形式來實施,而不應當被解釋為局限于本文中所闡述的實施例。相反地,提供這些實施例使得本公開將是徹底和完整的,這些實施例將向本領域技術人員充分地傳達本發(fā)明的范圍。貫穿本公開,在本發(fā)明的各種附圖和實施例中,相同的附圖標記指代相同的部件。

本發(fā)明可以以多種方式實現(xiàn),包括作為過程;裝置;系統(tǒng);物質(zhì)的組成;在計算機可讀儲存介質(zhì)上實現(xiàn)的計算機程序產(chǎn)品;和/或處理器,諸如適用于運行儲存在耦接到處理器的存儲器上和/或由耦接到處理器的存儲器提供的指令的處理器。在本說明書中,這些實施方式或本發(fā)明可以采取的任何其他形式可以被稱為技術。一般而言,所公開的過程的步驟的順序可以在本發(fā)明的范圍內(nèi)改變。除非另有說明,否則被描述為適用于執(zhí)行任務的組件(諸如處理器或存儲器)可以被實現(xiàn)為臨時適用于在給定時間執(zhí)行任務的通用組件或被制造為執(zhí)行任務的特定組件。如本文所用,術語“處理器”是指適用于處理數(shù)據(jù)(諸如計算機程序指令)的一個或多個設備、電路和/或處理核。

下面與圖示本發(fā)明的原理的附圖一起來提供對本發(fā)明的一個或更多個實施例的詳細描述。結(jié)合這樣的實施例來描述本發(fā)明,但是本發(fā)明不限于任何實施例。本發(fā)明的范圍僅由權利要求限制,本發(fā)明包括許多替代、修改和等同。在下面的描述中,闡述了大量具體細節(jié)以提供對本發(fā)明的透徹理解。這些細節(jié)被提供是為了示例性的目的,本發(fā)明可以在無這些具體細節(jié)的一些或全部的情況下根據(jù)權利要求來實施。為了清楚的目的,未詳細描述與本發(fā)明相關的技術領域中公知的技術材料,以免不必要地混淆本發(fā)明。

圖1是示意性地圖示根據(jù)本發(fā)明的實施例的存儲系統(tǒng)10的框圖。

參考圖1,存儲系統(tǒng)10可以包括存儲器控制器100和半導體存儲器件200。

存儲器控制器100可以控制半導體存儲器件200的整體操作。

半導體存儲器件200可以在存儲器控制器100的控制下執(zhí)行一個或更多個擦除操作、編程操作和讀取操作。半導體存儲器件200可以通過輸入/輸出線來接收命令cmd、地址addr和數(shù)據(jù)data。半導體存儲器件200可以通過電源線來接收電力pwr以及通過控制線來接收控制信號ctrl。控制信號可以包括命令鎖存使能(cle)信號、地址鎖存使能(ale)信號、芯片使能(ce)信號、寫入使能(we)信號、讀取使能(re)信號等。

存儲器控制器100和半導體存儲器件200可以集成在單個半導體設備中。例如,存儲器控制器100和半導體存儲器件200可以集成在諸如固態(tài)驅(qū)動器(ssd)的單個半導體設備中。固態(tài)驅(qū)動器可以包括用于在其中儲存數(shù)據(jù)的儲存設備。當半導體存儲系統(tǒng)10用在ssd中時,可以顯著地提高耦接到存儲系統(tǒng)10的主機(未示出)的操作速度。

存儲器控制器100和半導體存儲器件200可以集成在諸如存儲卡的單個半導體設備中。例如,存儲器控制器100和半導體存儲器件200可以集成在單個半導體設備中以配置存儲卡,諸如個人計算機存儲卡國際協(xié)會(pcmcia)的pc卡、緊湊型閃存(cf)卡、智能媒體(sm)卡、記憶棒、多媒體卡(mmc)、縮小尺寸多媒體卡(rs-mmc)、微型尺寸版mmc(mmc微型)、安全數(shù)字(sd)卡、迷你安全數(shù)字(minisd)卡、微型安全數(shù)字(microsd)卡、安全數(shù)字高容量(sdhc)和通用閃存儲存器(ufs)。

對于另一個示例,存儲系統(tǒng)10可以作為包括諸如以下電子設備的各種元件的一種來提供:計算機、超移動pc(umpc)、工作站、上網(wǎng)本電腦、個人數(shù)字助理(pda)、便攜式計算機、網(wǎng)絡平板電腦pc、無線電話、移動電話、智能電話、電子書閱讀器、便攜式多媒體播放器(pmp)、便攜式游戲設備、導航設備、黑盒子、數(shù)字照相機、數(shù)字多媒體廣播(dmb)播放器、三維電視、智能電視、數(shù)字音頻記錄器、數(shù)字音頻播放器、數(shù)字圖像記錄器、數(shù)字圖像播放器、數(shù)字視頻記錄器、數(shù)字視頻播放器、數(shù)據(jù)中心的儲存設備、能夠在無線環(huán)境中接收和傳送信息的設備,家庭網(wǎng)絡的電子設備之一、計算機網(wǎng)絡的電子設備之一、遠程信息處理網(wǎng)絡的電子設備之一、射頻識別(rfid)設備或計算系統(tǒng)的元件設備。

圖2是圖示根據(jù)本發(fā)明的實施例的存儲系統(tǒng)的詳細框圖。例如,圖2的存儲系統(tǒng)可以描繪圖1中所示的存儲系統(tǒng)10。

參考圖2,存儲系統(tǒng)10可以包括存儲器控制器100和半導體存儲器件200。存儲系統(tǒng)10可以響應于來自主機設備的請求而操作,具體地,儲存要由主機設備訪問的數(shù)據(jù)。

主機設備可以用各種類型的電子設備中的任意一種來實現(xiàn)。在一些實施例中,主機設備可以包括電子設備,諸如臺式計算機、工作站、三維(3d)電視、智能電視、數(shù)字音頻記錄器、數(shù)字音頻播放器、數(shù)字圖像記錄器、數(shù)字圖像播放器、數(shù)字視頻記錄器和數(shù)字視頻播放器。在一些實施例中,主機設備可以包括便攜式電子設備,諸如移動電話、智能電話、電子書、mp3播放器、便攜式多媒體播放器(pmp)和便攜式游戲機。

存儲器件200可以儲存要由主機設備訪問的數(shù)據(jù)。

存儲器件200可以由易失性存儲器件或非易失性存儲器件來實現(xiàn),其中易失性存儲器件諸如動態(tài)隨機存取存儲器(dram)和靜態(tài)隨機存取存儲器(sram),非易失性存儲器件諸如只讀存儲器(rom)、掩模rom(mrom)、可編程rom(prom)、可擦除可編程rom(eprom)、電可擦除可編程rom(eeprom)、鐵電式隨機存取存儲器(fram)、相變ram(pram)、磁阻式ram(mram)和電阻式ram(rram)。

控制器100可以控制在存儲器件200中的數(shù)據(jù)的儲存。例如,控制器100可以響應于來自主機設備的請求而控制存儲器件200。控制器100可以將從存儲器件200讀取的數(shù)據(jù)提供給主機設備,以及將從主機設備提供的數(shù)據(jù)儲存到存儲器件200中。

控制器100可以包括通過總線160耦接的儲存單元110、控制單元120、糾錯碼(ecc)單元130、主機接口140和存儲器接口150。

儲存單元110可以用作存儲系統(tǒng)10和控制器100的工作存儲器,以及儲存用于驅(qū)動存儲系統(tǒng)10和控制器100的數(shù)據(jù)。當控制器100控制存儲器件200的操作時,儲存單元110可以儲存由控制器100和存儲器件200使用的數(shù)據(jù)以用于諸如讀取操作、寫入操作、編程操作和擦除操作的這些操作。

儲存單元110可以由易失性存儲器來實現(xiàn)。儲存單元110可以由靜態(tài)隨機存取存儲器(sram)或動態(tài)隨機存取存儲器(dram)來實現(xiàn)。如上所述,儲存單元110可以將由主機設備使用的數(shù)據(jù)儲存在存儲器件200中以用于讀取操作和寫入操作。為了儲存數(shù)據(jù),儲存單元110可以包括程序存儲器、數(shù)據(jù)存儲器、寫入緩沖器、讀取緩沖器、映射緩沖器等。

控制單元120可以響應于來自主機設備的寫入請求或讀取請求而控制存儲系統(tǒng)10的一般操作以及用于存儲器件200的寫入操作或讀取操作。控制單元120可以驅(qū)動被稱為快閃轉(zhuǎn)換層(ftl)的固件,以控制存儲系統(tǒng)10的一般操作。例如,ftl可以執(zhí)行諸如邏輯到物理(l2p)映射、磨損均衡、垃圾收集和壞塊處理的操作。l2p映射被稱為邏輯塊尋址(lba)。

ecc單元130可以在讀取操作期間檢測并校正從存儲器件200讀取的數(shù)據(jù)中的錯誤。當錯誤比特位的數(shù)量大于或等于可校正錯誤比特位的閾值數(shù)量時,ecc單元130可以不校正錯誤比特位,以及可以輸出表示校正錯誤比特位失敗的糾錯失敗信號。

在一些實施例中,ecc單元130可以基于編碼調(diào)制來執(zhí)行糾錯操作,其中編碼調(diào)制諸如低密度奇偶校驗(ldpc)碼、博斯-喬赫里-霍克文黑姆(bose-chaudhuri-hocquenghem)(bch)碼、turbo碼、turbo乘積碼(tpc)、里德-所羅門(reed-solomon)(rs)碼、卷積碼、遞歸系統(tǒng)碼(rsc)、網(wǎng)格編碼調(diào)制(tcm)、塊編碼調(diào)制(bcm)等。ecc單元130可以包括用于糾錯操作的所有電路、系統(tǒng)或設備。

主機接口140可以通過各種接口協(xié)議中的一種或更多種與主機設備通信,其中接口協(xié)議諸如通用串行總線(usb)、多媒體卡(mmc)、外設組件互連高速(pci-e)、小型計算機系統(tǒng)接口(scsi)、串行連接scsi(sas)、串行高級技術附件(sata)、并行高級技術附件(pata)、增強小型磁盤接口(esdi)和集成驅(qū)動器電路(ide)。

存儲器接口150可以提供在控制器100和存儲器件200之間的接口,以允許控制器100響應于來自主機設備的請求而控制存儲器件200。存儲器接口150可以在cpu120的控制下產(chǎn)生用于存儲器件200的控制信號以及處理數(shù)據(jù)。當存儲器件200是諸如nand快閃存儲器的快閃存儲器時,存儲器接口150可以在cpu120的控制下產(chǎn)生用于存儲器的控制信號以及處理數(shù)據(jù)。

存儲器件200可以包括存儲單元陣列210、控制電路220、電壓發(fā)生電路230、行解碼器240、頁緩沖器250、列解碼器260以及輸入/輸出電路270。存儲單元陣列210可以包括多個存儲塊211以及可以在其中儲存數(shù)據(jù)。電壓發(fā)生電路230、行解碼器240、頁緩沖器250、列解碼器260和輸入/輸出電路270形成用于存儲單元陣列210的外圍電路。外圍電路可以執(zhí)行存儲單元陣列210的編程操作、讀取操作或擦除操作??刂齐娐?20可以控制外圍電路。

電壓發(fā)生電路230可以產(chǎn)生具有各種電平的操作電壓。例如,在擦除操作中,電壓發(fā)生電路230可以產(chǎn)生具有各種電平的操作電壓,諸如擦除電壓和通過電壓。

行解碼器240可以連接到電壓發(fā)生電路230和多個存儲塊211。行解碼器240可以響應于由控制電路220產(chǎn)生的行地址radd而選擇多個存儲塊211之中的至少一個存儲塊,以及將從電壓發(fā)生電路230提供的操作電壓傳送到多個存儲塊211之中的選中存儲塊。

頁緩沖器250通過位線bl(未示出)連接到存儲單元陣列210。頁緩沖器250可以響應于由控制電路220所產(chǎn)生的頁緩沖器控制信號而對位線bl預充電正電壓,在編程操作和讀取操作中將數(shù)據(jù)傳送到選中存儲塊/從選中存儲塊接收數(shù)據(jù),或臨時儲存?zhèn)魉偷臄?shù)據(jù)。

列解碼器260可以將數(shù)據(jù)傳送到頁緩沖器250/從頁緩沖器250接收數(shù)據(jù),或?qū)?shù)據(jù)傳送到輸入/輸出電路270/從輸入/輸出電路270接收數(shù)據(jù)。

輸入/輸出電路270可以將從外部設備(例如,存儲器控制器100)傳送的命令和地址傳送到控制電路220,將數(shù)據(jù)從外部設備傳送到列解碼器260,或者通過輸入/輸出電路270將數(shù)據(jù)從列解碼器260輸出到外部設備。

控制電路220可以響應于命令和地址而控制外圍電路。

圖3是圖示根據(jù)本發(fā)明的實施例的半導體存儲器件的存儲塊的電路圖。例如,圖3的存儲塊可以是圖2中所示的存儲單元陣列210的存儲塊211。

參考圖3,存儲塊211可以包括分別耦接到位線bl0到blm-1的多個單元串221。每列的單元串可以包括一個或更多個漏極選擇晶體管dst以及一個或更多個源極選擇晶體管sst。多個存儲單元或存儲單元晶體管可以串聯(lián)耦接在選擇晶體管dst和sst之間。存儲單元mc0到mcn-1中的每個可以由在每個單元中儲存多比特位的數(shù)據(jù)信息的多電平單元(mlc)形成。單元串221可以分別電耦接到對應的位線bl0到blm-1。

在一些實施例中,存儲塊211可以包括nand型快閃存儲單元。然而,存儲塊211不限于nand快閃存儲器,而是可以包括nor型快閃存儲器、其中兩種或更多種類型的存儲單元被組合的混合式快閃存儲器、以及其中控制器被嵌入存儲芯片內(nèi)的一體nand快閃存儲器。

dram或快速主存儲器是計算系統(tǒng)中的關鍵資源。大數(shù)據(jù)和內(nèi)存計算的趨勢甚至已經(jīng)進一步推動擴展/額外的主存儲器容量。一個簡單的想法是應用主存儲器壓縮以增加主存儲器容量,然而,盡管多年的研究仍然存在許多挑戰(zhàn)。

使用壓縮以增加儲存容量是成熟的,并且已經(jīng)使用諸如塊級壓縮、重復數(shù)據(jù)刪除等的技術來廣泛展開使用壓縮多年,使用壓縮已經(jīng)實現(xiàn)良好的但是可變的壓縮比,其僅輕微地增加了數(shù)據(jù)壓縮/解壓縮過程和元數(shù)據(jù)處理等方面的延遲,而未顯著地增加系統(tǒng)成本和功耗。由于結(jié)果數(shù)據(jù)塊較小來傳輸和寫入以進行儲存,因此一些設計可以使用更少的網(wǎng)絡(儲存帶寬)和較小的電力來實現(xiàn)更快的性能。

然而,因為許多問題和挑戰(zhàn),所以在實踐中,使用壓縮以增加延時嚴重的主存儲器(例如,dram)的容量還沒有成功地展開。例如,現(xiàn)有的壓縮算法在直接應用到主存儲器時不能很好地轉(zhuǎn)換,因為它們需要存儲器控制器執(zhí)行非平凡計算以將高速緩存線定位在壓縮存儲器頁內(nèi)。另外,解壓縮取決于訪問任何壓縮數(shù)據(jù)的關鍵路徑。復雜的壓縮算法(諸如lempel-ziv和huffman編碼)通常以大量解壓縮延時為代價實現(xiàn)高壓縮比,這可以顯著地降低性能。

已經(jīng)提出更簡單的算法,諸如具有低解壓縮延時和合理高壓縮比的fpc(常見模式壓縮)或bdi(basedelta-immediate)。然而,現(xiàn)今cpu性能已經(jīng)愈發(fā)地被dram訪問延時所限制,dram訪問延時已經(jīng)保持多年幾乎不變。因此,由fpc或bdi所引起的延時的增加(甚至1ns或2ns)將對系統(tǒng)性能產(chǎn)生不利影響。

對于壓縮算法,其設計存在許多挑戰(zhàn)。例如,因為操作系統(tǒng)必須將固定尺寸的虛擬頁映射到可變尺寸的物理頁,所以主存儲器壓縮使存儲器管理復雜化。另外,現(xiàn)今處理器采用具有來自物理地址的標記的芯片上高速緩存,以避免不同高速緩存線之間的混疊(因為物理地址是唯一的,而虛擬地址不是)。因此,需要根據(jù)存儲器壓縮來修改高速緩存標記邏輯,以使主存儲器地址計算脫離延時嚴重的l1高速緩存訪問的關鍵路徑。此外,因為壓縮的物理高速緩存線小于它們對應的虛擬高速緩存線,所以與正常的虛擬地址到物理地址轉(zhuǎn)換相反,高速緩存線的物理頁偏移常常不同于對應的虛擬頁偏移。事實上,在主存儲器中的物理頁中壓縮高速緩存線的位置取決于在相同物理頁中在其之前出現(xiàn)的壓縮高速緩存線的尺寸。結(jié)果,訪問主存儲器中的壓縮頁內(nèi)的高速緩存線需要地址計算的附加層來計算在主存儲器中高速緩存線的位置,這會是昂貴的。

因此,壓縮過程可以具有負面影響,例如:較長且不確定的延時(且在存儲器訪問的關鍵路徑上);涉及cpu、高速緩存邏輯、存儲器控制器的高的設計復雜性;硬件壓縮/解壓縮引擎的增加以及諸如os存儲器管理以將固定虛擬頁尺寸映射到可變物理頁尺寸的其他改變;以及由于附加操作而導致的高功耗。

本文公開了利用混合式存儲器子系統(tǒng)(例如,使用慢速存儲器和快速存儲器)的系統(tǒng)、方法、設備和過程,混合式存儲器子系統(tǒng)在慢速存儲器(例如,nand閃存、pcram、reram等)中儲存壓縮數(shù)據(jù),而在快速存儲器(例如,dram)中的數(shù)據(jù)保持未壓縮。在本文中,本領域的技術人員將從本公開理解到:因為慢速存儲器和快速存儲器兩者都可以被劃分和/或分割為包括專用于儲存壓縮數(shù)據(jù)/未壓縮數(shù)據(jù)的各種部分,所以慢速存儲器組件可以不排他性地限于僅儲存壓縮數(shù)據(jù),快速存儲器組件可以不排他性地限于僅儲存未壓縮數(shù)據(jù)。因此,當os和/或應用程序(例如,用戶空間處理)訪問快速存儲器(或主存儲器、系統(tǒng)存儲器等)時,它將很少甚至不引起解壓縮延時,很少甚至不引起復雜的高速緩存線偏移計算和元數(shù)據(jù)處理開銷等。

本文所公開的發(fā)明實現(xiàn)了一起工作的混合式快速和慢速存儲器的使用。例如,具有32gbdram和512gbnand快閃儲存器的混合式存儲器dimm將比64gbdram或128gbscm儲存器類存儲器具有低得多的成本,但是os將把其看做大于或等于512gb字節(jié)可尋址的快速存儲器,而且系統(tǒng)可以用大得多的數(shù)據(jù)組(涉及在多個dimm配置中數(shù)據(jù)的多個tb)來有效地運行應用程序。

總體參考圖4,示出用于頁重新映射的系統(tǒng)40。系統(tǒng)40包括用戶空間400和內(nèi)核空間402,其中用戶空間400和內(nèi)核空間402進行通信。用戶空間400包括要求內(nèi)核空間402的組件來運行的應用程序404。內(nèi)核空間402包括軟件頁重新映射內(nèi)核驅(qū)動器406、存儲器管理單元(mmu)/轉(zhuǎn)換后備緩沖器(408)、控制器/解碼器410、快速存儲器412(例如,dram、mram等)以及慢速存儲器414(例如,nand快閃、pcram、reram、非易失性存儲器(nvm)等)。下面詳細地描述在圖4的系統(tǒng)40中所示的組件以及它們的功能。

在圖5和圖6中描繪了具有混合式存儲器子系統(tǒng)的系統(tǒng)50和60。系統(tǒng)50包括快速存儲器500和慢速存儲器502。如本領域技術人員從本文的描述中所將理解的,出于常規(guī)目的而描述系統(tǒng)50,并且可以在各種存儲系統(tǒng)、設備、過程和方法中實現(xiàn)系統(tǒng)50。在系統(tǒng)50中,將數(shù)據(jù)從快速存儲器500寫入到慢速存儲器502可以涉及數(shù)據(jù)的壓縮504。同樣在系統(tǒng)50中,將數(shù)據(jù)從慢速存儲器502寫入快速存儲器500可以涉及數(shù)據(jù)的解壓縮506。

系統(tǒng)60圖示透明處理的示例(例如,透明表示不可見或通過os感知)。系統(tǒng)60包括用于應用程序運行602的用戶空間600和內(nèi)核空間604。用戶空間600可以通過或結(jié)合快速存儲器606與內(nèi)核空間604通信。os和應用程序602感知大量增加的存儲器容量(例如,大于或等于2倍的慢速存儲器608容量加上在快速存儲器606中未分配用于重新映射過程的存儲器),但是os/應用程序?qū)缀跻恢?在一些實施例中,總是)訪問快速存儲器606。

系統(tǒng)60也包括定位/配置用于透明處理610的慢速存儲器608。或者,當數(shù)據(jù)從快速存儲器606寫入慢速存儲器608時,其可以涉及數(shù)據(jù)的壓縮612,和/或當數(shù)據(jù)從慢速存儲器608寫入快速存儲器606時,其可以涉及數(shù)據(jù)的解壓縮614,透明處理610的配置(下面更詳細地描述)允許壓縮612和解壓縮614對os而言透明地執(zhí)行(例如,對os不可見,不被os感知)。

在本發(fā)明的示例中,快速存儲器500和606中的數(shù)據(jù)可以是未壓縮的(在一些實施例中,快速存儲器500和606中的所有數(shù)據(jù)可以是未壓縮的和/或總是未壓縮的),使得cpu、os和應用程序很少甚至不引起由解壓縮、高速緩存線偏移和元數(shù)據(jù)處理而導致的延時。在慢速存儲器502和608中的數(shù)據(jù)可以被壓縮(在一些實施例中,所有數(shù)據(jù)可以被壓縮和/或總是被壓縮),以增加有效(感知)容量。

當對頁進行寫入或執(zhí)行交換的臟頁寫回到慢速存儲器502和608的“回寫”時,數(shù)據(jù)可以被壓縮504/612。在系統(tǒng)60中,壓縮過程612和延時可以在該過程期間被隱藏。當將頁從慢速存儲器502和608交換到快速存儲器500和606時,數(shù)據(jù)可以被解壓縮506/614。在系統(tǒng)60中,解壓縮過程614和延時可以在該過程期間被隱藏。

這樣,在解壓縮和/或壓縮中,對本文描述的系統(tǒng)60和其他示例(包括系統(tǒng)50,其可以在壓縮504過程和解壓縮506過程對os而言可被透明地執(zhí)行的存儲系統(tǒng)中實現(xiàn)),高速緩存線偏移計算和元數(shù)據(jù)處理開銷是“隱藏的”,并且可以在os/應用程序602訪問目標存儲器位置之前的頁重新映射過程期間被處理。

在一些實施例中,本文所公開的混合式存儲器發(fā)明利用了軟件頁重新映射過程,以及通過在頁重新映射的頁交換過程期間隱藏壓縮/解壓縮過程,系統(tǒng)實現(xiàn)了os/應用程序602的透明存儲器壓縮,同時大量地增加了通過os和應用程序感知的主存儲器容量。

在下面公開的一些實施例中,利用了軟件頁重新映射方案,其中頁重新映射方案對os/應用程序也是透明的。由于軟件頁重新映射方案對os和應用程序是透明的,并且其保證在訪問發(fā)生之前通過在該頁重新映射過程期間隱藏壓縮/解壓縮過程,目標為慢速存儲器的全部(或基本上全部)訪問首先將被重新映射(或復制或交換)到快速存儲器,所以本發(fā)明完全實現(xiàn)了os和應用程序的透明存儲器壓縮,其可以大量增加通過os和應用程序感知的有效存儲器容量,但是引發(fā)零解壓縮延時、高速緩存線偏移計算和元數(shù)據(jù)處理開銷(通常與主存儲器壓縮系統(tǒng)相關)。

本文所公開的發(fā)明可以在被配置用于軟件頁重新映射的系統(tǒng)中實現(xiàn),諸如在名稱為“mechanismenablingtheuseofslowmemorytoachievebyteaddressabilityandnear-dramperformancewithpageremappingscheme(使用慢速存儲器來利用頁重新映射方案實現(xiàn)字節(jié)可尋址性和近dram性能的機制)”的第62/280,430號美國臨時申請中描述的重映射系統(tǒng),其內(nèi)容通過引用合并于本文。

根據(jù)本發(fā)明的方面,圖7中示出了用于頁重新映射的示例系統(tǒng)70,示例系統(tǒng)70可以與本文所公開的壓縮系統(tǒng)、方法、過程和設備一起利用。本領域技術人員將理解,本發(fā)明不限于如下面進一步描述的用于頁重新映射的系統(tǒng)內(nèi)的實施方式。系統(tǒng)70包括快速存儲器部分(例如,dram等)714、慢速存儲器部分(例如,nvm、nand等)716和虛擬存儲器vm718。

總的物理快速存儲器空間714(本文中被稱為dram,但是如本領域技術人員將理解的并且如上所述的,可以利用其他適合的快速存儲器來實現(xiàn)本發(fā)明)被示出為“d”。在“d”gb之外,dram的“x”gb被映射并且對os可見。換言之,dram的“d-x”gb可以用作重新映射緩沖器??偟奈锢砺俅鎯ζ骺臻g716(本文中被稱為nand和/或nvm,但是如本領域技術人員將理解的并且如上所述的,可以利用其他適合的慢速存儲器來實現(xiàn)本發(fā)明)是“y”gb,因此,如通過os感知的總系統(tǒng)存儲器/總物理存儲器是“x+y”gb。虛擬存儲器/虛擬地址718空間的量是ztb。

系統(tǒng)70可以包括用戶空間700和內(nèi)核空間701(例如,在內(nèi)核空間701的虛線下面的組件/操作)。從用戶空間700,os/應用程序702可以運行。內(nèi)核空間701包括用于傳送os存儲器管理命令704的模塊、軟件頁重新映射內(nèi)核驅(qū)動器(sprkd)706、mmu/tlb(存儲器管理單元(例如,控制器)/轉(zhuǎn)換后備緩沖器)708和/或memc/解碼器(存儲器控制器解碼器)710。

在典型的os環(huán)境中,當os訪問(或分配)va位置“a”時,如果包含“a”的頁尚未被映射到系統(tǒng)存儲器,則將產(chǎn)生頁故障,os將從儲存器(例如,硬盤驅(qū)動器或ssd)恢復該頁并且復制到系統(tǒng)存儲器。然而,如圖7中所見,由于os將總的系統(tǒng)存儲器感知為“x+y”gb,如果所分配的存儲器頁落入nvm716地址范圍(例如,在“x到x+y”gb之間),則對該頁的后續(xù)讀取/寫入訪問可能是緩慢的,這是由于例如:nand716實質(zhì)上比dram714慢,該讀取/寫入訪問涉及頁(塊模式)訪問并且不是字節(jié)可尋址的,和/或需要調(diào)用塊模式驅(qū)動器以執(zhí)行塊模式訪問。

系統(tǒng)70可以被配置為將對慢速存儲器716的后續(xù)訪問重新指向到dram714(至少透明地,或者以對os不可見或通過os感知的方式),因此作為快速存儲器(例如,諸如快速存儲器714)仿效從“x到x+y”gb的整個nand716空間來操作,從而支持隨機的、字節(jié)可尋址的讀取/寫入訪問。sprkd706可以被配置為通過截獲os存儲器管理命令704以及執(zhí)行第二次轉(zhuǎn)換或頁重新映射來開始頁重新映射。

作為示例,sprkd706被配置為截獲將虛擬地址va=“0到z”tb映射到物理地址pa=“x到x+y”gb的mm命令704(例如,在慢速存儲器空間716中),并且轉(zhuǎn)換va=“0到z”tb到pa=“x到d”gb范圍的映射,從而對va=“0到z”tb的所有訪問將被重新指向到在“x到d”之間的dram714重新映射緩沖器空間。

在截獲mm命令704之后,sprkd706可以被配置為檢查重新映射是否需要通過在dram714重新映射緩沖器空間(例如,在“x到d”之間)中尋找空頁來執(zhí)行,并執(zhí)行以下示例步驟。如果空頁是可用的,則sprkd706可以執(zhí)行重新映射,重新映射可以是簡單地將nvm716頁復制到空dram714重新映射緩沖器頁的頁復制。如果空頁是不可用的,則可以利用逐出算法來選擇要逐出的頁。例如,如果被選中為逐出的頁是干凈的,則可以簡單地將其丟棄并且可以執(zhí)行頁復制。如果選中的頁是臟的,則sprkd706可以被配置為在執(zhí)行重新映射之前將該頁回寫到對應的nvm716頁。

接下來參考圖8,示出了示例cpu和os操作的示圖80。如圖8所見,存在其中運行應用程序801的用戶空間800和內(nèi)核空間802。在操作中,所利用的組件可以包括mmu/tlb804、包括頁表項(pte)806的頁表(pt)、軟件頁重新映射內(nèi)核驅(qū)動器(sprkd)808、虛擬地址(va)到物理地址(pa)映射/頁故障處理器810、nvm-dram重新映射表812、儲存器816(其可以包括慢速存儲器和快速存儲器的總儲存器,盡管這些組件在圖8中為了便于解釋而單獨描繪)、慢速存儲器/nvm818以及dram/快速存儲器826。系統(tǒng)/過程80還可以包括cpu高速緩存命中/未命中檢查828。

由于sprkd808將把所有訪問轉(zhuǎn)換到nand/nvm818地址空間,并且通過在814處截獲osmm功能調(diào)用/命令而在“x到d”處將其重新映射到dram826重新映射緩沖器空間,所以對慢速存儲器空間818的os訪問總是被重新映射(重新指向)到dram,使得os認為它正在訪問快速的、字節(jié)可尋址的dram存儲器。

一般而言,sprkd808可以被配置為執(zhí)行兩種功能。首先,sprkd808截獲osmm功能調(diào)用814。當os需要改變va(虛擬地址)到pa(物理地址)的映射時,sprkd808將首先檢查在nvm-dram重新映射表812中是否存在頁。如果命中,則將使用rt(重新映射表)信息對pte806和tlb804執(zhí)行“rt更新”(重新映射表更新)。如果未命中,則將其視為頁故障并且將其傳遞到os頁故障處理器810。

第二,在正常tlb未命中中,tlb未命中處理器將執(zhí)行“頁走(pagewalk)”以判斷頁是否被映射在pt中(命中)或未被映射在pt中(未命中,其將被視為“重新映射故障”),然后傳遞到sprkd808。在sprkd808處,對于pt命中,它可以被配置為執(zhí)行重新映射、更新重新映射表812以及執(zhí)行tlb更新。在sprkd808處,對于pt未命中,它可以被配置為執(zhí)行與頁故障類似的動作以從儲存器加載頁,執(zhí)行va-pa映射、pt更新,對其他處理器執(zhí)行tlb擊落(shootdown),對目標處理器執(zhí)行tlb更新,然后重試觸發(fā)tlb未命中的存儲器訪問。

盡管系統(tǒng)80示出了針對用sprkd808的頁重新映射的cpu過程的示例,但是在不脫離來自本文所公開內(nèi)容的本發(fā)明的情況下,本領域技術人員將認識到用于實現(xiàn)本發(fā)明的其他適合的處理和配置。

如系統(tǒng)/過程80所示,對os而言透明地執(zhí)行的頁重新映射過程還將壓縮操作820包括到其重新映射操作中。進行頁重新映射步驟所需的快速存儲器826和慢速存儲器818之間的操作和傳輸可以涉及從快速存儲器826到慢速存儲器818的壓縮操作822以及從慢速存儲器818到快速存儲器826的解壓縮操作824。下面詳細地描述這些操作。

在本發(fā)明的一些實施例中,sprkd可以在執(zhí)行將壓縮頁回寫到慢速存儲器之前將選中以被首先逐出的頁壓縮,sprkd可以解壓縮選中以被復制的目標頁,然后從慢速存儲器復制到快速存儲器。

圖9是對操作系統(tǒng)而言透明地執(zhí)行頁重新映射和壓縮操作的方法/過程中的步驟的流程圖90,盡管在之前附圖中描述的組件也可以被配置為執(zhí)行在流程圖90中的步驟,但是特別地為了便于描述,將針對圖8中的組件來描述圖9。

在步驟900處,截獲存儲器管理命令814。例如,sprkd808可以被配置為截獲存儲器管理命令814。存儲器管理命令814可以包括對存儲器的命令或訪問,其中該命令或訪問將va=“0到z”映射到nand部分716的物理地址(pa)=“x到y(tǒng)”。

在步驟902處,判斷是否需要頁重新映射。例如,sprkd808可以被配置為判斷是否需要頁重新映射。如果不需要頁重新映射(例如,訪問是針對已經(jīng)在dram緩沖器空間中的地址,和/或?qū)τ诖鎯ζ鞴芾砻?14不需要壓縮或解壓縮),則sprkd808可以默認為os頁故障處理器810可以從儲存器816讀取頁以及執(zhí)行va-pa映射。

在步驟904處,如果確定需要頁重新映射,則壓縮和/或解壓縮操作820被配置為在頁重新映射過程期間來執(zhí)行。例如,sprkd808可以被配置為在重新映射操作期間初始化/執(zhí)行壓縮和/或解壓縮操作820。

在步驟906處,識別來自慢速存儲器818的頁以復制到快速存儲器826。sprkd808可以被配置為識別來自慢速存儲器818的頁以被復制到快速存儲器826。

在步驟908處,判斷頁在快速存儲器826中是否可用,使得在步驟906處識別的頁可以在空頁處被復制(例如,寫入)到快速存儲器826。作為示例,sprkd808可以被配置為判斷頁在快速存儲器826中是否可用。

步驟910-914描述在步驟908處確定(例如,sprkd808確定)在快速存儲器826中不存在可用頁時采取的步驟的示例集合。

在步驟910處,如果在快速存儲器826中沒有頁可用,則從快速存儲器中選擇頁來逐出。如本文中所用,逐出可以指算法(諸如先前通過引用合并入本文的第62/280,430號美國臨時申請中描述的那些算法),該算法在快速存儲器826中釋放一頁或多頁或另外的空間,使得重新映射/復制/壓縮/解壓縮等可以執(zhí)行。如果選中的頁不包括需要被寫回到慢速存儲器818的數(shù)據(jù),則該過程可以進行到步驟916。否則,該過程在步驟912-914處繼續(xù)。

在步驟912處,一旦選擇該頁,如果選中頁包括回寫數(shù)據(jù)(例如,要回寫到慢速存儲器818的數(shù)據(jù)),則壓縮被選中以逐出的頁(例如,頁中的數(shù)據(jù))。例如,sprkd808可以被配置為壓縮選中頁。由于頁先前在快速存儲器826中,因此其(可能)以未壓縮狀態(tài)儲存,這是因為os訪問快速存儲器826,并且這些訪問被設計為具有很少甚至沒有延時。因此,為了改善慢速存儲器818的感知空間,因為頁中的數(shù)據(jù)需要被回寫,所以可以在步驟912處發(fā)生壓縮操作822。由于重新映射操作對os而言透明地執(zhí)行,并且由于壓縮操作822也在重新映射操作期間執(zhí)行,因此壓縮操作822對os而言也被透明地執(zhí)行,從而減少延時并且包括如本文所述的其他益處。

在步驟914處,一旦將被選中以逐出的頁/數(shù)據(jù)壓縮(例如,壓縮操作822完成),則將壓縮的頁/數(shù)據(jù)寫回到慢速存儲器818。在一些實施例中,sprkd808(例如,通過頁故障處理器810的方式)被配置為將壓縮的選中頁回寫到慢速存儲器818。一旦數(shù)據(jù)被寫回到慢速存儲器818,則可以逐出選中頁(例如,可以去除該頁中的數(shù)據(jù),從而釋放用于重新映射操作的在快速存儲器826中的空間)。

在步驟916處,將被識別以復制的頁解壓縮。被識別以復制的頁可以儲存在慢速存儲器818上,因此可以以壓縮狀態(tài)來儲存。由于優(yōu)選的是,要被儲存在快速存儲器826中的數(shù)據(jù)在未壓縮狀態(tài)下進行處理,所以可以在重新映射過程中在該步驟處進行解壓縮操作824。在一個示例中,sprkd808被配置為進行/開始解壓縮過程824。由于在重新映射過程(如上所述,其對os而言透明地執(zhí)行)期間執(zhí)行解壓縮操作824,因此解壓縮操作824對os而言也可以透明地執(zhí)行。

在步驟918處,將解壓縮的頁復制到快速存儲器826。例如,sprkd808可以被配置為開始復制過程/將解壓縮的頁復制到快速存儲器826。由于解壓縮已經(jīng)在重新映射完成之前發(fā)生,因此這種復制(其在諸如本文中所述的那些頁重新映射方案中是慣常步驟)改進了存儲器件的操作。因此,復制(重新映射)頁在其被寫入快速存儲器826時被解壓縮。這是有利的,因為其不僅對操作系統(tǒng)透明,而且去除了跟隨重新映射的附加步驟。傳統(tǒng)上,在完成重新映射之后,不執(zhí)行解壓縮,因此,在頁的復制之后,系統(tǒng)必須在頁被儲存在快速存儲器826中時進行頁的解壓縮。這對os不是透明的,并且會降低操作的速度。使頁重新映射和壓縮/解壓縮操作以這種方式執(zhí)行允許透明的重新映射和壓縮/解壓縮操作,去除了不透明的步驟并且提高了性能。

本文所公開的系統(tǒng)、方法、過程和設備可以應用到不利用上述重新映射頁方案的其他混合式或異構(gòu)存儲器子系統(tǒng),這些作為示例來參考以說明壓縮/解壓縮過程可以如何以os和應用程序透明方式來完成,以及延時的部分或全部可以如何被彌補或“隱藏”以實現(xiàn)沒有或很少的性能影響。

利用尺寸較小的壓縮數(shù)據(jù)塊,本文所公開的系統(tǒng)、方法、過程和設備可以減少磨損并且提高慢速存儲器介質(zhì)的耐久性和壽命。

利用尺寸較小的壓縮數(shù)據(jù)塊,可以減少讀取/寫入時間和存儲器帶寬,這也可以部分地彌補延時、完全彌補延時或至甚至超出補償延時,其中延時是在頁重新映射/交換/復制過程期間由(隱藏的)壓縮/解壓縮所引起的。使用本文所述的本發(fā)明的存儲器壓縮可以實現(xiàn)很少甚至沒有性能影響,同時享有與存儲器壓縮相關聯(lián)的所有其他益處。

如果“慢速存儲器”是“遠程存儲器”,則無論其是位于另一個服務器、另一個數(shù)據(jù)中心還是“存儲器池”服務器等中,以及無論其是nand、scm/nvm還是甚至在某種形式的網(wǎng)絡或結(jié)構(gòu)上的dram,本文所公開的本發(fā)明都可以支持它并且可以實質(zhì)上減少網(wǎng)絡帶寬、結(jié)構(gòu)帶寬和存儲器帶寬,因為僅在本地快速存儲器和慢速遠程存儲器之間執(zhí)行頁重新映射時才發(fā)生訪問遠程存儲器的網(wǎng)絡/結(jié)構(gòu)流量,因此對遠程存儲器的正常os訪問和應用程序訪問針對快速本地存儲器中的重新映射頁,并且較小的壓縮頁將穿過網(wǎng)絡、結(jié)構(gòu)和存儲器總線接口,因此相應地減少帶寬、延時和電力。

在一個實施例中,當由軟件頁重新映射過程來實現(xiàn)時,沒有對主機cpu、主機存儲器控制器或存儲器通道接口進行的硬件改變。因此,本文所公開的本發(fā)明可以在現(xiàn)有的和未來的jedec存儲器插座(例如,jedecddr3、ddr4)中工作,在相同通道上與其他現(xiàn)有jedec(或非jedec)存儲器兼容,也可以在全部非jedec存儲器接口(例如,ibm/openpowerdmi接口等)上工作,以及由于本發(fā)明以對os“透明”的方式來完成,因此與os級numa機制兼容。

本發(fā)明通將有效的、感知到的存儲器增加典型的2:1或更高的目標壓縮比來進一步提高軟件頁重新映射方案。使用與上面相同的示例,具有物理32gbdram+256gbnand閃存的混合式存儲器dimm現(xiàn)在可以被os和應用程序感知為大于或等于512gb隨機訪問的、字節(jié)可尋址的快速存儲器,同時仍然具有比64gbdram或128gbscm儲存器類存儲器低得多的成本。因此,本發(fā)明使大數(shù)據(jù)應用程序和內(nèi)存計算環(huán)境的部署很有成本效益。

本文所公開的本發(fā)明可以與其他硬件或軟件頁交換/重新映射方案一起來利用,并且其可以利用頁重新映射方案是否是完全os/應用程序透明的。本發(fā)明仍將通過隱藏全部或部分壓縮/解壓縮開銷和相關延時來提供大量的益處,這與解壓縮延時開銷處在主存儲器訪問的關鍵路徑中并且負面地影響系統(tǒng)性能的過程完全相反。

盡管具有2:1或更高的良好平均壓縮比的低延時算法對于實際實施方式來說是優(yōu)選的,但是本發(fā)明的示例可以采取所有無損壓縮算法而不存在限制。諸如基于lempel-ziv的算法(lzo、lz4、lz77、lz78)、霍夫曼編碼、fpc(常見模式壓縮)或bdi(base-delta-immediate壓縮)的算法都是本發(fā)明的可能選項。

如果os和sprkd是應用感知的,則實施例可以支持有損壓縮算法。例如,sprkd可以將無損壓縮施加到用于代碼或正常應用程序數(shù)據(jù)的頁,并且可以將有損壓縮施加到分配作為支持精神視覺無損的顯示幀緩沖器的頁,但實際上使用有損壓縮(例如,vesa顯示流壓縮(dsc)v1.1等)。

本文所公開的本發(fā)明支持硬件壓縮/解壓縮方法或軟件壓縮/解壓縮方法,硬件加速器可以具有更低的延時和更高的性能。不需要對cpu、高速緩存標記邏輯或主機存儲器控制器進行改變以添加元數(shù)據(jù)高速緩存等。

本文所公開的本發(fā)明允許高度靈活的實施方式以將軟件或硬件頁重新映射/交換/復制機制與軟件壓縮方法或硬件壓縮方法耦接。因此,其范圍從零硬件成本到適度成本,以添加用于高性能實施方式的壓縮硬件和相關的dma邏輯。

雖然為了清楚理解的目的,已經(jīng)相當詳細地描述了前述實施例,但是本發(fā)明不限于所提供的細節(jié)。存在實現(xiàn)本發(fā)明的許多可供選擇的方式。所公開的實施例是說明性的而非限制性的。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1