国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

干貨長文:Linux 文件系統(tǒng)與持久性內(nèi)存介紹

共 20858字,需瀏覽 42分鐘

 ·

2021-02-11 21:10

公眾號關(guān)注“杰哥的IT之旅”,

選擇“星標(biāo)”,重磅干貨,第一時間送達(dá)!

來自:FreeOA

作者:阿炯

鏈接:https://reurl.cc/8y3nEM

1、Linux 虛擬文件系統(tǒng)介紹

在 Linux 系統(tǒng)中一切皆文件,除了通常所說的狹義的文件以外,目錄、設(shè)備、套接字和管道等都是文件。


文件系統(tǒng)在不同的上下文中有不同的含義:


在存儲設(shè)備上組織文件的方法,包括數(shù)據(jù)結(jié)構(gòu)和訪問方法,到存儲設(shè)備。

按照某種文件系統(tǒng)類型格式化的一塊存儲介質(zhì)。我們常說在某個目錄下掛載或卸載文件系統(tǒng), 這里的文件系統(tǒng)就是這種意思。

內(nèi)核中負(fù)責(zé)管理和存儲文件的模塊,即文件系統(tǒng)模塊。


Linux文件系統(tǒng)的架構(gòu)如下圖所示,分為用戶空間、內(nèi)核空間和硬件3個層面:



注意:上圖中方塊對齊關(guān)系,很多時候我們分不清內(nèi)核文件系統(tǒng)中 "cache" 和 "buffer" 的區(qū)別,畢竟兩者都可以翻譯為 "緩存區(qū)",但是從圖中,就可以很清晰的看出所謂的 "cache" 其實(shí)指的就是圖中的 "頁緩存" 它是針對文件來說的,除了 "DAX"(直接訪問方式的設(shè)備)它不使用 "緩存",其他的閃存類,塊設(shè)備類設(shè)備都會使用到 "頁緩存" 也就是 "cache",而 "buffer" 其實(shí)指的就是圖中的 "塊緩存" 它是針對塊設(shè)備的。



1.1、硬件層面


外部存儲設(shè)備分為塊設(shè)備、閃存和 NVDIMM 設(shè)備 3 類,塊設(shè)備主要有以下兩種:


機(jī)械硬盤:機(jī)械硬盤的讀寫單位是扇區(qū)。訪問機(jī)械硬盤的時候,需要首先沿著半徑 方向移動磁頭尋找磁道,然后轉(zhuǎn)動盤片找到扇區(qū)。


閃存類塊設(shè)備:使用閃存作為存儲介質(zhì),里面的控制器運(yùn)行固化的驅(qū)動程序,驅(qū)動 程序的功能之一是閃存轉(zhuǎn)換層(Flash Translation Layer,F(xiàn)TL),把閃存轉(zhuǎn)換為塊設(shè)備, 外表現(xiàn)為塊設(shè)備。常見的閃存類塊設(shè)備是在個人計(jì)算機(jī)和筆記本電腦上使用的固態(tài)硬盤 splid State Drives,SSD),以及在手機(jī)和平板電腦上使用的嵌入式多媒體存儲卡(embedded Multi Media Card,eMMc)和通用閃存存儲(Universal Flash Storage,UFS)。閃存類塊設(shè)備相對機(jī)械硬盤的優(yōu)勢是:訪問速度快,因?yàn)闆]有機(jī)械操作:抗振性很高, 便于攜帶。


閃存(Flash Memory)的主要特點(diǎn)如下:


在寫入數(shù)據(jù)之前需要擦除一個擦除塊,因?yàn)橄蜷W存寫數(shù)據(jù)只能把一個位從 1 變成 0,不能從 0 變成 1,擦除的目的是把擦除塊的所有位設(shè)置為 1

一個擦除塊的最大擦除次數(shù)有限,NOR閃存的擦除塊的最大擦除次數(shù)是 10^4~10^3, NAND 閃存的擦除塊的最大擦除次數(shù)是 10^3~10^6。


閃存按存儲結(jié)構(gòu)分為 NAND 閃存和 NOR 閃存,兩者的區(qū)別如下:


NOR閃存的容量小,NAND 閃存的容量大。

NOR 閃存支持按字節(jié)尋址,支持芯片內(nèi)執(zhí)行(eXecute In Place,XIP),可以直接 在閃存內(nèi)執(zhí)行程序,不需要把程序讀到內(nèi)存中; NAND 閃存的最小讀寫單位是頁或子頁, 一個擦除塊分為多個頁,有的 NAND 閃存把頁劃分為多個子頁。

NOR 閃存讀的速度比 NAND 閃存塊,寫的速度和擦除的速度都比 NAND 閃存慢

NOR 閃存沒有壞塊;NAND 閃存存在壞塊,主要是因?yàn)橄龎膲K的成本太高 NOR 閃存適合存儲程序,一般用來存儲引導(dǎo)程序比如 uboot 程序;NAND 閃存適 合存儲數(shù)據(jù)。


為什么要針對閃存專門設(shè)計(jì)文件系統(tǒng)?主要原因如下:


NAND 閃存存在壞塊,軟件需要識別并且跳過壞塊。

需要實(shí)現(xiàn)損耗均衡( wear leveling),損耗均衡就是使所有擦除塊的擦除次數(shù)均衡, 避免一部分擦除塊先損壞。


機(jī)械硬盤和 NAND 閃存的主要區(qū)別如下:


機(jī)械硬盤的最小讀寫單位是扇區(qū),扇區(qū)的大小一般是 512 字節(jié):NAND 閃存的最 小讀寫單位是頁或子頁。

機(jī)械硬盤可以直接寫入數(shù)據(jù):NAND 閃存在寫入數(shù)據(jù)之前需要擦除一個擦除塊。

機(jī)械硬盤的使用壽命比 NAND 閃存長:機(jī)械硬盤的扇區(qū)的寫入次數(shù)沒有限制:NAND 閃存的擦除塊的擦除次數(shù)有限。

機(jī)械硬盤隱藏壞的扇區(qū),軟件不需要處理壞的扇區(qū):NAND 閃存的壞塊對軟件可 見,軟件需要處理壞塊。


NVDIMM(Nonn-Volatile DIMM,非易失性內(nèi)存:DIMM 是 Dual-Inline-Memory-Modules 的縮寫,表示雙列直插式存儲模塊,是內(nèi)存的一種規(guī)格)設(shè)備把 NAND 閃存、內(nèi)存和超級電容集成到一起,訪問速度和內(nèi)存一樣快,并且斷電以后數(shù)據(jù)不會丟失。在斷電的瞬間, 超級電容提供電力,把內(nèi)存中的數(shù)據(jù)轉(zhuǎn)移到 NAND 閃存。


1.2、內(nèi)核空間層面


在內(nèi)核的目錄 fs 下可以看到,內(nèi)核支持多種文件系統(tǒng)類型。為了對用戶程序提供統(tǒng)一的 文件操作接口,為了使不同的文件系統(tǒng)實(shí)現(xiàn)能夠共存,內(nèi)核實(shí)現(xiàn)了一個抽象層,稱為虛擬文件系統(tǒng)(Virtual File System,VFS),也稱為虛擬文件系統(tǒng)切換(Virtual Filesystem Switch,VFS) 文件系統(tǒng)分為以下幾種。


塊設(shè)備文件系統(tǒng),存儲設(shè)備是機(jī)械硬盤和固態(tài)硬盤等塊設(shè)備,常用的塊設(shè)備文件 系統(tǒng)是 EXT 和 btrfs。EXT 文件系統(tǒng)是 Linux 原創(chuàng)的文件系統(tǒng),目前有 3 個 成版本:EXT[2-4]。


閃存文件系統(tǒng),存儲設(shè)備是 NAND 閃存和 NOR 閃存,常用的閃存文件系統(tǒng)是 JFFS2 ,(日志型閃存文件系統(tǒng)版本2, Journalling Flash File System version2)和 UBIFS(無序區(qū)塊鏡像文件系統(tǒng), Unsorted Block Image File System)。內(nèi)存文件系統(tǒng)的文件在內(nèi)存中,斷電以后文件丟失,常用的內(nèi)存文件系統(tǒng)是 tmpfs, 用來創(chuàng)建臨時文件。


偽文件系統(tǒng),是假的文件系統(tǒng),只是為了使用虛擬文件系統(tǒng)的編程接口,常用的 偽文件系統(tǒng)如下所示:


sockfs,這種文件系統(tǒng)使得套接字(socket)可以使用讀文件的接口 read 接收報文, 使用寫文件的接口 write 發(fā)送報文。

proc 文件系統(tǒng),最初開發(fā) proc 文件系統(tǒng)的目的是把內(nèi)核中的進(jìn)程信息導(dǎo)出到用戶空間, 后來擴(kuò)展到把內(nèi)核中的任何信息導(dǎo)出到用戶空間,通常把 proc 文件系統(tǒng)掛載在目錄 "proc" 下。

sysfs,用來把內(nèi)核的設(shè)備信息導(dǎo)出到用戶空間,通常把 sysfs 文件系統(tǒng)掛載在目錄 "/sys"下。

hugetlbfs,用來實(shí)現(xiàn)標(biāo)準(zhǔn)巨型頁。

cgroup 文件系統(tǒng),控制組(control group cgroup)用來控制一組進(jìn)程的資源, cgroup 文件系統(tǒng)使管理員可以使用寫文件的方式配置 cgroup。

cgroup2 文件系統(tǒng), cgroup2 是 cgroup 的第二個版本, cgroup2 文件系統(tǒng)使管理員可 以使用寫文件的方式配置 cgroup2。


這些文件系統(tǒng)又各自有著相關(guān)的特性:


頁緩存:訪問外部存儲設(shè)備的速度很慢,為了避免每次讀寫文件時訪問外部存儲設(shè)備,文件系統(tǒng)模塊為每個文件在內(nèi)存中創(chuàng)建了一個緩存,因?yàn)榫彺娴膯挝皇琼摚苑Q為頁緩存。


