亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于OpenSSD的閃存轉(zhuǎn)換算法優(yōu)化①

        2018-05-17 06:47:04范長(zhǎng)軍江云飛
        關(guān)鍵詞:空閑粒度垃圾

        陸 政,范長(zhǎng)軍,江云飛

        (中電??导瘓F(tuán)有限公司,杭州 310012)

        硬盤(pán)作為主要存儲(chǔ)介質(zhì),在計(jì)算機(jī)中扮演著重要的角色.相比于傳統(tǒng)機(jī)械硬盤(pán),固態(tài)硬盤(pán)(Solid State Drive,SSD)具有讀寫(xiě)訪(fǎng)問(wèn)速度快、噪音小、耐用性高等優(yōu)點(diǎn),因此,SSD的大規(guī)模普遍使用是存儲(chǔ)技術(shù)未來(lái)發(fā)展的必然趨勢(shì).

        SSD由閃存組成[1],由于閃存具有讀寫(xiě)以頁(yè)為單位而擦除以塊為單位,覆寫(xiě)之前需要擦除的物理特性,因此一般的文件系統(tǒng)需要通過(guò)閃存轉(zhuǎn)換層(Flash Translation Layer,FTL)來(lái)操作SSD,以方便讀寫(xiě)SSD 上的數(shù)據(jù).

        FTL固件算法主要用于管理邏輯地址到物理地址的映射[2],起到地址映射管理的功能.由于閃存芯片有一定的擦寫(xiě)壽命,為在使用過(guò)程中保持損耗的均衡性,延長(zhǎng)SSD的使用壽命,一個(gè)成熟的FTL往往還包括內(nèi)存管理[3]、垃圾回收[4]、磨損均衡[5]等功能.

        FTL算法的優(yōu)劣是決定SSD性能的一個(gè)重要因素,而目前商業(yè)的SSD都不公開(kāi)其FTL固件的具體實(shí)現(xiàn),從研究角度而言,就無(wú)法去探索FTL的不同設(shè)計(jì)方案,以更好地發(fā)揮SSD的性能,也無(wú)法針對(duì)特定的應(yīng)用場(chǎng)景(如隨機(jī)小I/O為主的OLTP型業(yè)務(wù))對(duì)SSD的性能進(jìn)行優(yōu)化.OpenSSD項(xiàng)目[6]提供了一個(gè)開(kāi)放的SSD研究平臺(tái),以方便對(duì)SSD的固件進(jìn)行設(shè)計(jì)開(kāi)發(fā),并驗(yàn)證不同的FTL方案對(duì)SSD性能的影響.

        Cosmos OpenSSD擁有1GB內(nèi)存并具有多通道結(jié)構(gòu),其自帶的FTL算法實(shí)現(xiàn)簡(jiǎn)單,只能保證基本的I/O讀寫(xiě)操作.由于沒(méi)有充分利用OpenSSD的多通道結(jié)構(gòu)實(shí)現(xiàn)數(shù)據(jù)并行存取,且內(nèi)存空間使用率低下,所以其I/O讀寫(xiě)性能,特別是針對(duì)小粒度隨機(jī)寫(xiě)負(fù)載的性能,表現(xiàn)并不理想.本文工作基于 Cosmos OpenSSD 硬件平臺(tái)進(jìn)行設(shè)計(jì)開(kāi)發(fā),旨在通過(guò)設(shè)計(jì)并優(yōu)化其FTL算法來(lái)提升SSD整體存儲(chǔ)性能.

        1 研究現(xiàn)狀

        SSD一般由NAND Flash閃存構(gòu)成,單個(gè)NAND Flash的容量和性能有限,因此每個(gè)SSD一般由多個(gè)閃存整合而成[7],一個(gè)SSD的典型結(jié)構(gòu)[8]如圖1所示.

        圖1 SSD 結(jié)構(gòu)圖

        各大硬盤(pán)廠(chǎng)商在不斷提升閃存容量的同時(shí)也注重于主控算法的研究來(lái)充分發(fā)揮SSD的性能.FTL映射方法可以分為基于頁(yè)粒度的頁(yè)映射、基于塊粒度的塊映射和混合此兩種方法的混合映射.頁(yè)映射靈活卻需要占用較多的資源來(lái)保存映射表; 塊映射相反,它只需較少的資源保存映射表,但映射方法笨拙,性能不理想;因此在資源有限的嵌入式系統(tǒng)里最常用的是混合映射方法.

        目前最基本的混合映射FTL算法是Log-block算法[9].這種算法大部分塊以塊為單位映射,這些塊叫做Data Block; 少部分塊以頁(yè)為單位進(jìn)行映射,叫做 Log Block.上層下發(fā)的寫(xiě)I/O如果是一個(gè)新數(shù)據(jù),則根據(jù)偏移寫(xiě)入 Data Block; 如果是已有的數(shù)據(jù),則映射到 Log Block 上.當(dāng) Log Block 全部都寫(xiě)滿(mǎn)后,則進(jìn)行合并操作來(lái)回收Log Block,這引起了額外的讀、寫(xiě)和擦除操作.當(dāng)寫(xiě)I/O為主要負(fù)載時(shí),這種映射方式因主要以塊映射為主,對(duì)于大部分寫(xiě)請(qǐng)求來(lái)說(shuō)映射太廣,由其引發(fā)的垃圾回收操作將會(huì)嚴(yán)重影響存取性能.

        在Log-block算法的基礎(chǔ)上,后續(xù)發(fā)展出了BAST、FAST[10]等算法.BAST 算法里 Data Block 和Log Block 一一對(duì)應(yīng),以提高閃存的空間利用率,但在頻繁地隨機(jī)寫(xiě)I/O場(chǎng)景下,Log Block的利用率很低,并且頻繁進(jìn)行合并操作,導(dǎo)致隨機(jī)訪(fǎng)問(wèn)性能下降.FAST算法在BAST算法的基礎(chǔ)上進(jìn)行改進(jìn),使Log Block和 Data Block 比例為 1:N,大大提高了 Log Block 的利用率,但是在合并時(shí),一個(gè) Log Block 里會(huì)包含多個(gè)Data Block 里的數(shù)據(jù),垃圾回收會(huì)導(dǎo)致多次合并,影響性能.

        雖然混合映射機(jī)制折中了頁(yè)映射和塊映射的優(yōu)缺點(diǎn),適合嵌入式場(chǎng)景,但是仍存在閃存塊的利用率以及垃圾回收的效率低和隨機(jī)I/O性能差等問(wèn)題.并且隨著固態(tài)存儲(chǔ)技術(shù)的發(fā)展,SSD內(nèi)部通道數(shù)越來(lái)越多,容量越來(lái)越大,現(xiàn)在SSD內(nèi)嵌入式系統(tǒng)上擁有更為豐富和靈活的硬件資源,因此主要研究方向也逐漸從混合映射方式轉(zhuǎn)到頁(yè)映射方式[5].

        在頁(yè)級(jí)映射方法中,Aayush Gupta等人提出的DFTL(Demand-based FTL)算法[11]是典型的代表.DFTL是一種基于頁(yè)映射的算法,它的塊分為兩類(lèi): 一類(lèi)保存普通數(shù)據(jù),一類(lèi)保存頁(yè)映射表信息,同時(shí)在內(nèi)存中也保存一小部分頁(yè)映射表信息.根據(jù)時(shí)間局部性和空間局部性原理,上層的I/O請(qǐng)求命中時(shí),性能大幅度提升.但DFTL嚴(yán)重依賴(lài)于負(fù)載特性、讀寫(xiě)比例、數(shù)據(jù)請(qǐng)求間隔時(shí)間等因素,這使DFTL很可能因不適應(yīng)負(fù)載而導(dǎo)致頻繁地更新內(nèi)存中的映射表,從而造成性能下降.

        為解決以上問(wèn)題,本文在OpenSSD平臺(tái)下基于頁(yè)映射的方式設(shè)計(jì)出一種適合OpenSSD的緩存管理和閃存管理方法,以實(shí)現(xiàn)高性能的FTL算法.

        2 OpenSSD 的特性和結(jié)構(gòu)

        Cosmos OpenSSD是韓國(guó)漢陽(yáng)大學(xué)基于HYU Tiger3控制器制作出來(lái)的一款PCIe SSD.如圖2所示,OpenSSD上每4個(gè)芯片疊加成一個(gè)package,每個(gè)package擁有一個(gè)的獨(dú)立通道,該通道在package內(nèi)部與4個(gè)芯片通過(guò)way連接.OpenSSD閃存控制器上含有4個(gè)通道,每個(gè)通道連接一個(gè)package,所以最多可以進(jìn)行4通道和16條way的并行I/O處理操作.其中,同一個(gè)package上面的芯片共享一條I/O通道,但通道之間操作互不干擾,可以并發(fā)進(jìn)行.除了片選信號(hào),同一個(gè)package上的芯片使用同樣的命令信號(hào)而且每個(gè)芯片都有它自己的忙信號(hào).

        圖2 OpenSSD 閃存層次結(jié)構(gòu)圖

        如圖3所示,OpenSSD數(shù)據(jù)的傳輸過(guò)程分為兩部分: 1) 數(shù)據(jù)通過(guò)DMA在主機(jī)端和OpenSSD的緩存空間之間進(jìn)行交互; 2) 數(shù)據(jù)在 SSD緩存空間與NandFlash閃存介質(zhì)之間進(jìn)行傳輸.由此可知,OpenSSD的性能取決于主機(jī)端與SSD緩存之間的DMA傳輸速度以及SSD緩存與閃存之間的傳輸速度.

        圖3 OpenSSD 數(shù)據(jù)傳輸流

        經(jīng)測(cè)試,OpenSSD的DMA傳輸速度如圖4所示.通過(guò)分析可知,隨著粒度的增大,DMA傳輸速度也隨之增長(zhǎng).

        閃存讀寫(xiě)速度如圖5所示,由圖可知寫(xiě)I/O操作進(jìn)行way級(jí)別的并行化后,性能得到很大提升; 但在讀I/O操作時(shí),如果way屬于同一條通道,那么way數(shù)目的增長(zhǎng)對(duì)讀性能的提升幾乎沒(méi)有影響,而屬于不同通道的way數(shù)目增長(zhǎng)對(duì)于讀性能提升很大,因此讀操作way級(jí)別的并行效果不明顯,而通道級(jí)別的并行操作對(duì)性能有很大的提升.

        圖4 不同粒度下 DMA 傳輸速度

        在實(shí)際設(shè)計(jì)中,應(yīng)該根據(jù)這兩部分的實(shí)際速度來(lái)設(shè)計(jì)合理的FTL算法,以提升SSD的存儲(chǔ)性能.

        3 系統(tǒng)概要設(shè)計(jì)

        OpenSSD的FTL系統(tǒng)概要設(shè)計(jì)如圖6所示.主要包括兩個(gè)模塊: 緩存管理模塊和閃存管理模塊.緩存按功能被劃分為寫(xiě)緩存(write buffer)、讀緩存(read cache)以及用作DMA傳輸(DMA buffer)和垃圾回收的緩存區(qū)域(GC buffer).

        圖5 閃存讀寫(xiě)速度 (MB/s)

        圖6 系統(tǒng)概要設(shè)計(jì)

        如圖6所示,當(dāng)主機(jī)端對(duì)SSD進(jìn)行寫(xiě)I/O操作時(shí),數(shù)據(jù)首先會(huì)被暫存在 write buffer中,write buffer不會(huì)立刻將數(shù)據(jù)寫(xiě)入閃存,而是將數(shù)據(jù)在其中保留一段時(shí)間并做一些冷熱數(shù)據(jù)區(qū)分的處理,當(dāng)緩存區(qū)域空間達(dá)到一定的閾值之后,再將write buffer中的數(shù)據(jù)并行寫(xiě)回閃存以提升存取性能.

        NAND Flash芯片一般包含若干閃存塊,每個(gè)閃存塊包括若干頁(yè),閃存芯片的讀取和寫(xiě)入以頁(yè)為單位,擦除以塊為單位,數(shù)據(jù)在覆寫(xiě)之前需擦除.當(dāng) write buffer寫(xiě)回閃存時(shí),需要根據(jù)一定的規(guī)則來(lái)提供空閑塊,空閑塊中應(yīng)至少含有一個(gè)空閑頁(yè).當(dāng)塊中沒(méi)有空閑頁(yè)時(shí),數(shù)據(jù)無(wú)法再進(jìn)行寫(xiě)入,塊變?yōu)闊o(wú)效塊,也就是回收塊,需要等待垃圾回收進(jìn)行處理.上述過(guò)程的順利進(jìn)行,由相應(yīng)的閃存管理機(jī)制來(lái)保證.

        閃存管理模塊的作用是高效地管理閃存塊.如圖6所示,當(dāng) write buffer的數(shù)據(jù)寫(xiě)回閃存顆粒時(shí),閃存管理模塊提供空閑塊來(lái)供write buffer寫(xiě)回?cái)?shù)據(jù),隨著數(shù)據(jù)的不斷寫(xiě)入,空閑塊越來(lái)越少,回收塊越來(lái)越多,此時(shí)需要對(duì)數(shù)據(jù)塊進(jìn)行垃圾回收操作,因?yàn)镺penSSD閃存顆粒沒(méi)有回拷(CopyBack)功能,所以垃圾回收需要借助于緩存空間(GC buffer)來(lái)搬運(yùn)數(shù)據(jù).由于閃存數(shù)據(jù)塊中保存的數(shù)據(jù)冷熱程度不一致,導(dǎo)致閃存數(shù)據(jù)塊損耗的速度不一致,因此閃存管理模塊除了提供基礎(chǔ)的讀寫(xiě)功能外,還需要實(shí)現(xiàn)數(shù)據(jù)塊的磨損均衡,同時(shí)隨著數(shù)據(jù)塊的不斷寫(xiě)入擦除,當(dāng)寫(xiě)入擦除達(dá)到一定次數(shù)之后,數(shù)據(jù)塊將會(huì)損壞,無(wú)法正確讀寫(xiě)數(shù)據(jù),此時(shí)閃存管理模塊需要將這些數(shù)據(jù)塊隔離,不再參與讀寫(xiě).

        讀緩存主要用來(lái)預(yù)讀取和臨時(shí)存儲(chǔ)最近訪(fǎng)問(wèn)過(guò)的數(shù)據(jù),以提高主機(jī)讀I/O時(shí)的命中率.讀I/O請(qǐng)求時(shí),若數(shù)據(jù)在寫(xiě)緩存中,則直接讀取,若在讀緩存中,則數(shù)據(jù)與閃存中保持一致,也可直接訪(fǎng)問(wèn).如果讀取的數(shù)據(jù)在閃存中,則將數(shù)據(jù)讀取到緩存內(nèi)再返回主機(jī).當(dāng)上層讀取大段的數(shù)據(jù)時(shí),由于數(shù)據(jù)在緩存或閃存中是零散分布的,所以需要將數(shù)據(jù)集中到DMA buffer后再返回給上層.

        4 OpenSSD FTL 模塊設(shè)計(jì)

        4.1 寫(xiě)緩存模塊設(shè)計(jì)

        4.1.1 數(shù)據(jù)接收模塊設(shè)計(jì)

        對(duì)于閃存顆粒來(lái)說(shuō),小粒度的映射有利于提升整體性能和壽命.這是因?yàn)橛成淞6仍酱?會(huì)導(dǎo)致底層無(wú)效數(shù)據(jù)增長(zhǎng)越快,閃存顆??臻g利用率越低,并引起頻繁的垃圾回收操作,不僅會(huì)影響性能,也會(huì)極大降低閃存的使用壽命.

        OpenSSD擁有足夠大的緩存空間,為便于I/O性能的發(fā)揮和SSD壽命的延長(zhǎng),本文選擇4 KB大小的粒度來(lái)進(jìn)行映射.

        OpenSSD總共擁有1 GB的緩存空間地址,其中0x0000_0000到0x1000_0000已經(jīng)被系統(tǒng)使用,剩下的緩存空間本文將其劃分成5部分,分別為: 元數(shù)據(jù)信息存儲(chǔ)區(qū)、寫(xiě)緩存數(shù)據(jù)存儲(chǔ)區(qū)、讀緩存數(shù)據(jù)存儲(chǔ)區(qū)、DMA數(shù)據(jù)傳輸緩存區(qū)和垃圾回收數(shù)據(jù)存儲(chǔ)區(qū).

        寫(xiě)緩存數(shù)據(jù)存儲(chǔ)區(qū)用于接收上層下發(fā)的I/O數(shù)據(jù),上層下發(fā)的I/O數(shù)據(jù)中可能包含之前已經(jīng)寫(xiě)入緩存的數(shù)據(jù).如圖7(a)所示,假設(shè)緩存中已有數(shù)據(jù) 0、1、3、4,現(xiàn)收到下發(fā)的 I/O 數(shù)據(jù) 2、3,則數(shù)據(jù) 3 命中,如果將I/O數(shù)據(jù)直接寫(xiě)入緩存命中的地址,數(shù)據(jù)1將被數(shù)據(jù)2覆蓋掉,導(dǎo)致相鄰地址空間的數(shù)據(jù)被破壞.

        圖7 memcpy 相關(guān)方案

        為了解決這個(gè)問(wèn)題,提供了以下兩個(gè)解決方案:

        方案一如圖7(b)所示,上層數(shù)據(jù)首先通過(guò)DMA傳輸?shù)揭粋€(gè)固定的緩存空間,然后通過(guò)memcpy操作將數(shù)據(jù)移動(dòng)到寫(xiě)緩存數(shù)據(jù)存儲(chǔ)區(qū)中.

        方案一不僅能夠解決寫(xiě)緩存空間的問(wèn)題,而且在將緩存寫(xiě)回閃存時(shí),能夠根據(jù)數(shù)據(jù)冷熱程度區(qū)分選取邏輯頁(yè)進(jìn)行回寫(xiě),因?yàn)榧词咕彺婵臻g使用情況零散,在新I/O到來(lái)時(shí)也能用memcpy操作把數(shù)據(jù)從DMA buffer拷貝到 write buffer任意地址,因此可以將頻繁被訪(fǎng)問(wèn)的數(shù)據(jù)也就是熱數(shù)據(jù)盡量留在內(nèi)存空間,而把不常被訪(fǎng)問(wèn)的數(shù)據(jù)也就是冷數(shù)據(jù)寫(xiě)回閃存.把熱數(shù)據(jù)留在內(nèi)存空間而把冷數(shù)據(jù)寫(xiě)回閃存,一方面能夠提升數(shù)據(jù)的緩存命中率,提升寫(xiě)存儲(chǔ)性能; 另一方面由于閃存內(nèi)保存的是冷數(shù)據(jù),因此更新頻率相比熱數(shù)據(jù)更新頻率會(huì)低很多,從而減慢垃圾回收的速度,在提升系統(tǒng)存儲(chǔ)性能的同時(shí),也降低了閃存顆粒壽命衰減的速度.

        在方案一中,許多常用的FTL算法都可以借鑒過(guò)來(lái)使用,但是局限于OpenSSD的硬件特性,在實(shí)際使用場(chǎng)景中并不總是適用.這是因?yàn)镺penSSD的memcpy的速度只有60 MB/s,它與DMA的傳輸速度以及閃存的寫(xiě)速度處于一個(gè)數(shù)量級(jí),如果每次操作都要進(jìn)行緩慢的memcpy操作的話(huà),會(huì)極大地影響性能.當(dāng)進(jìn)行小粒度如OLTP類(lèi)的隨機(jī)寫(xiě)入時(shí),對(duì)應(yīng)的DMA傳輸速度為60 MB/s,這個(gè)時(shí)候即使緩存命中,相比直接執(zhí)行覆寫(xiě)的操作來(lái)說(shuō),加入一個(gè)memcpy的過(guò)程意味著緩存命中處理的時(shí)間多了一倍; 而當(dāng)進(jìn)行大粒度的寫(xiě)請(qǐng)求時(shí),比如視頻播放等業(yè)務(wù),OpenSSD的瓶頸在于閃存寫(xiě)入速度,即使所有通道和way并發(fā),閃存的寫(xiě)入速度也僅為 90 MB/s 左右,此時(shí)在寫(xiě)入操作時(shí)再加入 60 MB/s的memcpy操作,將會(huì)給性能帶來(lái)巨大的負(fù)面影響.

        針對(duì)以上問(wèn)題,本文提出了設(shè)計(jì)方案二: 如圖8,采用追加寫(xiě)的方式來(lái)接收上層數(shù)據(jù),即每次寫(xiě)入數(shù)據(jù)的時(shí)候接著上次請(qǐng)求的地址開(kāi)始寫(xiě)入.如果新數(shù)據(jù)已經(jīng)存在于緩存空間,則無(wú)效掉命中的緩存中的舊數(shù)據(jù),并將新數(shù)據(jù)按照上述方式接著上次請(qǐng)求的地址寫(xiě)入.如圖8所示,之前緩存中已有數(shù)據(jù) 0、1、3、4,現(xiàn)收到下發(fā)的寫(xiě)I/O數(shù)據(jù) 2、3,雖然數(shù)據(jù)3命中,但是將其無(wú)效掉,并將數(shù)據(jù)2、3接著上次請(qǐng)求的地址寫(xiě)入.這種方式屏蔽了大量的memcpy操作,有利于系統(tǒng)性能的提升.

        圖8 追加寫(xiě)方式

        本文選取的映射粒度為4 KB,小于OpenSSD的頁(yè)大小8 KB,方案二的這種追加寫(xiě)的方式會(huì)導(dǎo)致一些緩存空間保存的是無(wú)效的數(shù)據(jù),而閃存讀寫(xiě)只能以頁(yè)的大小8 KB為單位,導(dǎo)致將緩存數(shù)據(jù)寫(xiě)回閃存時(shí)可能會(huì)寫(xiě)回一些無(wú)效的數(shù)據(jù).在這種情況下,寫(xiě)緩存區(qū)域越大,出現(xiàn)無(wú)效數(shù)據(jù)的概率也會(huì)越大,因此寫(xiě)緩存區(qū)不宜過(guò)大.

        同時(shí)由于寫(xiě)緩存區(qū)的存在,所以寫(xiě)閃存操作和緩存DMA傳輸可以并發(fā)進(jìn)行.當(dāng)I/O請(qǐng)求為大粒度寫(xiě)I/O時(shí),因?yàn)椴捎米芳訉?xiě)的方式,當(dāng)數(shù)據(jù)命中時(shí)會(huì)無(wú)效掉之前的舊數(shù)據(jù),然后再寫(xiě)入更新的數(shù)據(jù),寫(xiě)緩存空間會(huì)被快速消耗,此時(shí)寫(xiě)緩存數(shù)據(jù)的存儲(chǔ)性能瓶頸在于閃存的寫(xiě)入速度,這表示當(dāng)寫(xiě)緩沖數(shù)據(jù)存儲(chǔ)區(qū)空間不足時(shí),速度將被閃存寫(xiě)入速度所限制; 如果是單個(gè)邏輯頁(yè)的寫(xiě)請(qǐng)求命中,則可以通過(guò)DMA傳輸直接進(jìn)行數(shù)據(jù)覆寫(xiě),但是比較圖4和圖5,4 K粒度時(shí)DMA傳輸速度比閃存并行的寫(xiě)入速度慢,8 K粒度時(shí)寫(xiě)入速度持平,這就代表寫(xiě)入小粒度數(shù)據(jù)時(shí),閃存的并行極限速度要比DMA傳輸速度更快,也就是說(shuō)因?yàn)閷?xiě)回速度更快,所以上層進(jìn)行DMA傳輸?shù)臅r(shí)候總能保證有空閑的內(nèi)存空間可寫(xiě),這個(gè)時(shí)候緩存命不命中對(duì)存儲(chǔ)性能影響不大.

        由上述分析可知,在方案二的情況下寫(xiě)緩沖數(shù)據(jù)存儲(chǔ)區(qū)的大小對(duì)存儲(chǔ)性能影響不大,再綜合考慮寫(xiě)回?zé)o效數(shù)據(jù)的因素,寫(xiě)緩沖數(shù)據(jù)存儲(chǔ)區(qū)的大小設(shè)置得比較小是合適的,因此本文設(shè)計(jì)寫(xiě)緩沖數(shù)據(jù)存儲(chǔ)區(qū)大小為 4 MB.

        4.1.2 寫(xiě)回模塊設(shè)計(jì)

        寫(xiě)回模塊用于將寫(xiě)緩沖中的數(shù)據(jù)下盤(pán)到閃存顆粒,其設(shè)計(jì)包含三個(gè)關(guān)鍵問(wèn)題: 一是寫(xiě)回?cái)?shù)據(jù)的選擇; 二是寫(xiě)回的時(shí)機(jī); 三是寫(xiě)回地址的選擇.

        由于采用追加寫(xiě)的方式來(lái)接收上層I/O數(shù)據(jù),因此采取FIFO的方式寫(xiě)回是比較合適的,這是因?yàn)槿绻扇^(qū)分冷熱數(shù)據(jù)的寫(xiě)回方式,緩存區(qū)的數(shù)據(jù)會(huì)過(guò)于零散,此時(shí)管理緩存需要大量進(jìn)行memcpy操作,會(huì)極大地影響性能.

        根據(jù)緩存寫(xiě)回的時(shí)機(jī)不同可以分為主動(dòng)寫(xiě)回機(jī)制和被動(dòng)寫(xiě)回機(jī)制,主動(dòng)寫(xiě)回機(jī)制是指控制器在緩存空間還有空閑的時(shí)候主動(dòng)進(jìn)行寫(xiě)回操作來(lái)清理緩存區(qū)的方式,這種方式的優(yōu)勢(shì)是對(duì)緩存區(qū)空間進(jìn)行預(yù)清理,以保證后續(xù)數(shù)據(jù)寫(xiě)入時(shí)緩存空間足夠.被動(dòng)寫(xiě)回是指緩存區(qū)達(dá)到一定閾值之后觸發(fā)寫(xiě)回操作,這是必須要實(shí)現(xiàn)的機(jī)制,在緩存數(shù)據(jù)量到達(dá)緩存區(qū)大小的閾值時(shí),觸發(fā)寫(xiě)回操作來(lái)清理緩存區(qū)供新數(shù)據(jù)寫(xiě)入.

        具體設(shè)計(jì)如圖9: 上層的新數(shù)據(jù)寫(xiě)入緩存FIFO隊(duì)列尾端,當(dāng)FIFO隊(duì)列大小達(dá)到寫(xiě)緩存空間的50%時(shí),觸發(fā)主動(dòng)寫(xiě)回操作.每次觸發(fā)寫(xiě)回操作時(shí),從FIFO隊(duì)列頭順序選擇 8 KB*16=128 KB 的數(shù)據(jù)寫(xiě)回,這樣能充分利用通道和way的并行.如果主動(dòng)寫(xiě)回速度大于上層負(fù)載下發(fā)I/O速度時(shí),則寫(xiě)緩存空間總是有地址可供寫(xiě)入; 如果上層負(fù)載I/O比較密集,則隨著數(shù)據(jù)的不斷寫(xiě)入,寫(xiě)緩存可用空間越來(lái)越小,當(dāng)寫(xiě)緩存可用空間不足以承載此次I/O時(shí),此時(shí)停止接收下發(fā)的I/O,進(jìn)行被動(dòng)寫(xiě)回操作,直到清理出可供上層I/O寫(xiě)入的空間后繼續(xù)進(jìn)行寫(xiě)I/O操作.

        寫(xiě)回?cái)?shù)據(jù)時(shí)涉及到寫(xiě)回地址的選擇,在邏輯地址和物理地址有著一定對(duì)應(yīng)關(guān)系的靜態(tài)地址分配方式下,并行寫(xiě)回需要額外的管理.此外,靜態(tài)地址分配也不適合不區(qū)分冷熱數(shù)據(jù)的緩存管理方式,這會(huì)導(dǎo)致各個(gè)閃存顆粒上面的數(shù)據(jù)冷熱不均勻,使磨損的不均衡性進(jìn)一步加劇.因此邏輯地址和物理地址沒(méi)有固定對(duì)應(yīng)關(guān)系的動(dòng)態(tài)地址分配方式成為了首選,一方面這種方式適合FIFO寫(xiě)回方式的并發(fā)操作,邏輯頁(yè)可以隨意寫(xiě)入任意的物理頁(yè)中,另一方面動(dòng)態(tài)地址分配也使各閃存顆粒的磨損更均勻,有利于磨損均衡.此時(shí)邏輯頁(yè)寫(xiě)回的原則為哪條通道空閑就使用哪條通道,最大程度地提高了并行度.當(dāng)OpenSSD將數(shù)據(jù)從寫(xiě)緩存寫(xiě)回閃存顆粒時(shí),被選擇進(jìn)行寫(xiě)回的128 KB數(shù)據(jù)將會(huì)被隨機(jī)分配到4個(gè)通道,16條Way下,以達(dá)到高效率地并行寫(xiě)回效果.

        4.1.3 方案二局限性

        當(dāng)負(fù)載擁有小數(shù)據(jù)量的熱數(shù)據(jù)或是反復(fù)寫(xiě)特定的數(shù)據(jù)時(shí),采用FIFO式的追加寫(xiě)方式管理緩存數(shù)據(jù)無(wú)法有效區(qū)分冷熱數(shù)據(jù),所以無(wú)法達(dá)到數(shù)據(jù)的高緩存命中率,此時(shí)性能表現(xiàn)略不理想,同時(shí)這也不利于對(duì)閃存塊進(jìn)行高效的磨損均衡管理.

        寫(xiě)緩沖數(shù)據(jù)存儲(chǔ)區(qū)大小設(shè)置為4 MB也會(huì)存在一些局限性,當(dāng)大粒度寫(xiě)I/O請(qǐng)求不是很頻繁時(shí),更大的緩沖區(qū)能夠緩存更多的數(shù)據(jù),具有大緩沖區(qū)的方案性能會(huì)更勝一籌.

        圖9 數(shù)據(jù)寫(xiě)回示意圖

        4.2 讀緩存模塊設(shè)計(jì)

        讀緩存數(shù)據(jù)存儲(chǔ)區(qū)的緩存單元與邏輯地址的映射關(guān)系由紅黑樹(shù)結(jié)構(gòu)來(lái)管理.紅黑樹(shù)是一種自平衡二叉查找樹(shù),和AVL樹(shù)類(lèi)似,在進(jìn)行插入和刪除操作時(shí)通過(guò)特定操作保持二叉樹(shù)的平衡,從而獲得較高的查找性能.在實(shí)際應(yīng)用中,紅黑樹(shù)是高效的,它可以在O(logn)時(shí)間內(nèi)執(zhí)行查找、插入和刪除操作,這里的n是樹(shù)中節(jié)點(diǎn)的數(shù)目.

        為了區(qū)分冷熱數(shù)據(jù),讓熱數(shù)據(jù)在內(nèi)存空間停留的時(shí)間盡可能長(zhǎng),而冷數(shù)據(jù)盡量保存在閃存中,讀緩存區(qū)需要一個(gè)緩存管理算法來(lái)管理冷熱數(shù)據(jù).由于OpenSSD的處理器性能不是太強(qiáng),過(guò)于復(fù)雜的管理算法會(huì)導(dǎo)致較大的時(shí)間開(kāi)銷(xiāo)從而影響存儲(chǔ)性能,因此選擇易于實(shí)現(xiàn)、代價(jià)小且性能還不錯(cuò)的LRU算法.

        讀緩存區(qū)域被劃分成許多小單元,設(shè)置每個(gè)單元的大小與閃存頁(yè)大小相同.這些小單元分為已使用和未使用兩種狀態(tài),未使用的緩存單元鏈接成一個(gè)FIFO隊(duì)列,當(dāng)從閃存讀數(shù)據(jù)到緩存空間時(shí),從FIFO隊(duì)列中取緩存頁(yè)使用; 已使用的緩存單元鏈接成一條鏈表,使用LRU算法管理.

        當(dāng)上層下發(fā)讀I/O命令時(shí),如果數(shù)據(jù)在閃存中,則需要將數(shù)據(jù)從閃存頁(yè)讀取到緩存空間,此時(shí)讀緩存從FIFO隊(duì)列中分配緩存空間以供數(shù)據(jù)從閃存讀入,讀取的數(shù)據(jù)根據(jù)LRU算法插入已使用單元的隊(duì)列中,并在紅黑樹(shù)中保存邏輯地址和內(nèi)存地址的映射關(guān)系,當(dāng)緩存空間不足時(shí),將LRU鏈表尾部的冷數(shù)據(jù)清除,騰出的緩存單位插入未使用的FIFO隊(duì)列中以繼續(xù)供讀緩存使用.

        如圖9所示,寫(xiě)閃存時(shí)可以進(jìn)行并行數(shù)據(jù)處理,同理在讀閃存時(shí)也可以做一些并行處理.根據(jù)圖5的測(cè)試結(jié)果可知,讀可以進(jìn)行通道級(jí)別的并行,因此在主機(jī)端讀取數(shù)據(jù)時(shí),若有通道空閑就從這個(gè)通道預(yù)讀一些數(shù)據(jù).預(yù)讀的策略是檢測(cè)讀取數(shù)據(jù)的相鄰幾個(gè)邏輯頁(yè)數(shù)據(jù)是否存在于空閑通道的閃存顆粒中,如果存在,則將其一并讀取到緩存中,這能顯著提升小粒度的順序讀性能.因?yàn)檫壿嬳?yè)粒度為4 K,而閃存物理頁(yè)大小為8 K,因此上層下發(fā)的一個(gè)小于4 K的讀I/O請(qǐng)求會(huì)額外讀取到另一個(gè)邏輯頁(yè),在一定程度提高了緩存命中率.

        4.3 數(shù)據(jù)一致性設(shè)計(jì)

        在引入緩存區(qū)之后,需要保證數(shù)據(jù)在緩存和閃存中的完整性和一致性,本文進(jìn)行以下設(shè)計(jì).

        寫(xiě)I/O數(shù)據(jù)時(shí),數(shù)據(jù)類(lèi)型為以下幾種情況之一:

        1) 若數(shù)據(jù)為全新數(shù)據(jù),將其寫(xiě)入 write buffer,此時(shí)數(shù)據(jù)只存在于write buffer中;

        2) 若數(shù)據(jù)本身已存在于 write buffer中,則無(wú)效之前write buffer中的舊數(shù)據(jù),并將新數(shù)據(jù)追加寫(xiě)入write buffer中;

        而采用正畸治療進(jìn)行口腔修復(fù)時(shí),可以保證基牙的平衡性,重新建立傾斜的基牙,在矯正牙間隙時(shí),可以避免亞牙冠與牙冠跟之間出現(xiàn)三角間隙,從而保證了牙列的整齊,也不會(huì)對(duì)牙齒造成明顯的傷害,將牙列中線(xiàn)和面中線(xiàn)的平衡性提高,并且對(duì)口腔的生理功能不會(huì)造成比較大影響,從而確保了有效的口腔修復(fù)[5-7]。在本次研究中,我院對(duì)45例患者采取了正畸治療,其治療的有效率、患者的滿(mǎn)意度以及并發(fā)癥的發(fā)生率均優(yōu)于對(duì)照組,差異具有統(tǒng)計(jì)學(xué)意義(P<0.05)。

        3) 若數(shù)據(jù)只存在于閃存中,直接將閃存中的數(shù)據(jù)無(wú)效,并將數(shù)據(jù)寫(xiě)入 write buffer中;

        4) 若數(shù)據(jù)在 read cache 中,此時(shí)數(shù)據(jù)在 read cache和閃存中一致,需要同時(shí)無(wú)效掉read cache和閃存中的數(shù)據(jù),并將數(shù)據(jù)寫(xiě)入 write buffer中.

        讀I/O數(shù)據(jù)時(shí): 當(dāng)數(shù)據(jù)已被預(yù)讀取到read cache中時(shí),保留閃存中的備份,這樣在清除讀緩存空間時(shí)無(wú)需將數(shù)據(jù)再次寫(xiě)閃存.

        4.4 閃存管理模塊設(shè)計(jì)

        閃存管理模塊主要用于管理閃存塊的使用.閃存塊可以分為3類(lèi): 空閑塊、當(dāng)前使用塊和待回收塊.空閑塊是指其中還有空閑頁(yè)可供寫(xiě)入數(shù)據(jù)的塊,當(dāng)前使用塊是指當(dāng)前正在使用的塊,待回收塊是已經(jīng)寫(xiě)滿(mǎn)數(shù)據(jù)且在回收鏈表中的塊.

        空閑塊以二叉堆的結(jié)構(gòu)進(jìn)行管理,以擦寫(xiě)次數(shù)為關(guān)鍵字,這可以保證每次尋找新塊時(shí)都選擇擦寫(xiě)次數(shù)最少的塊來(lái)寫(xiě)入數(shù)據(jù).

        當(dāng)閃存中沒(méi)有空閑塊可寫(xiě)時(shí),就要進(jìn)行垃圾回收操作.為了獲取最優(yōu)的存儲(chǔ)性能,此處使用貪婪垃圾回收算法,即每次都選取有效頁(yè)最少的塊進(jìn)行回收,這樣不僅可以進(jìn)行最少量的數(shù)據(jù)讀取從而減少垃圾回收對(duì)存儲(chǔ)性能的影響,同時(shí)也能最大限度地清理出閃存空間來(lái)供新數(shù)據(jù)寫(xiě)入.

        由于每個(gè)塊內(nèi)有256個(gè)頁(yè),故用257條鏈表分別表示無(wú)效頁(yè)數(shù)目從0到256的塊,每條鏈表的首尾元素由垃圾回收元數(shù)據(jù)信息表的head和tail來(lái)記錄,如圖10所示,當(dāng)一個(gè)塊內(nèi)的某個(gè)頁(yè)因?yàn)橛成潢P(guān)系更新而被無(wú)效時(shí),該塊的無(wú)效頁(yè)數(shù)目就會(huì)增長(zhǎng),此時(shí)就需要把它從舊的鏈表中移動(dòng)到新的鏈表中,這樣每條鏈表都鏈接著具有相同無(wú)效頁(yè)數(shù)目的塊.

        圖10 回收塊鏈表示意圖

        為了充分利用OpenSSD多通道結(jié)構(gòu),在某個(gè)晶圓觸發(fā)垃圾回收時(shí),其余晶圓無(wú)需等待它垃圾回收處理結(jié)束再繼續(xù)工作,而是每個(gè)晶元都選取一個(gè)回收塊進(jìn)行垃圾回收,因?yàn)樽x寫(xiě)擦除都可以并行操作,這就相當(dāng)于在原來(lái)回收1個(gè)塊的時(shí)間內(nèi)回收了16個(gè)塊,在單位時(shí)間騰出了更多的可用存儲(chǔ)空間,垃圾回收效率大大提高.

        5 實(shí)驗(yàn)評(píng)估

        5.1 測(cè)試參數(shù)設(shè)定

        下述實(shí)驗(yàn)基于OpenSSD平臺(tái),采用fio作為測(cè)試工具.fio是一個(gè)非常靈活的I/O性能測(cè)試工具,它可以通過(guò)多線(xiàn)程或多進(jìn)程模擬各種I/O操作.fio的工作過(guò)程很簡(jiǎn)單,通過(guò)寫(xiě)一個(gè)job文件來(lái)描述要訪(fǎng)真的I/O負(fù)載.運(yùn)行性能測(cè)試時(shí),fio從job文件讀取這些配置參數(shù),并根據(jù)這些參數(shù)描述啟動(dòng)相關(guān)仿真進(jìn)程(線(xiàn)程).

        在實(shí)際應(yīng)用中,通常以吞吐量和IOPS這兩個(gè)指標(biāo)作為測(cè)試基準(zhǔn).吞吐量指數(shù)據(jù)傳輸?shù)乃俣?常用在順序讀寫(xiě)基準(zhǔn)測(cè)試中; IOPS表示每秒讀寫(xiě)操作同樣大小的數(shù)據(jù)塊(如4 KB)的次數(shù),常用于隨機(jī)讀寫(xiě)基準(zhǔn)測(cè)試中.

        fio測(cè)試的主要相關(guān)設(shè)置參數(shù)如下: rw參數(shù)根據(jù)測(cè)試項(xiàng)目改變,隨機(jī)寫(xiě)為 randwrite,隨機(jī)讀為 randread,順序?qū)憺閣rite,順序讀為read; ioengine分為同步和異步,同步引擎可以通過(guò)多線(xiàn)程來(lái)增加請(qǐng)求密度,異步引擎則同時(shí)受線(xiàn)程數(shù)和隊(duì)列深度的影響,此處統(tǒng)一選擇同步引擎sync; 因?yàn)橐獪y(cè)試裸盤(pán)性能,故跳過(guò)操作系統(tǒng)的頁(yè)緩存 (page buffer),選擇 Direct I/O 的方式,設(shè)置相關(guān)配置項(xiàng)direct為1; 多線(xiàn)程測(cè)試時(shí)根據(jù)實(shí)際效果選擇256線(xiàn)程即可.

        隨機(jī)I/O性能測(cè)試的粒度大小設(shè)置為4 KB; 由于驅(qū)動(dòng)的限制,順序I/O性能測(cè)試的粒度設(shè)置為120 KB大小.

        隨機(jī)讀寫(xiě)和順序讀寫(xiě)的job配置文件大同小異,下面給出隨機(jī)寫(xiě)的job文件:

        5.2 優(yōu)化前后性能測(cè)試和分析

        (1) 隨機(jī)寫(xiě)性能測(cè)試

        隨機(jī)寫(xiě)測(cè)試IOPS結(jié)果如圖11.

        圖11 優(yōu)化前后隨機(jī)寫(xiě) IOPS 性能對(duì)比

        測(cè)試結(jié)果分析: 由圖11可知,優(yōu)化后FTL對(duì)于小粒度隨機(jī)寫(xiě)負(fù)載處理能力大幅度提高,其中在不觸發(fā)垃圾回收的情況下,單線(xiàn)程IOPS性能由原來(lái)的602提升到7007,性能提升11.6倍,多線(xiàn)程IOPS性能由原來(lái)的636提升到7538,性能提升11.8倍,在觸發(fā)垃圾回收的情況下單線(xiàn)程IOPS性能由原來(lái)的596提升到6014,性能提升10倍,多線(xiàn)程IOPS性能由631提升到6241,性能提升9.9倍.

        隨機(jī)寫(xiě)性能的大幅度提升是因?yàn)閮?yōu)化后FTL充分利用了通道級(jí)并行和芯片級(jí)并行,但是優(yōu)化后性能只有理論IOPS的一半左右,這是因?yàn)镃PU運(yùn)行代碼會(huì)占用大量的時(shí)間,從而增加了I/O請(qǐng)求的處理時(shí)間.

        (2) 順序?qū)懶阅軠y(cè)試

        順序?qū)憥挏y(cè)試結(jié)果如圖12,單位為KB/s.

        圖12 優(yōu)化前后順序?qū)憥捫阅軐?duì)比

        測(cè)試結(jié)果分析: 順序?qū)懶阅芎碗S機(jī)寫(xiě)性能一樣也得到大幅度提升,根本原因在于充分利用了通道和芯片的并行傳輸.其中不觸發(fā)垃圾回收情況下單線(xiàn)程順序?qū)憥捰?27 908 KB/s 提升到 56 374 KB/s,性能提升 2 倍,256 線(xiàn)程下帶寬由 39 090 KB/s提升到 195 336 KB/s,性能提升5倍; 觸發(fā)垃圾回收情況下單線(xiàn)程帶寬從 25 802 KB/s提升到 41 385 KB/s,性能提升 1.6 倍,256 線(xiàn)程條件下帶寬由 35 734 KB/s提升到 167 748 KB/s,性能提升 4.69 倍.

        (3) 隨機(jī)讀性能測(cè)試

        隨機(jī)讀IOPS測(cè)試結(jié)果如圖13.

        圖13 優(yōu)化前后隨機(jī)讀 IOPS 性能對(duì)比

        由圖13可知,在單線(xiàn)程無(wú)命中的情況下,讀IOPS由原來(lái)的2700提升到3902,全部命中的情況下讀IOPS由2700提升到16 482,這表示如果緩存命中的話(huà),讀取速率將大幅度提升.在256線(xiàn)程實(shí)際測(cè)試中,讀IOPS由3148提升到3847,提升幅度不大,這是因?yàn)閒io并沒(méi)有模擬出具有冷熱區(qū)分度的數(shù)據(jù),所以緩存命中不多,性能提升不大.

        (4) 與其余通用算法比較

        在方案一的基礎(chǔ)上,本文選取了幾種通用FTL算法,針對(duì)小粒度隨機(jī)寫(xiě)負(fù)載進(jìn)行測(cè)試,并與本文方案進(jìn)行比較,結(jié)果如圖14所示.

        圖14 本文方案和幾種通用FTL算法比較

        由圖14可知,針對(duì)緩存冷熱數(shù)據(jù)進(jìn)行處理的通用FTL算法在OpenSSD上表現(xiàn)的實(shí)際性能與本文提出的方案存在一定差距,主要原因是因?yàn)榇罅康膍emcpy操作抵消了緩存命中帶來(lái)的好處.

        6 總結(jié)

        本文分析了OpenSSD平臺(tái)的硬件特性,考慮了影響其I/O讀寫(xiě)性能的各類(lèi)因素,提出了一種適用于該平臺(tái)的FTL方案.通過(guò)與幾種通用FTL算法的對(duì)比實(shí)驗(yàn),證明該方案有效提升了OpenSSD的系統(tǒng)性能,特別地,針對(duì)小粒度寫(xiě)I/O負(fù)載的性能提升最為明顯.

        參考文獻(xiàn)

        1Van Houdt B.On the power of asymmetry and memory in flash-based SSD garbage collection.Performance Evaluation,2016,(97): 1–15.[doi: 10.1016/j.peva.2015.11.002]

        2Hu Y,Jiang H,Feng D,et al.Achieving page-mapping FTL performance at block-mapping FTL cost by hiding address translation.Proceedings of the 26th Symposium on Mass Storage Systems and Technologies.Incline Village,NV,USA.2010.1–12.

        3Lee JH,Jung BS.High performance NAND flash memory system with a data buffer.IEICE Transactions on Fundamentals of Electronics,Communications and Computer Sciences,2013,E96.A(12): 2645–2651.[doi: 10.1587/transfun.E96.A.2645]

        4Chang LP,Liu YS,Lin WH.Stable greedy: Adaptive garbage collection for durable page-mapping multichannel SSDs.ACM Transactions on Embedded Computing Systems(TECS),2016,15(1): 13.

        5Wei DB,Deng LB,Zhang P,et al.A page-granularity wearleveling (PGWL) strategy for NAND flash memory-based sink nodes in wireless sensor networks.Journal of Network and Computer Applications,2016,(63): 125–139.[doi: 10.1016/j.jnca.2015.12.010]

        6OpenSSD Project.http://www.OpenSSD-project.org/wiki/The_ OpenSSD_Project.[2015-09-15]

        7Kim J,Seo S,Jung D,et al.Parameter-aware I/O management for Solid State Disks (SSDs).IEEE Transactions on Computers,2012,61(5): 636 –649.[doi: 10.1109/TC.2011.76]

        8He D,Wang F,Jiang H,et al.Improving hybrid FTL by fully exploiting internal SSD parallelism with virtual blocks.ACM Transactions on Architecture and Code Optimization(TACO),2014,11(4): 43.

        9Seo D,Shin D.Recently-evicted-first buffer replacement policy for flash storage devices.IEEE Transactions on Consumer Electronics,2008,54(3): 1228–1235.[doi: 10.11 09/TCE.2008.4637611]

        10Kwon SJ,Ranjitkar A,Ko YB,et al.FTL algorithms for NAND-type flash memories.Design Automation for Embedded Systems,2011,15(3-4): 191–224.[doi: 10.1007/s10617-011-9071-9]

        11Gupta A,Kim Y,Urgaonkar B.DFTL: A flash translation layer employing demand-based selective caching of pagelevel address mappings.ACM SIGARCH Computer Architecture News,2009,37(1): 229 –240.[doi: 10.1145/25 28521]

        猜你喜歡
        空閑粒度垃圾
        恩賜
        詩(shī)選刊(2023年7期)2023-07-21 07:03:38
        垃圾去哪了
        粉末粒度對(duì)純Re坯顯微組織與力學(xué)性能的影響
        基于矩陣的多粒度粗糙集粒度約簡(jiǎn)方法
        那一雙“分揀垃圾”的手
        “鳥(niǎo)”字謎
        小讀者之友(2019年9期)2019-09-10 07:22:44
        倒垃圾
        彪悍的“寵”生,不需要解釋
        倒垃圾
        基于粒度矩陣的程度多粒度粗糙集粒度約簡(jiǎn)
        亚洲日韩欧美一区二区三区| 亚洲桃色视频在线观看一区| 麻豆蜜桃av蜜臀av色欲av| 精品人妻人人做人人爽夜夜爽| 久久AV中文综合一区二区| 中文字幕中文一区中文字幕| 性av一区二区三区免费| 免费a级作爱片免费观看美国| 亚洲精品高清你懂的| 国产视频精品一区白白色| av天堂亚洲另类色图在线播放| 欧美成人精品a∨在线观看| 狠狠色噜噜狠狠狠狠888奇禾| 久久99亚洲综合精品首页| 国产夫妻精品自拍视频| 国产三级在线观看完整版| 人妻熟妇乱又伦精品视频app | 婷婷久久久亚洲欧洲日产国码av| 亚洲午夜福利精品久久| 亚洲福利视频一区二区三区 | 在线观看热码亚洲av每日更新| 在线视频这里只有精品| 午夜亚洲精品视频网站| 亚洲成熟女人毛毛耸耸多| 精品国模一区二区三区| 国产精品国产三级国产专播| 蜜桃成熟时日本一区二区| 亚洲国产精彩中文乱码av| 日韩精品无码久久久久久 | 欧美一级鲁丝片免费一区| 精品一区二区在线观看免费视频 | 丰满五十六十老熟女hd| 日韩一区二区三区中文字幕| 亚洲国产中文字幕无线乱码 | 免费a级毛片又大又粗又黑| 中文字幕亚洲情99在线 | 99久久久无码国产精品9| 国产在线视频网站不卡| 亚洲综合极品美女av| 国产乱子伦一区二区三区| 亚洲中文字幕不卡无码|