塊設(shè)備層:塊設(shè)備的訪問單位是塊,塊大小是扇區(qū)大小的整數(shù)倍。內(nèi)核為所有塊設(shè)備實(shí)現(xiàn)了統(tǒng)一 的塊設(shè)備層。


塊緩存:為了避免每次讀寫都需要訪問塊設(shè)備,內(nèi)核實(shí)現(xiàn)了塊緩存,為每個塊設(shè)備在內(nèi)存中創(chuàng) 建一個塊緩存。緩存的單位是塊,塊緩存是基于頁緩存實(shí)現(xiàn)的。


IO 調(diào)度器:訪問機(jī)械硬盤時,移動磁頭尋找磁道和扇區(qū)很耗時,如果把讀寫請求按照扇區(qū)號排序, 可以減少磁頭的移動,提高吞吐量。IO 調(diào)度器用來決定讀寫請求的提交順序,針對不同的 使用場景提供了多種調(diào)度算法:NOOP(No Operation)、CFQ(完全公平排隊(duì), Complete Fair Queuing)和 deadline(限期)。NOOP 調(diào)度算法適合閃存類塊設(shè)備,CFQ 和 deadline調(diào)度算 法適合機(jī)械硬盤。


塊設(shè)備驅(qū)動程序:每種塊設(shè)備需要實(shí)現(xiàn)自己的驅(qū)動程序。


內(nèi)核把閃存稱為存儲技術(shù)設(shè)備( Memory Technology Device,MTD),為所有閃存實(shí)現(xiàn) 了統(tǒng)一的 MTD 層,每種閃存需要實(shí)現(xiàn)自己的驅(qū)動程序。針對 NVDIMM 設(shè)備,文件系統(tǒng)需要實(shí)現(xiàn) DAX(Direct Access直接訪問:X 代表 eXciting,沒有意義,只是為了讓名字看起來酷),繞過頁緩存和塊設(shè)備層,把 NVDIMM 設(shè)備里面的內(nèi)存直接映射到進(jìn)程或內(nèi)核的虛擬地址空間。


libnvdimm 子系統(tǒng)提供對 3 種 NVDIMM 設(shè)備的支持:持久內(nèi)存(persistent memory,PMEM) 模式的 NVDIMM 設(shè)備,塊設(shè)備(block,BLK)模式的 NVDIMM 設(shè)備,以及同時支持PMEM 和 BLK 兩種訪問模式的 NVDIMM 設(shè)備。PMEM 訪問模式是把 NVDIMM 設(shè)備當(dāng)作內(nèi)存,BLK 訪問模式是把 NVDIMM 設(shè)備當(dāng)作塊設(shè)備。每種 NVDIMM 設(shè)備需要實(shí)現(xiàn)自己的驅(qū)動程序。

2、下一代存儲技術(shù)NVIDMM

NVDIMM (Non-Volatile Dual In-line Memory Module) 是一種可以隨機(jī)訪問的, 非易失性內(nèi)存。非易失性內(nèi)存指的是即使在不通電的情況下, 數(shù)據(jù)也不會消失。因此可以在計(jì)算機(jī)掉電 (unexpected power loss), 系統(tǒng)崩潰和正常關(guān)機(jī)的情況下, 依然保持?jǐn)?shù)據(jù)。NVDIMM 同時表明它使用的是 DIMM 封裝, 與標(biāo)準(zhǔn)DIMM 插槽兼容, 并且通過標(biāo)準(zhǔn)的 DDR總線進(jìn)行通信??紤]到它的非易失性, 并且兼容傳統(tǒng)DRAM接口, 又被稱作Persistent Memory。


2.1、種類


目前, 根據(jù) JEDEC 標(biāo)準(zhǔn)化組織的定義, 有三種NVDIMM 的實(shí)現(xiàn)。分別是:


NVDIMM-N


指在一個模塊上同時放入傳統(tǒng) DRAM 和 flash 閃存,計(jì)算機(jī)可以直接訪問傳統(tǒng) DRAM。支持按字節(jié)尋址,也支持塊尋址。通過使用一個小的后備電源,為在掉電時數(shù)據(jù)從 DRAM 拷貝到閃存中提供足夠的電能;當(dāng)電力恢復(fù)時再重新加載到 DRAM 中。



NVDIMM-N示意圖


NVDIMM-N 的主要工作方式其實(shí)和傳統(tǒng) DRAM是一樣的。因此它的延遲也在10的1次方納秒級。而且它的容量,受限于體積,相比傳統(tǒng)的 DRAM 也不會有什么提升。


同時它的工作方式?jīng)Q定了它的 flash 部分是不可尋址的,而且同時使用兩種介質(zhì)的作法使成本急劇增加,但是 NVDIMM-N 為業(yè)界提供了持久性內(nèi)存的新概念。目前市面上已經(jīng)有很多基于NVIMM-N的產(chǎn)品。


NVDIMM-F


指使用了 DRAM 的DDR3或者 DDR4 總線的flash閃存。我們知道由 NAND flash 作為介質(zhì)的 SSD,一般使用SATA,SAS 或者PCIe 總線。使用 DDR 總線可以提高最大帶寬,一定程度上減少協(xié)議帶來的延遲和開銷,不過只支持塊尋址。


NVDIMM-F 的主要工作方式本質(zhì)上和SSD是一樣的,因此它的延遲在 10的1次方微秒級。它的容量也可以輕松達(dá)到 TB 以上。


NVDIMM-P


這是一個目前還沒有發(fā)布的標(biāo)準(zhǔn) (Under Development),預(yù)計(jì)將與 DDR5 標(biāo)準(zhǔn)一同發(fā)布。按照計(jì)劃,DDR5將比DDR4提供雙倍的帶寬,并提高信道效率。這些改進(jìn),以及服務(wù)器和客戶端平臺的用戶友好界面,將在各種應(yīng)用程序中支持高性能和改進(jìn)的電源管理。


NVDIMM-P 實(shí)際上是真正 DRAM 和 flash 的混合。它既支持塊尋址, 也支持類似傳統(tǒng) DRAM 的按字節(jié)尋址。它既可以在容量上達(dá)到類似 NAND flash 的TB以上, 又能把延遲保持在10的2次方納秒級。


通過將數(shù)據(jù)介質(zhì)直接連接至內(nèi)存總線,CPU 可以直接訪問數(shù)據(jù),無需任何驅(qū)動程序或 PCIe 開銷。而且由于內(nèi)存訪問是通過64 字節(jié)的 cache line,CPU 只需要訪問它需要的數(shù)據(jù),而不是像普通塊設(shè)備那樣每次要按塊訪問。


Intel 公司在2018年5月發(fā)布了基于3D XPoint? 技術(shù)的Intel? Optane? DC Persistent Memory??梢哉J(rèn)為是NVDIMM-P 的一種實(shí)現(xiàn)。



Intel? Optane? DC Persistent Memory


2.2、硬件支持


應(yīng)用程序可以直接訪問NVDIMM-P, 就像對于傳統(tǒng) DRAM那樣。這也消除了在傳統(tǒng)塊設(shè)備和內(nèi)存之間頁交換的需要。但是向持久性內(nèi)存里寫數(shù)據(jù)是和向普通DRAM里寫數(shù)據(jù)共享計(jì)算機(jī)資源的。包括處理器緩沖區(qū), L1/L2緩存等。


需要注意的是, 要使數(shù)據(jù)持久, 一定要保證數(shù)據(jù)寫入了持久性內(nèi)存設(shè)備, 或者寫入了帶有掉電保護(hù)的buffer。軟件如果要充分利用持久性內(nèi)存的特性, 指令集架構(gòu)上至少需要以下支持:


寫的原子性


表示對于持久性內(nèi)存里任意大小的寫都要保證是原子性的, 以防系統(tǒng)崩潰或者突然掉電。IA-32 和 IA-64 處理器保證了對緩存數(shù)據(jù)最大64位的數(shù)據(jù)訪問 (對齊或者非對齊) 的寫原子性。因此, 軟件可以安全地在持久性內(nèi)存上更新數(shù)據(jù)。這樣也帶來了性能上的提升, 因?yàn)橄薱opy-on-write 或者 write-ahead-logging 這種保證寫原子性的開銷。


高效的緩存刷新(flushing)


出于性能的考慮, 持久性內(nèi)存的數(shù)據(jù)也要先放入處理器的緩存(cache)才能被訪問。經(jīng)過優(yōu)化的緩存刷新指令減少了由于刷新 (CLFLUSH) 造成的性能影響。


a. CLFLUSHOPT 提供了更加高效的緩存刷新指令


b. CLWB (Cache Line Write Back) 指令把cache line上改變的數(shù)據(jù)寫回內(nèi)存 (類似CLFLUSHOPT),但是無需讓這條 cache line 轉(zhuǎn)變成無效狀態(tài)(invalid, MESI protocol),而是轉(zhuǎn)換成未改變的獨(dú)占狀態(tài)(Exclusive)。CLWB 指令實(shí)際上是在試圖減少由于某條cache line刷新所造成的下次訪問必然的cache miss。


提交至持久性內(nèi)存(Committing to Persistence)


在現(xiàn)代計(jì)算機(jī)架構(gòu)下,緩存刷新的完成表明修改的數(shù)據(jù)已經(jīng)被回寫至內(nèi)存子系統(tǒng)的寫緩沖區(qū)。但是此時數(shù)據(jù)并不具有持久性。為了確保數(shù)據(jù)寫入持久性內(nèi)存,軟件需要刷新易失性的寫緩沖區(qū)或者在內(nèi)存子系統(tǒng)的其他緩存。新的用于持久性寫的提交指令 PCOMMIT 可以把內(nèi)存子系統(tǒng)寫隊(duì)列中的數(shù)據(jù)提交至持久性內(nèi)存。


非暫時store操作的優(yōu)化(Non-temporal Store Optimization)


當(dāng)軟件需要拷貝大量數(shù)據(jù)從普通內(nèi)存到持久性內(nèi)存中時(或在持久性內(nèi)存之間拷貝), 可以使用弱順序, 非暫時的store操作 (比如使用MOVNTI 指令)。因?yàn)镹on-temporal store指令可以隱式地使要回寫的那條cache line 失效, 軟件就不需要明確地flush cache line了(see Section 10.4.6.2. of Intel? 64 and IA-32 Architectures Software Developer's Manual, Volume 1)。


小結(jié)


上面介紹了NVDIMM 的幾種實(shí)現(xiàn)方式,以及為了發(fā)揮NVDIMM-P 的性能所做的硬件上的優(yōu)化和支持。下面會繼續(xù)介紹軟件方面的支持,包括編程模型、編程庫、SPDK方面的支持等。



在上篇的 NVDIMM介紹中,我們講解了NVDIMM幾種硬件上的實(shí)現(xiàn)方式,以及為了支持和優(yōu)化性能所做的硬件上的改變。接下來讓我們來討論一下為了充分發(fā)揮NVDIMM的性能,軟件方面做了哪些支持。有些人可能會有疑問, 為什么用起來這么麻煩?既然是持久性內(nèi)存,不是應(yīng)該關(guān)機(jī)什么樣, 開機(jī)什么樣, 就可以了嗎?其實(shí)目前來看, 這種想法還不會變?yōu)楝F(xiàn)實(shí)。因?yàn)槌薉RAM是易失性的,比如 cache,寄存器這種也是易失性的。僅僅把內(nèi)存做成持久性的也不能達(dá)成這樣的目的。另一個問題是, memory leak。如果發(fā)生了內(nèi)存泄漏,重啟一下就好了。那如果是持久性內(nèi)存的泄漏呢?這也是一個很棘手的問題。Pmem有些方面類似于內(nèi)存,也有些方面類似于存儲。但是,通常上我們不會認(rèn)為Pmem能夠替代內(nèi)存或存儲。其實(shí),可以把它看作是一種補(bǔ)充,填補(bǔ)了內(nèi)存和存儲之間巨大的差異。


SPDK 在 17.10 中開始引入對于Pmem的支持。Pmem在SPDK的bdev層暴露為一個塊設(shè)備,使用快設(shè)備接口和上層進(jìn)行通信。如下圖所示。



從圖中我們可以看到libpmemblk 把塊操作轉(zhuǎn)換成了字節(jié)操作。它是怎么做到的呢?在介紹libpmemblk 和 它背后的PMDK之前, 我們了解一下基礎(chǔ)知識。


mmap和DAX


首先,我們來看傳統(tǒng)的I/O方式, 即緩存I/O (Buffered I/O). 大多數(shù)操作系統(tǒng)默認(rèn)的IO操作方式都是緩存IO。該機(jī)制使IO數(shù)據(jù)緩存在操作系統(tǒng)的page cache 中, 也就是說, 數(shù)據(jù)會被先拷貝到操作系統(tǒng)的內(nèi)核空間的緩沖區(qū)中,然后才會從內(nèi)核空間的緩沖區(qū)拷貝到指定的用戶地址空間。



在Linux 中, 這種訪問文件的方式就是通過read/write 系統(tǒng)調(diào)用來實(shí)現(xiàn),如上圖。接下來, 我們比較一下內(nèi)存映射IO mmap()。


接下來, 我們比較一下內(nèi)存映射IO mmap()。


通過mmap獲得了對應(yīng)文件的一個指針,然后就像操作內(nèi)存一樣進(jìn)行賦值或者做memcpy/strcpy. 這種我們稱之為load/store操作(這種操作一般需要msync、fsync來落盤)。


mmap因?yàn)榻⒘宋募接脩艨臻g的映射關(guān)系,可以看作是把文件直接拷貝到用戶空間,減少了一次數(shù)據(jù)拷貝。但是mmap依然需要依靠page cache。



講完了mmap,那么DAX是什么呢?DAX即direct access,這個特性是基于mmap的。而DAX的區(qū)別在于完全不需要page cache,直接對存儲設(shè)備訪問,所以它就是為了NVDIMM而生的。應(yīng)用對于mmap的文件操作,是直接同步到NVDIMM上的。DAX目前在XFS, EXT4, Windows的 NTFS 上都已經(jīng)支持。需要注意的是, 使用這個模式,要對應(yīng)用程序或者文件系統(tǒng)進(jìn)行修改。



2.3、NVM Programming Model


NVM Programming Model 大致定義了三種使用方式。


2.3.1 最左邊Management 主要是通過driver提供的API對NVDIMM進(jìn)行管理, 比如查看容量信息、健康狀態(tài)、固件版本、固件升級、模式配置等等。


2.3.2 中間, 作為存儲快設(shè)備使用, 使用支持NVDIMM driver 的文件系統(tǒng)和內(nèi)核, 應(yīng)用程序不用做任何修改,通過標(biāo)準(zhǔn)文件接口訪問NVDIMM。


2.3.3 第三種, 基于文件系統(tǒng)的DAX特性,通過load/store操作,不需要page cache,同步落盤,沒有系統(tǒng)調(diào)用, 沒有中斷。這也是NVM Programming Model 的核心, 能夠充分釋放NVDIMM的性能優(yōu)勢。但它的缺點(diǎn)在于,應(yīng)用程序可能需要做一下改變。


PMDK


libpmemblk 實(shí)現(xiàn)了一個駐留在pmem中的同樣大小的塊的數(shù)組。里面每個塊對于突然掉電,程序崩潰等情況依然保持原子事務(wù)性。libpmemblk是基于libpmem庫的,libpmem是PMDK中提供的一個更底層的庫, 尤其是對于flush的支持。它能夠追蹤每次對pmem的store操作,并保證數(shù)據(jù)落盤為持久性數(shù)據(jù)。


除此以外, PMDK 還提供了其他編程庫, 比如 libpmemobj,libpmemlog,libvmmalloc 等。感興趣可以訪問其主頁獲取更多信息。


結(jié)語


至此,對于NVDIMM硬件和軟件上的不同, 大家都有了一個大致的認(rèn)識。Intel 在2018年5月發(fā)布了基于3D XPoint? 技術(shù)的Intel? Optane? DC Persistent Memory,引發(fā)了NVDIMM爆點(diǎn)。


2.4、上述內(nèi)容可做如下的概述


NVIDMM分類


NVIDMM-N:memory mapped DRAM,提供字符訪問接口,在三種產(chǎn)品中性能最好,容量最小


NVDIMM-F:memory mapped Flush,只提供塊設(shè)備接口。Nand Flush直接鏈接到Memory controller channel。


NVIDMM-P:Under Development,提供塊設(shè)備和字符設(shè)備訪問接口。


特性


NVDIMM-N:NVDIMM-N既可以用作緩存,又可以作為塊存儲設(shè)備來用。典型代表是類似intel 的AEP。


NVIDMM-F:不同于NVIDMM-N主要用作緩存,NVIDMM-F主要用作存儲??梢杂脕砜焖贅?gòu)建高密度的內(nèi)存池存儲池。


2.4.1 構(gòu)建基于NVDMM的文件系統(tǒng)


門為PMEM設(shè)計(jì)的文件系統(tǒng)是NOVA Filesystem,感興趣的讀者可以參考NOVA的github。


ZUFS作為來自于NetApp的一個項(xiàng)目,ZUFS的全稱是Zero-copy User Filesystem。聲稱是實(shí)現(xiàn)了完全的zero-copy,甚至文件系統(tǒng)的metadata都是zero-copy的。ZUFS主要是為了PMEM設(shè)計(jì),但是也可以支持傳統(tǒng)的磁盤設(shè)備,相當(dāng)于是FUSE的zero-copy版本,是對FUSE的性能的提升。


在用作DRAM的模式下:

2.4.2.1 支持全系統(tǒng)掉電保護(hù), 不少場景下為了防止異常掉電丟數(shù)據(jù)的commit and flush 的兩階段提交方法,可以省略成一階段的commit on write 的方法


2.4.2.2 為DRAM和SSD物理之間提供了一個新的存儲層


2.4.2.3 由于用作DRAM的時候,其訪問速度比SSD可能有1~3個數(shù)量級的提升,在一些文件系統(tǒng)中可以去掉對page cach的依賴,這樣反而更能控制上層業(yè)務(wù)的平均延時和服務(wù)穩(wěn)定性。


DAX:顧名思義,DAX就是Direct Access, bypass page cache。讀寫直接操作PMEM上的數(shù)據(jù),文件系統(tǒng)需要在mount 的時候,加入 "-o dax"參數(shù)。DAX極大地提高了文件系統(tǒng)在PMEM設(shè)備上的性能,但是還有一些問題沒有解決,比如:

文件系統(tǒng)的metadata還是需要使用page cache或buffer cache。

"-o dax" mount option是對整個文件系統(tǒng)的,不能做更細(xì)粒度的控制。


2.4.3 沒有一個API來告訴應(yīng)用訪問的文件是不是可以DAX訪問的。

3、NVDIMM在Linux下的實(shí)現(xiàn)

持久內(nèi)存是一種新型的計(jì)算機(jī)儲存,其速度接近動態(tài) RAM (DRAM),但同時具備 RAM 的按字節(jié)尋址能力以及固態(tài)硬盤 (SSD) 的性能;與傳統(tǒng)的 RAM 一樣,持久內(nèi)存直接安裝在主板上的內(nèi)存插槽中。因此,它的物理外形規(guī)格與 RAM 相同,以 DIMM 的形式提供。這些內(nèi)存稱為 NVDIMM:非易失性雙列直插式內(nèi)存模塊。


不過與 RAM 不同,持久內(nèi)存在多個方面類似于基于閃存的 SSD。后兩者采用固態(tài)內(nèi)存電路的形式,但除此之外,兩者都提供非易失性儲存:系統(tǒng)斷電或者重啟動后,內(nèi)存中的內(nèi)容會得到保留。使用這兩種媒體時,寫入數(shù)據(jù)的速度比讀取數(shù)據(jù)要慢;兩者都支持有限的重新寫入周期數(shù)。最后,與 SSD 一樣,如果在特定的應(yīng)用方案中更適合對持久內(nèi)存進(jìn)行扇區(qū)級別的訪問,則也可以這樣做。


不同的型號使用不同形式的電子儲存媒體,例如 Intel 3D XPoint,或者將 NAND 閃存與 DRAM 結(jié)合使用。另外,行業(yè)正在開發(fā)新形式的非易失性 RAM。這意味著,不同的供應(yīng)商和 NVDIMM 型號會提供不同的性能和持久性特征。


由于涉及的儲存技術(shù)處于早期開發(fā)階段,不同供應(yīng)商的硬件可能會施加不同的限制。因此,以下敘述適用于一般性的場合。


持久內(nèi)存的速度最多比 DRAM 要慢 10 倍,但比閃存要快大約 1000 倍??稍谄渲邪醋止?jié)重新寫入數(shù)據(jù),而不像在閃存中一樣,需要擦除整個扇區(qū),然后重新寫入數(shù)據(jù)。盡管重新寫入周期數(shù)有限,但大部分形式的持久內(nèi)存可以應(yīng)對數(shù)百萬次重新寫入,相比之下,閃存只能應(yīng)對數(shù)千個周期。


這會產(chǎn)生兩種重要后果:使用最新的技術(shù)無法運(yùn)行僅包含持久內(nèi)存的系統(tǒng),因此無法實(shí)現(xiàn)完全非易失性的主內(nèi)存,必須混合使用傳統(tǒng)的 RAM 和 NVDIMM。操作系統(tǒng)和應(yīng)用程序?qū)⒃趥鹘y(tǒng)的 RAM 中執(zhí)行,而 NVDIMM 可提供極速的補(bǔ)充性儲存。


由于不同供應(yīng)商的持久內(nèi)存的性能特征不同,程序員可能需要考慮到特定服務(wù)器中 NVDIMM 的硬件規(guī)格,包括 NVDIMM 的數(shù)量,以及它們可以裝入到哪些內(nèi)存插槽。顯然,這會對超級管理程序的使用、不同主機(jī)之間的軟件遷移等造成影響。


ACPI 標(biāo)準(zhǔn)版本 6 中定義了此新型儲存子系統(tǒng)。但是 libnvdimm 支持該標(biāo)準(zhǔn)頒布之前的 NVDIMM,可以相同的方式使用這些內(nèi)存。


3.1、持久內(nèi)存 (PMEM)


與 RAM 一樣,PMEM 儲存提供字節(jié)級別的訪問。使用 PMEM 時,單個名稱空間可以包含多個交錯式的 NVDIMM,使這些 NVDIMM 都可用作單個設(shè)備??赏ㄟ^兩種方式來配置 PMEM 名稱空間。


將 PMEM 與 DAX 搭配使用

為 Direct Access (DAX) 配置 PMEM 名稱空間后,訪問內(nèi)存時會繞過內(nèi)核的頁面超速緩存,并直接進(jìn)入媒體。軟件可以單獨(dú)直接讀取或?qū)懭朐撁Q空間的每個字節(jié)。


將 PMEM 與 BTT 搭配使用

與在傳統(tǒng)的磁盤驅(qū)動器中一樣,將按扇區(qū)訪問配置為以 BTT 模式運(yùn)行的 PMEM 名稱空間,而不是像在 RAM 中一樣采用按字節(jié)尋址的模式。某個轉(zhuǎn)換表機(jī)制會將訪問活動批處理成扇區(qū)大小的單元。


BTT 的優(yōu)點(diǎn)在于,儲存子系統(tǒng)會確保將每個扇區(qū)完全寫入到基礎(chǔ)媒體,如果某項(xiàng)寫入操作出于某種原因而失敗,則會取消注冊該操作。因此,無法在給定的扇區(qū)中進(jìn)行部分寫入。此外,對 BTT 名稱空間的訪問會由內(nèi)核超速緩存。缺點(diǎn)在于BTT 名稱空間不支持 DAX。


3.2、用于管理持久內(nèi)存的工具


要管理持久內(nèi)存,必須安裝 ndctl 包。安裝此包也會安裝 libndctl 包,后者提供一組用戶空間庫用于配置 NVDIMM。這些工具通過 libnvdimm 庫運(yùn)行。該庫支持三種類型的 NVDIMM:

PMEM

BLK

同步 PMEM 和 BLK。


ndctl 實(shí)用程序提供一系列有用的手冊頁,可使用以下命令訪問這些:


ndctl help subcommand



要查看可用子命令的列表請使用:


ndctl --list-cmds



可用的子命令包括:

  • version:顯示 NVDIMM 支持工具的當(dāng)前版本。

  • enable-namespace:使指定的名稱空間可供使用。

  • disable-namespace:阻止使用指定的名稱空間。

  • create-namespace:從指定的儲存設(shè)備創(chuàng)建新的名稱空間。

  • destroy-namespace:去除指定的名稱空間。

  • enable-region:使指定的區(qū)域可供使用。

  • disable-region:阻止使用指定的區(qū)域。

  • zero-labels:擦除設(shè)備中的元數(shù)據(jù)。

  • read-labels:檢索指定設(shè)備的元數(shù)據(jù)。

  • list:顯示可用的設(shè)備。

  • help:顯示有關(guān)工具用法的信息。


3.3、設(shè)置持久內(nèi)存


3.3.1 查看可用的 NVDIMM 儲存


可以使用 ndctl list 命令列出系統(tǒng)中所有可用的 NVDIMM。在以下示例中,系統(tǒng)包含三個 NVDIMM,這些 NVDIMM 位于單個三通道交錯集內(nèi)。


ndctl list --dimms

[ { "dev":"nmem2", "id":"8089-00-0000-12325476" }, { "dev":"nmem1", "id":"8089-00-0000-11325476" }, { "dev":"nmem0", "id":"8089-00-0000-10325476" }]



如果結(jié)合不同的參數(shù),ndctl list 還可以列出可用的區(qū)域。


注意:區(qū)域可能不會按數(shù)字順序顯示。


請注意,盡管只有三個 NVDIMM,但它們卻顯示為四個區(qū)域。



ndctl list --regions

[ { "dev":"region1", "size":68182605824, "available_size":68182605824, "type":"blk" }, { "dev":"region3", "size":202937204736, "available_size":202937204736, "type":"pmem", "iset_id":5903239628671731251 }, { "dev":"region0", "size":68182605824, "available_size":68182605824, "type":"blk" }, { "dev":"region2", "size":68182605824, "available_size":68182605824, "type":"blk" }]



空間以兩種不同的形式顯示:三個 BLK 類型的獨(dú)立 64 GB 區(qū)域,或者一個 PMEM 類型的合并 189 GB 區(qū)域,后者將三個交錯式 NVDIMM 中的所有空間表示為單個卷。


請注意,available_size 的顯示值與 size 的顯示值相同。這意味著尚未分配任何空間。


3.3.2 將儲存配置為使用 DAX 的單個 PMEM 名稱空間


第一個示例將三個 NVDIMM 配置成使用 Direct Access (DAX) 的單個 PMEM 名稱空間。第一個步驟是創(chuàng)建新的名稱空間。



ndctl create-namespace --type=pmem --mode=fsdax --map=memory{ "dev":"namespace3.0", "mode":"memory", "size":199764213760, "uuid":"dc8ebb84-c564-4248-9e8d-e18543c39b69", "blockdev":"pmem3"}



這會創(chuàng)建支持 DAX 的塊設(shè)備 /dev/pmem3。設(shè)備名稱中的 3 繼承自父區(qū)域編號(在本例中為 region3)。


--map=memory 選項(xiàng)從 NVDIMM 中設(shè)置出一部分 PMEM 儲存空間,以便可以使用這些空間來分配稱作結(jié)構(gòu)頁面的內(nèi)部內(nèi)核數(shù)據(jù)結(jié)構(gòu)。這樣,便可以將新的 PMEM 名稱空間與 O_DIRECT I/O 和 RDMA 等功能搭配使用。


最終 PMEM 名稱空間的容量之所以小于父 PMEM 區(qū)域,是因?yàn)橛幸徊糠殖志脙?nèi)存預(yù)留給了內(nèi)核數(shù)據(jù)結(jié)構(gòu)。


接下來,我們校驗(yàn)新的塊設(shè)備是否可用于操作系統(tǒng):


fdisk -l /dev/pmem3Disk /dev/pmem3: 186 GiB, 199764213760 bytes, 390164480 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytes


與其他任何驅(qū)動器一樣,在使用該設(shè)備之前,必須先將其格式化。在本示例中,我們使用 XFS 將其格式化:



mkfs.xfs /dev/pmem3


...


接下來,可將新的驅(qū)動器裝入到某個目錄:


mount -o dax /dev/pmem3 /mnt/pmem3


然后,可以校驗(yàn)是否獲得了一個支持 DAX 的設(shè)備:


mount | grep dax/dev/pmem3 on /mnt/pmem3 type xfs (rw,relatime,attr2,dax,inode64,noquota)


結(jié)果是,我們已獲得一個使用 XFS 文件系統(tǒng)格式化的,且裝有 DAX 的 PMEM 名稱空間。


對該文件系統(tǒng)中的文件進(jìn)行任何 mmap() 調(diào)用都會返回直接映射到 NVDIMM 上的持久內(nèi)存的虛擬地址,并且會完全繞過頁面超速緩存。對該文件系統(tǒng)中的文件進(jìn)行任何 fsync 或 msync 調(diào)用仍可確保將修改后的數(shù)據(jù)完全寫入到 NVDIMM。這些調(diào)用會刷新通過 mmap 映射在用戶空間中修改的任何頁面的關(guān)聯(lián)處理器超速緩存行。


3.3.2.1 去除名稱空間


在創(chuàng)建使用相同儲存的其他任何類型的卷之前,我們必須卸載此 PMEM 卷,然后將其去除。


首先卸載該卷:


umount /mnt/pmem3


然后禁用名稱空間:


ndctl disable-namespace namespace3.0disabled 1 namespace


然后刪除該卷:


ndctl destroy-namespace namespace3.0destroyed 1 namespace


3.3.3 創(chuàng)建使用 BTT 的 PMEM 名稱空間


在下一個示例中,我們將創(chuàng)建使用 BTT 的 PMEM 名稱空間。


ndctl create-namespace --type=pmem --mode=sector{ "dev":"namespace3.0", "mode":"sector", "uuid":"51ab652d-7f20-44ea-b51d-5670454f8b9b", "sector_size":4096, "blockdev":"pmem3s"}


接下來,校驗(yàn)新設(shè)備是否存在:


fdisk -l /dev/pmem3sDisk /dev/pmem3s: 188.8 GiB, 202738135040 bytes, 49496615 sectorsUnits: sectors of 1 * 4096 = 4096 bytesSector size (logical/physical): 4096 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytes


與前面配置的支持 DAX 的 PMEM 名稱空間一樣,這個支持 BTT 的 PMEM 名稱空間也會占用 NVDIMM 中的所有可用儲存。


注意:設(shè)備名稱 (/dev/pmem3s) 中的尾部 s 表示扇區(qū) (sector),可用于輕松辨別配置為使用 BTT 的名稱空間。


可按前一示例中所述格式化和裝入卷。


此處顯示的 PMEM 名稱空間不能使用 DAX,它會使用 BTT 來提供扇區(qū)寫入原子性。每次通過 PMEM 塊驅(qū)動程序進(jìn)行扇區(qū)寫入時,BTT 都會分配一個新的扇區(qū)來接收新數(shù)據(jù)。完全寫入新數(shù)據(jù)后,BTT 將以原子方式更新其內(nèi)部映射結(jié)構(gòu),使新寫入的數(shù)據(jù)可供應(yīng)用程序使用。如果在此過程中的任意時間點(diǎn)發(fā)生電源故障,則寫入內(nèi)容將會完全丟失,在這種情況下,應(yīng)用程序可以訪問其舊數(shù)據(jù),而這些數(shù)據(jù)仍舊保持不變。這可以防止出現(xiàn)所謂"扇區(qū)撕裂"的情況。


與其他任何標(biāo)準(zhǔn)塊設(shè)備一樣,可以使用某個文件系統(tǒng)格式化這個支持 BTT 的 PMEM 名稱空間,并在該文件系統(tǒng)中使用它。無法將該名稱空間與 DAX 搭配使用。但是,此塊設(shè)備中的文件的 mmap 映射將使用頁面超速緩存。


3.4、使用內(nèi)存(DRAM)模擬持久化內(nèi)存(Persistent Memory)


3.4.1 精簡版:一般內(nèi)核只需要兩步即可進(jìn)行持久性內(nèi)存模擬


1)配置 grub:


vim /etc/default/grub


在里面加入如下語句,前一個為要模擬的大小,后一個為模擬的持久性內(nèi)存在內(nèi)存中開始的位置。也就是從內(nèi)存4G開始,劃分32G來模擬持久性內(nèi)存。

GRUB_CMDLINE_LINUX="memmap=32G!4G"


2)更新 grub


update-grub && reboot


3.4.2 深入分析


現(xiàn)在真實(shí)的持久化內(nèi)存對于普通用戶來說還不可用,在進(jìn)行實(shí)驗(yàn)和測試的時候可能需要模擬持久化內(nèi)存來進(jìn)行使用,現(xiàn)在在一臺主機(jī)上測試劃分一塊內(nèi)存區(qū)域來進(jìn)行持久化內(nèi)存的模擬。


環(huán)境:Ubuntu 18.04,一臺普通的Dell臺式機(jī),運(yùn)行內(nèi)存 8G。


從Linux 4.0以來,Linux內(nèi)核就具備了對持久性內(nèi)存設(shè)備和仿真的支持,但為了便于配置,建議使用比4.2更新的內(nèi)核。在內(nèi)核中,使用對文件系統(tǒng)的DAX擴(kuò)展創(chuàng)建了一個支持PMEM的環(huán)境。某些發(fā)行版(如Fedora 24及更高版本)內(nèi)置了DAX/PMEM支持。


要了解內(nèi)核是否支持DAX和PMEM,可以使用以下命令:


# egrep '(DAX|PMEM)' /boot/config-`uname –r`


如果內(nèi)置了支持就會輸出類似如下的內(nèi)容:


    CONFIG_X86_PMEM_LEGACY_DEVICE=y    CONFIG_X86_PMEM_LEGACY=y    CONFIG_BLK_DEV_RAM_DAX=y    CONFIG_BLK_DEV_PMEM=m    CONFIG_FS_DAX=y    CONFIG_FS_DAX_PMD=y    CONFIG_ARCH_HAS_PMEM_API=y


但是很遺憾,我們的Ubuntu 18.04沒有內(nèi)置對DAX/PMEM的支持,所以輸入上述命令什么輸出都沒有。接下來就在Ubuntu 18.04上模擬持久化內(nèi)存。由于在Ubuntu 18.04上默認(rèn)沒有支持DAX和PMEM,所以需要我們重新編譯內(nèi)核,并在編譯內(nèi)核的配置選項(xiàng)中加入相關(guān)設(shè)置。


在這里重新編譯內(nèi)核,選擇的版本是Linux-4.15。


首先輸入命令:


make nconfig


進(jìn)入到如下的配置界面,配置PMEM和DAX


Device Drivers    NVDIMM Support        PMEM;        BLK;        <*>BTT        <*>NVDIMM DAX


配置PMEM


先進(jìn)入到Device Drivers中,在Device Drivers中找到NVDIMM Support,需要將菜單欄向下翻,里面的內(nèi)容并不只是我們看到的第一頁,NVDIMM Support 不在第一頁上。


進(jìn)入到NVDIMM Support 中,將里面的內(nèi)容都選中:


    PMEM;    BLK;    <*>BTT    <*>NVDIMM DAX


配置文件系統(tǒng)DAX


使用esc回到make nconfig的初始頁面


File System    <*>Direct Access support


處理器特性設(shè)置


使用esc回到make nconfig的初始頁面


Processor type and features    <*>Support non-standard NVDIMMs and ADR protected memory


其實(shí)上述所有過程,在Linux-4.15中默認(rèn)都已經(jīng)做了,也就是我只要 make nconfig就可以了。


所有這些配置好之后就開始編譯以及安裝內(nèi)核:


# make -j9# make modules_install install


然后進(jìn)入到新編譯的內(nèi)核Linux-4.15中


使用下面的命令打印出e820表:


dmesg | grep e820


得到如下的內(nèi)容:


    [0.000000] e820: BIOS-provided physical RAM map:    [0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d7ff] usable    [0.000000] BIOS-e820: [mem 0x000000000009d800-0x000000000009ffff] reserved...


上述的usable就是我們可以使用的,從中可以劃分部分區(qū)域來作為我們的持久化內(nèi)存,在這里建議選?。?/span>


[0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000021f5fffff] usable


其中0x0000000100000000就是4G,需要配置grub來設(shè)置:


vim /etc/default/grub


我在里面直接配置4G的空間來模擬持久化內(nèi)存,在grub中添加如下語句,表示空間大小為4G,從4G內(nèi)存開始的內(nèi)存空間用來模擬持久化內(nèi)存:

GRUB_CMDLINE_LINUX="memmap=4G!4G"


配置好后,更新grub:update-grub


使用下面的命令查看是否成功:


dmesg | grep user


可以看到,這塊區(qū)域已經(jīng)被模擬為了持久化內(nèi)存,然后我們在主機(jī) /dev目錄下可以看到pmem0的設(shè)備,至此就可以對模擬的持久化內(nèi)存進(jìn)行使用了。


使用方式--建立DAX文件系統(tǒng)


以ext4文件系統(tǒng)為例


mkdir /mnt/pmemdirmkfs.ext4 /dev/pmem0mount -o dax /dev/pmem0 /mnt/pmemdir


?這樣就將目錄 /mnt/pmem掛載到了持久化內(nèi)存上,這個目錄在之后的使用過程中就會用到。


參考來源:如何在英特爾? 架構(gòu)服務(wù)器上仿真持久性內(nèi)存


3.4.3 使用memmap內(nèi)核選項(xiàng)


pmem驅(qū)動程序允許用戶基于直接訪問文件系統(tǒng)(DAX)來使用EXT4和XFS。添加了一個新的memmap選項(xiàng),該選項(xiàng)支持保留一個或多個范圍的未分配內(nèi)存以用于模擬的持久內(nèi)存。memmap參數(shù)文檔在Linux內(nèi)核的相關(guān)頁面上。這個特性是在v4.0內(nèi)核中向上擴(kuò)展的。kernelv4.15引入了性能改進(jìn),推薦用于生產(chǎn)環(huán)境。


memmap選項(xiàng)使用memmap=nn[KMG]!ss[KMG]格式;其中nn是要保留的區(qū)域的大小,ss是起始偏移量,[KMG]指定大小(以千字節(jié)、兆字節(jié)或千兆字節(jié)為單位)。配置選項(xiàng)通過GRUB傳遞給內(nèi)核,更改GRUB菜單項(xiàng)和內(nèi)核參數(shù)在Linux發(fā)行版本之間有所不同,下面是一些常見Linux發(fā)行版的說明。有關(guān)更多信息,請參閱正在使用的Linux發(fā)行版和版本的文檔。


內(nèi)存區(qū)域?qū)?biāo)記為e820類型12(0xc),這在引導(dǎo)時可見,使用dmesg命令查看這些消息。

$ dmesg | grep e820


GRUB配置中的'memmap=4G!12G':保留4GB內(nèi)存,從12GB到16GB。有關(guān)詳細(xì)信息,請參閱如何為系統(tǒng)選擇正確的memmap選項(xiàng)。每個Linux發(fā)行版都有不同的方法來修改GRUB配置,按照發(fā)行版的文檔進(jìn)行操作即可,下面提供了一些常見的發(fā)行版以供快速參考。


1)、Ubuntu


$ sudo vim /etc/default/grubGRUB_CMDLINE_LINUX="memmap=4G!12G"


更新完成grub后重啟機(jī)器


$ sudo update-grub2


2)、RHEL


$ sudo vi /etc/default/grubGRUB_CMDLINE_LINUX="memmap=4G!12G"


正式開始更新grub配置

On BIOS-based machines:


$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg


On UEFI-based machines:


$ sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg


可以使用多個配置,下面建立了兩個2G大小的名稱空間


"memmap=2G!12G memmap=2G!14G" will create two 2GB namespaces, one in the 12GB-14GB memory address offsets, the other at 14GB-16GB.


主機(jī)重新啟動后,應(yīng)該存在一個新的/dev/pmem{N}設(shè)備,在GRUB配置中指定的每個memmap區(qū)域都有一個。這些可以使用ls/dev/pmem*顯示,命名約定從/dev/pmem0開始,并為每個設(shè)備遞增。/dev/pmem{N}設(shè)備可用于創(chuàng)建DAX文件系統(tǒng)。


使用/dev/pmem設(shè)備創(chuàng)建并裝載文件系統(tǒng),然后驗(yàn)證是否為裝入點(diǎn)設(shè)置了dax標(biāo)志,以確認(rèn)啟用了dax功能。下面展示了如何創(chuàng)建和掛載EXT4或XFS文件系統(tǒng)。


1)、XFS


mkfs.xfs?/dev/pmem0mkdir /pmem && mount -o dax /dev/pmem0 /pmemmount -v | grep /pmem/dev/pmem0 on /pmem type xfs (rw,relatime,seclabel,attr2,dax,inode64,noquota)


2)、EXT4


mkfs.ext4 /dev/pmem0mkdir /pmem && mount -o dax /dev/pmem0 /pmemmount -v | grep /pmem/dev/pmem0 on /pmem type ext4 (rw,relatime,seclabel,dax,data=ordered)


如何為系統(tǒng)選擇正確的memmap選項(xiàng)


為memmap內(nèi)核參數(shù)選擇值時,必須考慮起始地址和結(jié)束地址代表可用的RAM。使用或與保留內(nèi)存重疊可能導(dǎo)致?lián)p壞或未定義的行為,此信息可通過dmesg在e820表中輕松獲得。


下面的示例服務(wù)器具有16GiB內(nèi)存,"可用"內(nèi)存介于4GiB(0x100000000)和~16GiB(0x3ffffffff)之間:


$ dmesg | grep BIOS-e820[0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable[0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved[0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved[0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bffdffff] usable[0.000000] BIOS-e820: [mem 0x00000000bffe0000-0x00000000bfffffff] reserved[0.000000] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved[0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved[0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000003ffffffff] usable


要保留4GiB和16GiB之間的12GiB可用空間作為模擬持久內(nèi)存,語法如下:

memmap=12G!4G

重新啟動后一個新的用戶定義的e820表項(xiàng)顯示范圍現(xiàn)在是"persistent(type12)":


$ dmesg | grep user:[0.000000] user: [mem 0x0000000000000000-0x000000000009fbff] usable[0.000000] user: [mem 0x000000000009fc00-0x000000000009ffff] reserved[0.000000] user: [mem 0x00000000000f0000-0x00000000000fffff] reserved[0.000000] user: [mem 0x0000000000100000-0x00000000bffdffff] usable[0.000000] user: [mem 0x00000000bffe0000-0x00000000bfffffff] reserved[0.000000] user: [mem 0x00000000feffc000-0x00000000feffffff] reserved[0.000000] user: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved[0.000000] user: [mem 0x0000000100000000-0x00000003ffffffff] persistent (type 12)


fdisk或lsblk程序可用于顯示容量,例如:


# fdisk -l /dev/pmem0Disk /dev/pmem0: 12 GiB,  12884901888 bytes, 25165824 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytes


# lsblk /dev/pmem0NAME  MAJ:MIN RM SIZE RO TYPE MOUNTPOINTpmem0 259:0    0  12G  0 disk /pmem


注意:大多數(shù)Linux發(fā)行版都啟用了內(nèi)核地址空間布局隨機(jī)化(KASLR),這是由CONFIG_RANDOMIZE_BASE定義的。啟用后,內(nèi)核可能會在沒有警告的情況下使用先前為持久內(nèi)存保留的內(nèi)存,從而導(dǎo)致?lián)p壞或未定義的行為,因此建議在16GiB或更低的系統(tǒng)上禁用KASLR。有關(guān)詳細(xì)信息,請參閱對應(yīng)的Linux發(fā)行版文檔,因?yàn)槊總€發(fā)行版各不相同。


4、參考來源


Linux虛擬文件系統(tǒng)介紹

28.持久內(nèi)存

Persistent Memory Documentation

下一代存儲技術(shù)的先行: NVDIMM 你了解嗎(上)

下一代存儲技術(shù)的先行: NVDIMM 你了解嗎(下)

推薦閱讀

面試常問的 25+ 個 Linux 命令
這5種常用運(yùn)維監(jiān)控工具都不會用,還算什么運(yùn)維人?
Linux Shell 自動交互/人機(jī)交互的 3 種方法
pushd、popd、dirs、cd :讓切換目錄更方便
誰動了我的主機(jī)? 之活用 History 命令
一文帶你真正認(rèn)識 Linux 系統(tǒng)結(jié)構(gòu)
Linux 日志文件系統(tǒng)原來是這樣工作的
Linux 最常用命令:解決 95% 以上的問題
這些 Shell 分析服務(wù)器日志命令集錦,收藏好了~
Linux 操作系統(tǒng)加固

瀏覽 25
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 一区二区三区成人| 一级视频免费观看| 国产精品无码一区二区在线欢 | 色六月婷婷| 国产无码性爱| 国产成人精品国内自产拍免费看 | 成人激情视频A极| 蜜桃久久久| 久久久久9| 91精品人妻一区二区三区四区| 色天堂色天使| 18XXX亚洲HD护士JD| 天天弄天天操| 婷婷午夜精品久久久久久| 婷婷伊人久操网| 人人妻人人澡人人爽久久con| 91久久综合亚洲鲁鲁五月天| eeuss一区二区| 男人的天堂aa| 97超碰在线视| 欧美成人看片| 亚洲四区| 麻豆人妻换人妻好紧| 可以免费观看的av| 国产成人无码Av片在线公司 | 国产精品无码永久免费A片| 日韩成人视频在线观看| 亚洲成人视频免费观看| 欧美亚洲综合在线| 亚洲成人网站免费观看| 日韩成人无码影片| 无套免费视频欧美| 国产天堂| 99热网站| 狠狠穞A片一區二區三區| AA片视频| 91人妻人人澡人人爽精品| 久久久久久av| 日本综合在线| 老熟妇一区二区三区啪啪| 日韩在线观看网址| 亚洲精品美女视频| 久久国产精品伦子伦| 91无码视频| 亚洲综合免费观看| 亚洲一级AV| 亚洲性爱小说| 亚洲日韩免费| 中文字幕一级A片高清免| 日本精品在线观看视频| 久久香蕉人| 久久精品中文字幕| 日韩人妻精品无码制服| 91网站免费| 五月婷色| 日本边摸边吻奶边做爰| 你懂得视频| a亚洲a| 久久精品国产亚洲AV麻豆痴男| 日本在线| 爱搞搞就搞搞| 成人av免费在线观看| 亚洲人妻无码视频| 亚洲一区二区三区视频| 在线观看黄视频| 91久久婷婷亚洲精品成人| 高清无码视频在线| 中文字幕精品综合| 亚洲午夜无码精品专区| 国产亚洲午夜久久久成人电影| a√天堂中文8| 插菊综合网| 操逼一级| 婷婷色在线视频| 欧美另类色| 爆乳一区二区三区| 国产Av影视| 国产成人视频免费在线观看| 91精品人妻一区二区三区四区| 人人操天天| 国产18女人水真多免费看| 青青操逼| 91啪啪| 午夜激情av| 巜人妻初尝按摩师BD中字| 亚洲无码AV一区二区三区| 亚洲欧美激情小说| 超碰久操| 成人精品三级麻豆| 中文字幕国产精品| 中文区中文字幕免费看| 欧美日韩亚洲视频| 久久精品999| 91人妻人人澡人人爽人人玩| 无码视频中文字幕| 国产精品久久久大香蕉| 伊人久久AV| 男人天堂亚洲| 日韩特黄片| 国产一区在线播放| 亚洲伦理一区二区| 97超碰在线视| 亚洲天堂高清无码| 小小拗女BBw搡BBBB搡| 成人无码欧美大片免费看| 在线成人小视频| 大香蕉亚洲成人| 一区二区在线不卡| 无码字幕| gogogo高清在线完整免费播放韩国| 一区二区三区视频| 国产九九九| 亚洲视频无码| 亚洲免费视频在线观看| 大乳奶一级婬片A片| 大香蕉精品在线| 一区二区亚洲| 福利一区二区| 日韩欧美综合| 麻豆91免费看| 2012天天夜夜| 国产粉嫩小泬白浆18p| 在线观看av中文字幕| 操逼麻豆| 搞搞网日本9| 精品欧美激情精品一区| 国产精品久久久久久久久A| 在线免费看AV片| 中国一级黄色A片| 国产A级成人婬片1976| 国产成人精品无码片区在线观91 | 射久久| 91人妻无码一区二区三区| 热99精品| 欧美性爱在线观看| 91欧美黑人| 靠比免费| 国产18女人水真多免费看| 自拍第一页| 精品国产精品国产精品国产网站 | 欧美熟妇性爱| 亚洲成人视频在线| 精品人无码一区二区三区下载| 国产一级二级三级| 色婷婷亚洲| av在线资源| 中文字幕人妻精品一区| 国产精品三级在线| 欧美日韩大屌| 国产在线看片| 免费观看高清无码| 永久免费黄色视频| 岛国无码破解AV在线播放| 午夜激情视频网站| 中文字幕一区二区三区精华液| 日韩一区二区视频| 亚洲黄色电影| 国产精品爽爽久久久| 操逼操逼操逼操逼操逼操逼| 天堂性爱AV| 日本中文无码视频| www.豆花视频成人版| 蜜臀av在线观看| 波多野结衣av在线播放| 女人的天堂av| 黄片视频免费看| AV天堂国产| 日韩成人AV在线播放| 在线观看亚洲| 欧美aa片| 欧美一级特黄A片免费观看| 大肉大捧视频免费观看| 国产精品码一本A片| 大香久久| 热久久中文字幕| 国产成人精品AA毛片| 加勒比无码在线| 黄色内射在线播放| 五月天AV网站| 影音先锋91久久网| 久久久久99精品成人片三人毛片| 黄色在线视频网站| 亲子乱一区二区三区视频| 亚洲三级片在线播放| 国产成人+综合亚洲+天堂| AA久久| 亚欧久久| 在线观看的av| 久热久热| 国产精品欧美综合亚洲| 91密臀| 91黑人丨人妻丨国产丨| 成人精品视频网站| 97操逼| 熟妇无码| 欧美aa片| 99精品999| 熟女在线视频| 台湾成人综合网| 日韩在线视频播放| 国产一级美女操逼视频免费播放| 五月色婷婷综合| 自拍偷拍视频网| 激情伊人| а√最新版天堂中文在线| 影音先锋成人在线| 四虎在线视频观看96| 久久久精品在线| 在线免费看黄视频| 色吟AV| 国产综合激情| 欧美性猛交一区二区三区精品| 91AV一区二区三区| 婷婷高清无码| 超碰在线天天干| 狠狠撸视频| 天天日很很操| 天堂中文资源在线观看| 亚洲欧美日韩动漫| 制服丝袜大香蕉| 亚洲婷婷在线| 国产91综合一区在线观看| 亚洲第一成网站| 四川少妇bbbbbbbbb| 国产色情在线观看| 北条麻妃在线无码| 在线观看黄片网站| 五月天婷婷网站| 91丨熟女丨对白| 特级西西WWW888| 国产欧美日韩综合| 51伦理| 国产成人精品麻豆| 黄色成人片| 成人小说视频在线社区| A级片免费看| 四川少妇bbbbbbbbb| 日本精品在线| 操逼网址| 无码人妻精品一区二区蜜桃网站| 人人看人人色| 久久人人爱| 成人高清无码| 特级西西444www大胆高清图片 | 激情久久婷婷| 樱桃AV| 乱人伦欲国语对白| 99天天操| 人人人人人操| 久久精品视频久久| 欧美国产精品一区二区三区| 日韩人妻中文| 无码午夜| 手机在线一区| 亚洲国产无码在线观看| 夜夜骑天天操| 日韩中文字| 国产成人福利| 一级特黄AA片| 日韩中文字幕在线视频| 黄色免费视频网站| 成年人免费电影| 亚洲精品自拍| 操B视频在线| 性淫影院| 波多野结衣AV在线播放| 中文字幕韩日| 国产成人AV一区二区三区在线观看 | 一区二区三级片| 免费视频二区| 亚洲欧美日韩黑料吃瓜在线观看| 伊人大香焦网| 大肉大捧一出免费观看| 成人国产精品秘久久久网站| 一级aa免费视频| 大香蕉男人天堂| 97资源在线| 亚洲最新AV在线| 亚洲免费观看高清完整版在线观| 日韩精品人妻中文字幕| 成人蜜臀AV| 精品视频在线观看免费| 超碰成人在线观看| 一区在线看| 四川少妇bbbbbbbbb| 国产精品黄| 欧美性猛交XXXX乱大交| 亚洲在线第一页| 伊人网视频在线| 伊人日韩| 午夜亚洲福利| 色婷婷色| 无码AV天堂| 毛片黄色| 人人摸人人搞| 视频一区二| 7777影视电视剧在线观看官网 | 午夜无码福利视频| 免费观看黄色小视频| 青娱乐精品视频| 日日爱av| 精品人妻| 日本精品乱伦| 大伊香蕉久久| 女人的天堂av| 日本大香蕉在线视频| 国产精品久久久久久久久久久久久| 激情五月婷婷| 亚洲AV无码成人精品区h麻豆 | 日韩大吊| 青青视频网| 国产777| 国产一区二区不卡亚洲涩情| 五月在线| 三级片网站国产| 四虎成人免费视频| 成人性生活视频| 免费在线观看亚洲| 亚洲综合91| 日韩人妻精品一区二区| 青娱乐偷拍视频| 97国产| 蜜芽成人精品久久久视频| 日韩中文字幕不卡| 精品乱子伦一区二区三区下载| 操逼操123| 亚洲性爱在线| 插插插综合| 国产精品成人免费精品自在线观看 | 精品久久久久久久| 亚洲一区翔田千里无码| 在线一级片| 无码三级午夜久久人妻| 蜜桃视频一区二区| 影音先锋色站| 日本欧美一级| 脓肿是什么原因引起的,该怎么治疗| 九色麻豆| 草逼片| 久草在在线| 在线免费A片| 97精品人妻麻豆一区二区| 波多野结衣久久中文字幕| 亚洲大哥天天干| 青青草伊人大香蕉| 国产成人午夜| 欧美做受高潮白| 国产精品无码永久免费不卡| 操碰99| 日逼免费视频| 99国产精品久久久久久久| 大香蕉久操视频| 日韩乱伦毛片| 亚洲人成色777777无码| 柒私黄片| 国产嫩苞又嫩又紧AV在线| 高清无码在线视频| 国产丝袜自拍| 欧美成人一区二区三区| 国产乱子伦无码视频免费| 在线视频91| 成人免费视频一区二区三区 | 92丨九色丨偷拍老熟女| 久久久久久一区| 欧美日韩东京热| www日韩无码| 91麻豆香蕉| 好吊AV| 国产精品VA| 国产精品怡红院有限公司| 国产操逼大全| 北条麻妃电影九九九| 婷婷丁香五月亚洲| 青草中文娱乐网在线| 怡春院欧美| 亚洲免费在线视频| 影音先锋成人无码| 亚洲精品一区二区二区的游戏情况 | 91av在线播放| 北条麻妃波多波多野结衣| 日韩无码第一页| 成人午夜精品无码区| 伊人网在线视频| 国产高清久久| 中文字幕av高清片,中文在线观看 www一个人免费观看视频www | 日日爱99| 91av成人| 在线观看av资源| 全国最大成人网站| 特写毛茸茸BBwBBwBBw| 99久久综合| 免费无码毛片一区二区A片| 野花av| 天堂久久久久| 亚洲精品无码视频| 亚洲熟妇在线| 波多野结衣av在线观看窜天猴 | 亚洲视频欧洲视频| 国产A片免费观看| 大香蕉尹人在线视频| 中文字幕有码在线视频| 亚洲免费视频网站| 成人A片在线观看| 色逼逼网| 91天天综合| 无码一区二区久久| 欧美日韩不卡在线| 久久久穴| 日本视频在线免费| 欧美亚洲黄片| 国产精品久久久久久无人区| 少妇高潮视频| 九九九九国产| 97操逼网| 青青草原在线| 91成人视频免费观看| 国产高清一区| 国内自拍偷拍视频| 黑人又粗又大XXXXOO| 亚洲秘无码一区二区三区蜜桃中文| 综合色综合| 四虎黄色网址| 悠悠无码一区日韩妇女| 在线无码免费视频| 轻轻操内射无码| 青青青国产| 午夜精品成人| 欧美日韩精品一区二区| 婷婷中文在线| 91国内精品| 激情欧美| 国产手机精品视频| 亚洲91黄色片| 一级A片免费视频| 久久久精品中文字幕麻豆发布| 加勒比久久综合| 三级片网站在线观看| 一级艹逼| 国产成人午夜福利在线| xxx一区二区| 狠狠干综合| 性爱av天堂| 日韩无码一卡| 日本中文字幕无码| 操逼激情网| 色av影音先锋无吗一区| 91在线无码精品秘蜜桃入口 | 免费看黃色AAAAAA片| 男女AV网站| 午夜不卡视频| 成年片免费观看网站免费观看,亚洲+欧... | 婷婷无码成人精品俺来俺去| 婷婷五月丁香六月| 日韩AV中文| 婷婷丁香五月激情一区综合网| 欧美激情综合网| 五月天色婷婷丁香| jizzjizz国产| 久久九九综合| 囯产一级黄片| 国产精品无码怀孕软件| 欧美国产视频| 免费+无码+精品| 东方AV在线观看| 中文字幕av免费观看| 樱桃码一区二区三区| 国产三级片在线视频| 五月婷婷精品| 性做久久久久久| 东京热一区二区三区| 九色麻豆| 成人网站视频在线免费观看| 操欧美老女人| 日韩欧美黄| www五月天com| 亚洲永久免费| 俺也日| 黄色小说在线看| 波多野结衣成人视频| 无码国产一区二区三区四区五区| 韩国无码高清视频| 亚卅毛片| 久久高清无码视频| 成人无码网站在线观看| 一欧美日韩免费/看| 无码免费一区| 日本黄色三级| 韩国三级中文字幕HD久久精品| 国产三级91| 久久怡春院| 操小逼视频| 日韩精品人妻一区二区| 五月婷婷五月| 老女人AV| ⅴA日本成人| 欧美动态视频| 香蕉操逼| 思思热这里只有精品| 成人欧美一区二区三区黑人免费 | A亚洲天堂| 东京热在线免费观看| 青青草黄色视频| 超碰在线观看2407| 日本一区二区三区免费视频| 超碰福利在线| 自拍一区在线观看| 九色在线视频| 色综合综合色| 日韩一级免费电影| 国产夫妻AV| www插插| 男女操逼网站| 欧美XXX黑人XYX性爽| 三级电影久久麻豆| 日韩黄色在线观看| jizz在线观看| 2019国产精品| 操b视频在线免费观看| 婷婷五月天激情丁香| 午夜免费福利| 成人影音先锋| 台湾一区二区| 91无码人妻一区二区成人aⅴ| 麻豆视频在线播放| 亚洲国产精品成人va在线观看 | 日本一级大片| 伊人大香蕉视频在线观看| 亚洲精品久久久久毛片A级牛奶 | 日日爱99| 免费观看高清无码视频| 91人妻人人澡人人爽人人精品| www.91自拍| 日韩无码免费播放| 中国黄色学生妹一级片| 中文字幕视频免费| 你懂得视频在线观看| 在线观看一区二区视频| 黄色视频在线观看亚洲一区二区三区免费| 91无码在线观看| 婷婷丁香综合| 91亚洲精品久久久久久久久久久久 | 麻豆久久久久| HEYZO少婦AV無碼精品| 苍井空无码在线观看| 波多野结衣av一区| 欧美一道本在线| 国产激情欧洲在线观看一区二区三区| 色综合99| 日屄视频在线观看| 亚洲,制服,综合,中文| 日韩操逼网站| A片在线观看免费| 热99在线| 九九天堂| 丝袜毛片| 亚洲无码AV网站| h片免费网站| 人妻少妇偷人精品久久| AV在线资源观看| 无码视频一二三区| 精品女同一区二区三区四区外站在线| 在线观看毛片网站| 中文字幕淫乱视频欧美| 色青草影院久久综合| 在线免费黄色视频| 69av视频| 亚洲久久久| 一区二区在线视频| 午夜福利成人| 东京热综合| 亚洲精品区| 嫩BBB槡BBBB槡BBBB撒尿-百度 | 国产黄色免费视频| 国产成人精品av| 亚洲国产熟妇无码日韩| 久久第一页| 成人精品三级麻豆| 9色网| 亚洲国产婷婷香蕉A片| 色视频在线| 国产精品国产精品国产专区不| 99黄色| 国产成人av在线| 亚洲日韩中文无码| 操逼无码视频| 夜夜欢天天干| 人妻少妇精品| 东京热无码视频| 日韩精品欧美一区二区三区 | 国产青青草| 欧美中文字幕在线观看| 日韩操逼片| 韩国高清无码60.70.80| 天天干天天撸影视| 91国产福利| 99久久综合国产精品二区| 日本日逼网| 一级黄色电影免费在线观看| 午夜免费网站| 国产成人免费看| 欧美午夜成人一区二区三区| 日逼91| 人人色人人干| 18XXX亚洲HD护士JD| 伊人毛片| 国产欧美日本视频| 香蕉av在线| 亚洲婷婷视频| 啊啊啊啊啊在线观看| 九九综合网| 人人操综合| 人人草在线视频| 亚洲无码视频播放| 午夜大香蕉| 就去色色五月天| 91大屁股| 亚洲AV无码国产精品久久不卡| 日韩无码123| 亚洲国产精品成人久久蜜臀| 91新视频| 69天堂| 精品人妻一区二区乱码一区二区| 一级黄片在线| 中文字幕日本人妻| 中文无码日本一级A片人| 欧美成人在线网站| 一区二区三区在线观看| 国产精品后入| 欧美日韩免费观看视频| 久久国产乱子伦精品免费午夜...| 亚洲精品69| 久久艹大香蕉| 中文字幕av在线播放| 国产乱码精品一区二区三区的特点 | 免费成人一级片| 91蝌蚪视频在线观看| 亚洲无码系列| 中文字幕三级片在线观看| 人人操人人干人人妻| 成人一区在线观看| 黄色网页在线免费观看| 99精品视频在线播放免费| 青草伊人网| 色丁香五月| 天天日天天操天天摸天天干天日射天天插 | 性爱福利导航| 色婷婷影视| 亚洲免费小视频| 欧美AⅤ| 精品日韩在线视频| 99久久久无码国产精品性波多| 色欲一区二区| 狠狠操狠狠| 青青啪啪啪| 免费日韩一级| 99在线精品视频免费观看20| 俺也操| 久久久久亚洲AV成人片乱码| 国产女人18毛片水真多成人如厕| 亚洲视频免费在线| 婷婷五月天在线观看| 日韩Va| 精品aaa| 久久久婷婷婷| 欧美视频在线免费| 理论在线视频| 亚洲AV成人精品一区二区三区 | 国产一a毛一a毛A免费| 丰满少妇在线观看网站| 色图在线观看| 亚洲淫秽视频| 中文字幕久久人妻无码精品蜜桃 | 中文字幕-区二区三区四区视频中国 | 欧美视频A| 亚洲社区在线观看| 无码视频在线观看免费| 亚洲精品国产精品乱玛不99| 日本黄色A片免费看| 性爱无码网站| 强奸校花到高潮| 刘玥一级婬片A片AAA| 国产成人精| 中韩AV在线免费观看| 亚洲毛片网站| 另类罕见稀奇videos| 欧美aa片| 国产l精品久久久久久久久久| 69黄色视频| 国产污视频| 豆花AV在线| 亚洲高清视频在线观看| 国产91在线拍揄自揄拍无码九色| 蜜桃视频在线入口www| 天天色天天日| 亚洲成人在线免费| 97成人在线| 色色丁香五月天| 在线观看av网站| 欧美成人毛片AAAAAA| 成人一级黄色片| 国精产品一区一区三区四川| 欧美日韩一区二区三区在线电影| 久久久五月| 狠狠躁日日躁夜夜躁A片无码视频 强伦轩一区二区三区四区播放方式 | 久久久久久一区| 国产成人免费做爰视频| 91久久| 久久怡春院| www.亚洲天堂| XXXX国产| 日韩人妻无码一区二区| 国产无码a| 日韩无码人妻一区二区| 亚洲人在线观看| 亚洲三级在线视频| 久色视频福利| 久久一二三四| 国产激情综合五月久久| 无码乱| 亚洲人BBwBBwBBWBBw| 色播视频在线观看| 天天爽视频| 在线视频福利| 日韩福利电影| 成人动漫一区| 精品一区二区三区免费毛片| 久久午夜无码鲁丝午夜精品| 一级内射视频| 午夜福利电影无码| 欧美丰满美乳XXⅩ高潮www| 91白浆肆意四溢456| 男女日皮的视频| www.五月天婷婷| 色欲一区二区| 91香蕉在线观看视频在线播放| 国产无码观看| 日本在线免费| 五月停亭六月,六月停亭的英语| 大香蕉在线观看视频| 少妇高潮在线| 日韩欧美一区二区三区| 五月丁香激情婷婷| 日本高清一区二区高清免费视频| 久久理论| 人人摸人人操人人摸| 欧美一区二区三区成人片下载| 影视先锋久久| 人人搞人人摸| 天天干婷婷五月天| 伊人无码视频| 欧美女人日逼视频| 亚洲黄色电影在线观看| 在线观看操逼视频| 好吊AV| 一本一道无码免费看视频| 91AV一区二区三区| 青青草97国产精品麻豆| 午夜免费小视频| 亚洲日韩在线播放| 精品乱伦视频| 国产一毛a一毛a在线观看| 亚洲精品97久久中文字幕| 手机看片欧美+日韩+国产| 午夜福利码一区二区| 亚洲欧美日韩免费| 欧美77777| 污视频网站在线观看| 大香蕉精品欧美色综合2025| 99无码| 在线观看操逼| 国产精品一二三| 国产精品揄拍500视频| 爱逼爱操| 日本久久电影| 97视频国产| 国产激情电影| 日韩综合色| 国产精品av在线播放| 午夜无码在线观看视频| 日逼网站免费观看| 国产成人无码精免费视频| 欧美在线播放| 午夜精东影业传媒在线观看| AV-ThePorn| 成人在线免费| 欧美日韩国产成人在线| 午夜爱爱免费视频| 99在线精品视频| 成人短视频在线观看| 人妻熟女在线视频| 亚洲成人自拍| 亚欧成人| 97pao| 亚洲AV三级片| www.51av| 成人AV中文字幕| 69伊人| 欧洲三级片| 俺要操| 88在线无码精品秘入口九色| 亚洲精品一区中文字幕乱码| 第一色影院| 免费做a爰片77777| 91亚洲一区| 2025精品精品视频| 日韩精品电影| 国产AV播放| 97色情| 黄工厂精品视频在线播| 精品成人在线| 国产精品国产三级国产专区53| 欧美久色| 国产操逼网| 97超碰人妻| 国产欧美在线看| 99视频+国产日韩欧美| 久久久桃色| 专区无日本视频高清8| www.99国产| 欧美国产操逼| 国产成人视频在线播放| 久热精品视频| 中文无码在线视频| 日韩中文字幕无码中字字幕| 免费观看在线黄片| 欧美性爱天天| 国产亚洲色婷婷久久99精品91| 456亚洲影院| 99精品视频16在线免费观看| 亚洲色成人中文字幕在线| 欧美三级视频| 在线天堂视频| 成人免费视频国产免费麻豆,| 欧美国产综合| AV老鸭窝| 亚洲日韩中文字幕无码| 成人视频18| 亚洲无码在线免费观看视频| 一级性爱| 欧美伊人久久| 无码人妻久久一区二区三区蜜桃| 91福利视频网| 欧美性猛交一区二区三区| 亚洲黄片免费观看| 久草视频观看| 无码在线观看免费视频| 日韩高清成人无码| 国产精品在线免费| 激情乱伦网| 日韩东京热中文字幕| 欧美肏逼视频| 久久人人爱| 午夜天堂精品久久| 亚洲码无人客一区二区三区 | 草少妇| 国产一级AV片| 69人妻人人澡人人爽久久| 在线播放高清无码| 伊人影院在线免费观看| 好吊一区二区| 国产精品一麻了麻了| 黄色成人18| 操B在线观看| 国产一二三四区| 中文在线a√在线8| 超碰97在线免费观看| 午夜精品人妻无码| 日韩精品无码电影| 樱桃性爱视频| 日韩成人AV毛片| 一本久久综合亚洲鲁鲁五月天| 久久影院三级片| 丰满少妇一级片| 精品中文字幕在线播放| 五月天婷婷乱伦| 亚洲日韩在线播放| 亚洲无码免费看| 亚洲人成在线观看| 欧美77777| 一级女婬片A片AAAA片| 久久久久久亚洲AV无码专区| 北条麻妃网站| 亚洲无码黄片| 色五月婷婷综合| 国产福利一区二区| 亚洲欧洲精品在线| 91草视频| 色逼综合| www.91国产| 无码毛片一区二区三区人口| 国产日韩在线视频| 蜜桃av秘无码一区二区三欧| 欧美a√| 日韩v在线| 国产精品视频免费看| 色丁香五月婷婷| 天天爽天天射| 国产Av一区二区三区| 欧美熟妇精品一级A片视色| 毛片视频免费观看|