精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入理解Linux 的Page Cache

系統(tǒng) Linux
大家好,我是 Peter,昨天群里有小伙伴咨詢page cache的問題,看到網(wǎng)上有篇不錯(cuò)的文章,分享給大家。

 大家好,我是 Peter,昨天群里有小伙伴咨詢page cache的問題,看到網(wǎng)上有篇不錯(cuò)的文章,分享給大家。

1、Page Cache

1.1 Page Cache 是什么?

為了理解 Page Cache,我們不妨先看一下 Linux 的文件 I/O 系統(tǒng),如下圖所示:

Figure1. Linux 文件 I/O 系統(tǒng)

上圖中,紅色部分為 Page Cache。可見 Page Cache 的本質(zhì)是由 Linux 內(nèi)核管理的內(nèi)存區(qū)域。我們通過 mmap 以及 buffered I/O 將文件讀取到內(nèi)存空間實(shí)際上都是讀取到 Page Cache 中。

1.2 如何查看系統(tǒng)的 Page Cache?

通過讀取 /proc/meminfo 文件,能夠?qū)崟r(shí)獲取系統(tǒng)內(nèi)存情況: 

  1. $ cat /proc/meminfo  
  2. ...  
  3. Buffers:            1224 kB  
  4. Cached:           111472 kB  
  5. SwapCached:        36364 kB  
  6. Active:          6224232 kB  
  7. Inactive:         979432 kB  
  8. Active(anon):    6173036 kB  
  9. Inactive(anon):   927932 kB  
  10. Active(file):      51196 kB  
  11. Inactive(file):    51500 kB  
  12. ...  
  13. Shmem:             10000 kB  
  14. ... 
  15. SReclaimable:      43532 kB  
  16. ... 

根據(jù)上面的數(shù)據(jù),你可以簡單得出這樣的公式(等式兩邊之和都是 112696 KB):

  1. Buffers + Cached + SwapCached = Active(file) + Inactive(file) + Shmem + SwapCached 

兩邊等式都是 Page Cache,即:

  1. Page Cache = Buffers + Cached + SwapCached 

通過閱讀 1.4 以及 1.5 小節(jié),就能夠理解為什么 SwapCached 與 Buffers 也是 Page Cache 的一部分。

題外話,小伙伴答案:

內(nèi)核計(jì)算源碼(linux 2.6.19):

內(nèi)核算法:Cached  = files - SwapCached - Buffers;

Buffers + Cached + SwapCached = Active(file) + Inactive(file) + Shmem + SwapCached

公式推出來的

Cached = Active(file) + Inactive(file) + Shmem - Buffers ;

由此可見,這個(gè)Cached 并不等于Active(file) + Inactive(file) ;

這個(gè)cache包含很多 :

  1.   含有普通文件數(shù)據(jù)的頁‘;
  2.   含有目錄的頁;
  3.   含有直接從塊設(shè)備文件(跳過文件系統(tǒng))讀出的數(shù)據(jù)的頁;
  4.   含有用戶態(tài)進(jìn)程數(shù)據(jù)的頁;
  5.   屬于特殊文件系統(tǒng)文件的頁,如shm;

1.3 page 與 Page Cache

page 是內(nèi)存管理分配的基本單位, Page Cache 由多個(gè) page 構(gòu)成。page 在操作系統(tǒng)中通常為 4KB 大小(32bits/64bits),而 Page Cache 的大小則為 4KB 的整數(shù)倍。

另一方面,并不是所有 page 都被組織為 Page Cache。

Linux 系統(tǒng)上供用戶可訪問的內(nèi)存分為兩個(gè)類型[2],即:

  •  File-backed pages:文件備份頁也就是 Page Cache 中的 page,對應(yīng)于磁盤上的若干數(shù)據(jù)塊;對于這些頁最大的問題是臟頁回盤;
  •  Anonymous pages:匿名頁不對應(yīng)磁盤上的任何磁盤數(shù)據(jù)塊,它們是進(jìn)程的運(yùn)行是內(nèi)存空間(例如方法棧、局部變量表等屬性);

為什么 Linux 不把 Page Cache 稱為 block cache,這不是更好嗎?

這是因?yàn)閺拇疟P中加載到內(nèi)存的數(shù)據(jù)不僅僅放在 Page Cache 中,還放在 buffer cache 中。例如通過 Direct I/O 技術(shù)的磁盤文件就不會(huì)進(jìn)入 Page Cache 中。當(dāng)然,這個(gè)問題也有 Linux 歷史設(shè)計(jì)的原因,畢竟這只是一個(gè)稱呼,含義隨著 Linux 系統(tǒng)的演進(jìn)也逐漸不同。

下面比較一下 File-backed pages 與 Anonymous pages 在 Swap 機(jī)制下的性能。

內(nèi)存是一種珍惜資源,當(dāng)內(nèi)存不夠用時(shí),內(nèi)存管理單元(Memory Mangament Unit)需要提供調(diào)度算法來回收相關(guān)內(nèi)存空間。內(nèi)存空間回收的方式通常就是 swap,即交換到持久化存儲(chǔ)設(shè)備上。

File-backed pages(Page Cache)的內(nèi)存回收代價(jià)較低。Page Cache 通常對應(yīng)于一個(gè)文件上的若干順序塊,因此可以通過順序 I/O 的方式落盤。另一方面,如果 Page Cache 上沒有進(jìn)行寫操作(所謂的沒有臟頁),甚至不會(huì)將 Page Cache 回盤,因?yàn)閿?shù)據(jù)的內(nèi)容完全可以通過再次讀取磁盤文件得到。

Page Cache 的主要難點(diǎn)在于臟頁回盤,這個(gè)內(nèi)容會(huì)在第二節(jié)進(jìn)行詳細(xì)說明。

Anonymous pages 的內(nèi)存回收代價(jià)較高。這是因?yàn)?Anonymous pages 通常隨機(jī)地寫入持久化交換設(shè)備。另一方面,無論是否有更操作,為了確保數(shù)據(jù)不丟失,Anonymous pages 在 swap 時(shí)必須持久化到磁盤。

1.4 Swap 與缺頁中斷

Swap 機(jī)制指的是當(dāng)物理內(nèi)存不夠用,內(nèi)存管理單元(Memory Mangament Unit)需要提供調(diào)度算法來回收相關(guān)內(nèi)存空間,然后將清理出來的內(nèi)存空間給當(dāng)前內(nèi)存申請方。

Swap 機(jī)制存在的本質(zhì)原因是 Linux 系統(tǒng)提供了虛擬內(nèi)存管理機(jī)制,每一個(gè)進(jìn)程認(rèn)為其獨(dú)占內(nèi)存空間,因此所有進(jìn)程的內(nèi)存空間之和遠(yuǎn)遠(yuǎn)大于物理內(nèi)存。所有進(jìn)程的內(nèi)存空間之和超過物理內(nèi)存的部分就需要交換到磁盤上。

操作系統(tǒng)以 page 為單位管理內(nèi)存,當(dāng)進(jìn)程發(fā)現(xiàn)需要訪問的數(shù)據(jù)不在內(nèi)存時(shí),操作系統(tǒng)可能會(huì)將數(shù)據(jù)以頁的方式加載到內(nèi)存中。上述過程被稱為缺頁中斷,當(dāng)操作系統(tǒng)發(fā)生缺頁中斷時(shí),就會(huì)通過系統(tǒng)調(diào)用將 page 再次讀到內(nèi)存中。

但主內(nèi)存的空間是有限的,當(dāng)主內(nèi)存中不包含可以使用的空間時(shí),操作系統(tǒng)會(huì)從選擇合適的物理內(nèi)存頁驅(qū)逐回磁盤,為新的內(nèi)存頁讓出位置,選擇待驅(qū)逐頁的過程在操作系統(tǒng)中叫做頁面替換(Page Replacement),替換操作又會(huì)觸發(fā) swap 機(jī)制。

如果物理內(nèi)存足夠大,那么可能不需要 Swap 機(jī)制,但是 Swap 在這種情況下還是有一定優(yōu)勢:對于有發(fā)生內(nèi)存泄漏幾率的應(yīng)用程序(進(jìn)程),Swap 交換分區(qū)更是重要,這可以確保內(nèi)存泄露不至于導(dǎo)致物理內(nèi)存不夠用,最終導(dǎo)致系統(tǒng)崩潰。但內(nèi)存泄露會(huì)引起頻繁的 swap,此時(shí)非常影響操作系統(tǒng)的性能。

Linux 通過一個(gè) swappiness 參數(shù)來控制 Swap 機(jī)制[2]:這個(gè)參數(shù)值可為 0-100,控制系統(tǒng) swap 的優(yōu)先級(jí):

  •  高數(shù)值:較高頻率的 swap,進(jìn)程不活躍時(shí)主動(dòng)將其轉(zhuǎn)換出物理內(nèi)存。
  •  低數(shù)值:較低頻率的 swap,這可以確保交互式不因?yàn)閮?nèi)存空間頻繁地交換到磁盤而提高響應(yīng)延遲。

最后,為什么 Buffers 也是 Page Cache 的一部分?

這是因?yàn)楫?dāng)匿名頁(Inactive(anon) 以及 Active(anon))先被交換(swap out)到磁盤上后,然后再加載回(swap in)內(nèi)存中,由于讀入到內(nèi)存后原來的 Swap File 還在,所以 SwapCached 也可以認(rèn)為是 File-backed page,即屬于 Page Cache。這個(gè)過程如 Figure 2 所示。

    Figure2. 匿名頁的被交換后也是 Page Cache

1.5 Page Cache 與 buffer cache

執(zhí)行 free 命令,注意到會(huì)有兩列名為 buffers 和 cached,也有一行名為 “-/+ buffers/cache”。 

  1. ~ free -m  
  2.              total       used       free     shared    buffers     cached  
  3. Mem:        128956      96440      32515          0       5368      39900  
  4. -/+ buffers/cache:      51172      77784  
  5. Swap:        16002          0      16001 

其中,cached 列表示當(dāng)前的頁緩存(Page Cache)占用量,buffers 列表示當(dāng)前的塊緩存(buffer cache)占用量。用一句話來解釋:Page Cache 用于緩存文件的頁數(shù)據(jù),buffer cache 用于緩存塊設(shè)備(如磁盤)的塊數(shù)據(jù)。頁是邏輯上的概念,因此 Page Cache 是與文件系統(tǒng)同級(jí)的;塊是物理上的概念,因此 buffer cache 是與塊設(shè)備驅(qū)動(dòng)程序同級(jí)的。

Page Cache)占用量,buffers 列表示當(dāng)前的塊緩存(buffer cache)占用量。用一句話來解釋:Page Cache 用于緩存文件的頁數(shù)據(jù),buffer cache 用于緩存塊設(shè)備(如磁盤)的塊數(shù)據(jù)。頁是邏輯上的概念,因此 Page Cache 是與文件系統(tǒng)同級(jí)的;塊是物理上的概念,因此 buffer cache 是與塊設(shè)備驅(qū)動(dòng)程序同級(jí)的。

Page Cache 與 buffer cache 的共同目的都是加速數(shù)據(jù) I/O:寫數(shù)據(jù)時(shí)首先寫到緩存,將寫入的頁標(biāo)記為 dirty,然后向外部存儲(chǔ) flush,也就是緩存寫機(jī)制中的 write-back(另一種是 write-through,Linux 默認(rèn)情況下不采用);讀數(shù)據(jù)時(shí)首先讀取緩存,如果未命中,再去外部存儲(chǔ)讀取,并且將讀取來的數(shù)據(jù)也加入緩存。操作系統(tǒng)總是積極地將所有空閑內(nèi)存都用作 Page Cache 和 buffer cache,當(dāng)內(nèi)存不夠用時(shí)也會(huì)用 LRU 等算法淘汰緩存頁。

在 Linux 2.4 版本的內(nèi)核之前,Page Cache 與 buffer cache 是完全分離的。但是,塊設(shè)備大多是磁盤,磁盤上的數(shù)據(jù)又大多通過文件系統(tǒng)來組織,這種設(shè)計(jì)導(dǎo)致很多數(shù)據(jù)被緩存了兩次,浪費(fèi)內(nèi)存。所以在 2.4 版本內(nèi)核之后,兩塊緩存近似融合在了一起:如果一個(gè)文件的頁加載到了 Page Cache,那么同時(shí) buffer cache 只需要維護(hù)塊指向頁的指針就可以了。只有那些沒有文件表示的塊,或者繞過了文件系統(tǒng)直接操作(如dd命令)的塊,才會(huì)真正放到 buffer cache 里。因此,我們現(xiàn)在提起 Page Cache,基本上都同時(shí)指 Page Cache 和 buffer cache 兩者,本文之后也不再區(qū)分,直接統(tǒng)稱為 Page Cache。

下圖近似地示出 32-bit Linux 系統(tǒng)中可能的一種 Page Cache 結(jié)構(gòu),其中 block size 大小為 1KB,page size 大小為 4KB。

Page Cache 中的每個(gè)文件都是一棵基數(shù)樹(radix tree,本質(zhì)上是多叉搜索樹),樹的每個(gè)節(jié)點(diǎn)都是一個(gè)頁。根據(jù)文件內(nèi)的偏移量就可以快速定位到所在的頁,如下圖所示。關(guān)于基數(shù)樹的原理可以參見英文維基,這里就不細(xì)說了。

1.6 Page Cache 與預(yù)讀

操作系統(tǒng)為基于 Page Cache 的讀緩存機(jī)制提供預(yù)讀機(jī)制(PAGE_READAHEAD),一個(gè)例子是:

  •  用戶線程僅僅請求讀取磁盤上文件 A 的 offset 為 0-3KB 范圍內(nèi)的數(shù)據(jù),由于磁盤的基本讀寫單位為 block(4KB),于是操作系統(tǒng)至少會(huì)讀 0-4KB 的內(nèi)容,這恰好可以在一個(gè) page 中裝下。
  •  但是操作系統(tǒng)出于局部性原理[3]會(huì)選擇將磁盤塊 offset [4KB,8KB)、[8KB,12KB) 以及 [12KB,16KB) 都加載到內(nèi)存,于是額外在內(nèi)存中申請了 3 個(gè) page;

下圖代表了操作系統(tǒng)的預(yù)讀機(jī)制:

操作系統(tǒng)的預(yù)讀機(jī)制

上圖中,應(yīng)用程序利用 read 系統(tǒng)調(diào)動(dòng)讀取 4KB 數(shù)據(jù),實(shí)際上內(nèi)核使用 readahead 機(jī)制完成了 16KB 數(shù)據(jù)的讀取。

2、Page Cache 與文件持久化的一致性&可靠性

現(xiàn)代 Linux 的 Page Cache 正如其名,是對磁盤上 page(頁)的內(nèi)存緩存,同時(shí)可以用于讀/寫操作。一切內(nèi)存緩存都存在一致性問題:內(nèi)存中的數(shù)據(jù)與磁盤中的數(shù)據(jù)不一致,例如用作分布式中間件緩存的 Redis 就與 MySQL 等數(shù)據(jù)庫中的數(shù)據(jù)存在不一致。

Linux 提供多種機(jī)制來保證數(shù)據(jù)一致性,但無論是單機(jī)上的內(nèi)存與磁盤一致性,還是分布式組件中節(jié)點(diǎn) 1 與節(jié)點(diǎn) 2 、節(jié)點(diǎn) 3 的數(shù)據(jù)一致性問題,理解的關(guān)鍵是 trade-off:吞吐量與數(shù)據(jù)一致性保證是一對矛盾。

首先,需要我們理解一下文件的數(shù)據(jù)。文件 = 數(shù)據(jù) + 元數(shù)據(jù)。元數(shù)據(jù)用來描述文件的各種屬性,也必須存儲(chǔ)在磁盤上。因此,我們說保證文件一致性其實(shí)包含了兩個(gè)方面:數(shù)據(jù)一致+元數(shù)據(jù)一致。

文件的元數(shù)據(jù)包括:文件大小、創(chuàng)建時(shí)間、訪問時(shí)間、屬主屬組等信息。

我們考慮如下一致性問題:如果發(fā)生寫操作并且對應(yīng)的數(shù)據(jù)在 Page Cache 中,那么寫操作就會(huì)直接作用于 Page Cache 中,此時(shí)如果數(shù)據(jù)還沒刷新到磁盤,那么內(nèi)存中的數(shù)據(jù)就領(lǐng)先于磁盤,此時(shí)對應(yīng) page 就被稱為 Dirty page。

當(dāng)前 Linux 下以兩種方式實(shí)現(xiàn)文件一致性:

  1.  Write Through(寫穿):向用戶層提供特定接口,應(yīng)用程序可主動(dòng)調(diào)用接口來保證文件一致性;
  2.  Write back(寫回):系統(tǒng)中存在定期任務(wù)(表現(xiàn)形式為內(nèi)核線程),周期性地同步文件系統(tǒng)中文件臟數(shù)據(jù)塊,這是默認(rèn)的 Linux 一致性方案;

上述兩種方式最終都依賴于系統(tǒng)調(diào)用,主要分為如下三種系統(tǒng)調(diào)用:

方法 含義
fsync(intfd) fsync(fd):將 fd 代表的文件的臟數(shù)據(jù)和臟元數(shù)據(jù)全部刷新至磁盤中。
fdatasync(int fd) fdatasync(fd):將 fd 代表的文件的臟數(shù)據(jù)刷新至磁盤,同時(shí)對必要的元數(shù)據(jù)刷新至磁盤中,這里所說的必要的概念是指:對接下來訪問文件有關(guān)鍵作用的信息,如文件大小,而文件修改時(shí)間等不屬于必要信息
sync() sync():則是對系統(tǒng)中所有的臟的文件數(shù)據(jù)元數(shù)據(jù)刷新至磁盤中

上述三種系統(tǒng)調(diào)用可以分別由用戶進(jìn)程與內(nèi)核進(jìn)程發(fā)起。下面我們研究一下內(nèi)核線程的相關(guān)特性。

    1.  創(chuàng)建的針對回寫任務(wù)的內(nèi)核線程數(shù)由系統(tǒng)中持久存儲(chǔ)設(shè)備決定,為每個(gè)存儲(chǔ)設(shè)備創(chuàng)建單獨(dú)的刷新線程;

    2.  關(guān)于多線程的架構(gòu)問題,Linux 內(nèi)核采取了 Lighthttp 的做法,即系統(tǒng)中存在一個(gè)管理線程和多個(gè)刷新線程(每個(gè)持久存儲(chǔ)設(shè)備對應(yīng)一個(gè)刷新線程)。管理線程監(jiān)控設(shè)備上的臟頁面情況,若設(shè)備一段時(shí)間內(nèi)沒有產(chǎn)生臟頁面,就銷毀設(shè)備上的刷新線程;若監(jiān)測到設(shè)備上有臟頁面需要回寫且尚未為該設(shè)備創(chuàng)建刷新線程,那么創(chuàng)建刷新線程處理臟頁面回寫。而刷新線程的任務(wù)較為單調(diào),只負(fù)責(zé)將設(shè)備中的臟頁面回寫至持久存儲(chǔ)設(shè)備中。

    3.  刷新線程刷新設(shè)備上臟頁面大致設(shè)計(jì)如下:

        a.  每個(gè)設(shè)備保存臟文件鏈表,保存的是該設(shè)備上存儲(chǔ)的臟文件的 inode 節(jié)點(diǎn)。所謂的回寫文件臟頁面即回寫該 inode 鏈表上的某些文件的臟頁面;

        b.  系統(tǒng)中存在多個(gè)回寫時(shí)機(jī),第一是應(yīng)用程序主動(dòng)調(diào)用回寫接口(fsync,fdatasync 以及 sync 等),第二管理線程周期性地喚醒設(shè)備上的回寫線程進(jìn)行回寫,第三是某些應(yīng)用程序/內(nèi)核任務(wù)發(fā)現(xiàn)內(nèi)存不足時(shí)要回收部分緩存頁面而事先進(jìn)行臟頁面回寫,設(shè)計(jì)一個(gè)統(tǒng)一的框架來管理這些回寫任務(wù)非常有必要。

Write Through 與 Write back 在持久化的可靠性上有所不同:

  •  Write Through 以犧牲系統(tǒng) I/O 吞吐量作為代價(jià),向上層應(yīng)用確保一旦寫入,數(shù)據(jù)就已經(jīng)落盤,不會(huì)丟失;
  •  Write back 在系統(tǒng)發(fā)生宕機(jī)的情況下無法確保數(shù)據(jù)已經(jīng)落盤,因此存在數(shù)據(jù)丟失的問題。不過,在程序掛了,例如被 kill -9,Page Cache 中的數(shù)據(jù)操作系統(tǒng)還是會(huì)確保落盤;

3、為什么使用 Page Cache 與為什么不使用 Page Cache?

3.1 Page Cache 的優(yōu)勢

1.加快數(shù)據(jù)訪問

如果數(shù)據(jù)能夠在內(nèi)存中進(jìn)行緩存,那么下一次訪問就不需要通過磁盤 I/O 了,直接命中內(nèi)存緩存即可。

由于內(nèi)存訪問比磁盤訪問快很多,因此加快數(shù)據(jù)訪問是 Page Cache 的一大優(yōu)勢。

2.減少 I/O 次數(shù),提高系統(tǒng)磁盤 I/O 吞吐量

得益于 Page Cache 的緩存以及預(yù)讀能力,而程序又往往符合局部性原理,因此通過一次 I/O 將多個(gè) page 裝入 Page Cache 能夠減少磁盤 I/O 次數(shù), 進(jìn)而提高系統(tǒng)磁盤 I/O 吞吐量。

3.2 Page Cache 的劣勢

page cache 也有其劣勢,最直接的缺點(diǎn)是需要占用額外物理內(nèi)存空間,物理內(nèi)存在比較緊俏的時(shí)候可能會(huì)導(dǎo)致頻繁的 swap 操作,最終導(dǎo)致系統(tǒng)的磁盤 I/O 負(fù)載的上升。

Page Cache 的另一個(gè)缺陷是對于應(yīng)用層并沒有提供很好的管理 API,幾乎是透明管理。應(yīng)用層即使想優(yōu)化 Page Cache 的使用策略也很難進(jìn)行。因此一些應(yīng)用選擇在用戶空間實(shí)現(xiàn)自己的 page 管理,例如 MySQL InnoDB 存儲(chǔ)引擎以 16KB 的頁進(jìn)行管理。

Page Cache 最后一個(gè)缺陷是在某些應(yīng)用場景下比 Direct I/O 多一次磁盤讀 I/O 以及磁盤寫 I/O。這一點(diǎn)可以參考[4]。 

 

責(zé)任編輯:龐桂玉 來源: Linux學(xué)習(xí)
相關(guān)推薦

2020-08-10 18:03:54

Cache存儲(chǔ)器CPU

2022-11-09 08:12:07

2023-02-10 08:11:43

Linux系統(tǒng)調(diào)用

2025-10-28 04:25:00

2017-01-12 19:34:58

2013-06-20 10:25:56

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2020-07-21 08:26:08

SpringSecurity過濾器

2010-06-01 15:25:27

JavaCLASSPATH

2022-08-21 16:52:27

Linux虛擬內(nèi)存

2012-11-22 10:11:16

LispLisp教程

2021-05-19 07:56:26

Linux內(nèi)核搶占

2009-09-25 09:14:35

Hibernate日志

2021-02-17 11:25:33

前端JavaScriptthis

2023-10-19 11:12:15

Netty代碼

2013-09-22 14:57:19

AtWood

2017-08-15 13:05:58

Serverless架構(gòu)開發(fā)運(yùn)維

2025-05-06 00:43:00

MySQL日志文件MIXED 3

2020-09-23 10:00:26

Redis數(shù)據(jù)庫命令

2017-01-10 08:48:21

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲色大成网站www| 国产一级视频在线| 电影一区二区三区久久免费观看| 日韩美女啊v在线免费观看| 成人亚洲欧美一区二区三区| 劲爆欧美第一页| 狠狠热免费视频| 中国一级片黄色一级片黄| 亚洲成人二区| 日韩国产精品一区| 亚洲久久中文字幕| 男人天堂视频在线观看| 国产精品久久久久婷婷| 国精产品一区二区| 96日本xxxxxⅹxxx17| 亚洲美女啪啪| www.xxxx精品| 亚洲成人网在线播放| 91精品麻豆| 色狠狠色狠狠综合| 性一交一乱一伧国产女士spa| 高清国产福利在线观看| 国产.欧美.日韩| 国产噜噜噜噜噜久久久久久久久| 国产无码精品一区二区| 五月天久久777| 国产午夜精品视频| 添女人荫蒂视频| 视频国产精品| 欧美精品九九99久久| 精品国产免费av| 波多野结衣在线观看| 亚洲欧美在线视频观看| 欧美高清性xxxxhd| 无码精品在线观看| 国产v综合v亚洲欧| 国产精品爽黄69天堂a| 天天操天天操天天操天天| 欧美深夜福利| 色综合久久中文字幕综合网小说| 白白色免费视频| 九热爱视频精品视频| 日韩欧美电影一区| 国产又粗又猛又爽又黄| 欧美成人毛片| 欧美日韩高清一区二区不卡| 在线观看的毛片| 欧美日韩在线精品一区二区三区激情综合 | 中文字幕亚洲综合久久五月天色无吗''| 亚洲女人被黑人巨大进入| 亚洲一区二区在线免费| 97人人澡人人爽91综合色| 欧美第一区第二区| 国产sm在线观看| aiss精品大尺度系列| 日韩欧美电影一区| 午夜不卡久久精品无码免费| 成人线上播放| 亚洲精美色品网站| 黄色aaa视频| 成人在线免费观看网站| 日韩性生活视频| 中文字幕另类日韩欧美亚洲嫩草| 日产精品一区二区| 精品国产美女在线| 农村妇女精品一区二区| 红桃视频欧美| 欧美亚洲在线观看| www.五月婷婷.com| 久久99精品国产.久久久久久| 国产日本欧美一区二区三区在线 | 亚洲欧洲日产国产网站| 中字幕一区二区三区乱码| 成人久久电影| 美乳少妇欧美精品| 香蕉免费毛片视频| 玖玖精品视频| 91久久精品一区| 免费看黄网站在线观看| 久久综合九色综合97_久久久| 日韩av高清在线播放| 欧美成人性生活视频| 一区二区免费在线播放| 日韩欧美在线播放视频| 日本免费成人| 精品sm在线观看| 熟女俱乐部一区二区| 99久久精品网| 97视频网站入口| 亚洲av人无码激艳猛片服务器| 精品在线一区二区| 久久综合久久久| 日韩精品一区二区免费| 亚洲毛片欧洲毛片国产一品色| 不卡的av在线播放| 午夜精品一区二区在线观看| 欧美亚洲天堂| 欧美三区在线观看| 午夜免费福利影院| 日韩精品久久久久久久电影99爱| 色综合色综合网色综合| 中文字幕观看视频| 9i在线看片成人免费| 图片区小说区区亚洲五月| 国产后进白嫩翘臀在线观看视频| 色老综合老女人久久久| 久久久无码人妻精品无码| 欧美精品一区二区三区精品| 九九热精品在线| 国产成人精品亚洲| 成人黄色在线视频| 在线观看成人免费| 亚洲午夜天堂| 亚洲国产99精品国自产| 成年人二级毛片| 日韩va亚洲va欧美va久久| 成人做爰66片免费看网站| 天天影视久久综合| 欧美性xxxx极品hd满灌| 欧美一级大片免费看| 99精品在线观看| 日本国产一区二区三区| 欧美一级在线免费观看| 日韩美女视频一区| 第四色婷婷基地| 亚洲涩涩av| 97视频在线免费观看| av中文字幕第一页| 国产精品久久久久久久久久免费看 | 91xxx在线观看| 日韩欧美在线字幕| 特大黑人巨人吊xxxx| 亚洲一级一区| www日韩av| 丝袜美女在线观看| 日韩女优av电影在线观看| 国产人与禽zoz0性伦| 免费黄网站欧美| 日韩视频在线观看国产| 校园春色亚洲色图| 亚洲欧美激情视频| 日韩在线 中文字幕| 91网站黄www| a√天堂在线观看| 亚洲精品国产精品粉嫩| 欧美一级片在线播放| 污污网站免费在线观看| 欧美日韩国产在线看| xxxwww国产| 亚洲精品社区| 久久av一区二区三区漫画| jizzjizz中国精品麻豆| 亚洲成人中文字幕| 91porny在线| 91免费版在线看| 日日碰狠狠躁久久躁婷婷| 伊人久久大香线蕉| 国产精品aaaa| 黄色网页在线免费观看| 欧美一区二区三区四区久久| 中文字幕人妻一区二| 国产不卡在线一区| 热99这里只有精品| 自拍偷拍欧美一区| 国产精品免费观看在线| 日本在线视频观看| 日韩欧美三级在线| 欧美日韩综合在线观看| 2021久久国产精品不只是精品| 亚洲精品蜜桃久久久久久| 欧美变态网站| 国产精品免费久久久| 黄视频网站在线| 精品久久久久香蕉网| 中文字幕亚洲精品一区| 欧美高清在线视频| 三级av免费看| 国产亚洲午夜| 亚洲一区二区免费视频软件合集 | 91精品国产丝袜白色高跟鞋| 国产成人无码aa精品一区| 成人小视频在线| 18岁视频在线观看| 中文字幕一区二区av| 国产有色视频色综合| 久久xxx视频| 欧美精品videofree1080p| 美女毛片在线看| 91麻豆精品国产自产在线观看一区| 久久精品国产亚洲av香蕉 | 美女毛片在线看| 欧美日韩高清不卡| 豆国产97在线 | 亚洲| 久久久www成人免费毛片麻豆 | 成人aa视频在线观看| 日本男人操女人| 欧美影视一区| 亚洲国产精品www| 成人午夜三级| 成人h视频在线| 性欧美18xxxhd| 美女久久久久久久久久久| 久香视频在线观看| 欧美电视剧在线看免费| 国产精品51麻豆cm传媒| 亚洲aaa精品| av激情在线观看| 国产视频视频一区| 最新版天堂资源在线| 麻豆高清免费国产一区| 欧美视频免费看欧美视频| 欧美mv日韩| 久久精品女人的天堂av| 欧美久久亚洲| 国产免费一区二区三区香蕉精| 超碰在线资源| 欧美成人自拍视频| 在线观看a视频| 亚洲欧洲免费视频| 色网站免费观看| 日韩视频一区在线观看| 中文字幕理论片| 狠狠躁夜夜躁人人爽天天天天97| 深夜福利影院在线观看| 欧美国产精品中文字幕| 国产成人无码精品久久二区三| 粉嫩绯色av一区二区在线观看| 亚洲另类第一页| 青青青伊人色综合久久| 农村妇女精品一二区| 一区二区日本视频| www污在线观看| 欧美日韩影院| 超碰超碰超碰超碰超碰| 国产精品久久久久久久| 亚洲一区二区三区乱码| 欧美日韩中文一区二区| 视频一区视频二区视频| 九九综合久久| 日韩尤物视频| 成人嘿咻视频免费看| 亚洲国产精品一区在线观看不卡 | 亚洲娇小xxxx欧美娇小| 黑人乱码一区二区三区av| 日韩一区二区免费高清| 国产高清视频免费观看| 日韩一区二区三区在线观看| 国产美女永久免费| 91精品国产91久久久久久最新毛片| 亚洲怡红院av| 91精品国产综合久久蜜臀| 国产精品一级二级| 日韩一级完整毛片| 亚洲第一页综合| 亚洲成**性毛茸茸| 香蕉视频国产在线| 亚洲欧美国产精品久久久久久久| 嫩草精品影院| 中文字幕亚洲一区二区三区五十路| 福利视频在线播放| 日韩中文av在线| 怡红院红怡院欧美aⅴ怡春院| 九九热在线精品视频| 黄网在线免费看| 欧美在线一区二区视频| 国产综合av| 成人福利在线视频| 日韩成人18| 精品午夜一区二区| 国产亚洲精品美女久久久久久久久久| 日韩精品一区二区三区色偷偷| 超碰成人久久| 米仓穗香在线观看| 在线亚洲免费| 久久99爱视频| 久久精品久久99精品久久| 日批视频在线看| 91原创在线视频| 国产jk精品白丝av在线观看| 国产精品美女久久福利网站| 欧美人与性囗牲恔配| 亚洲天堂av老司机| 日韩精品在线观看免费| 欧美亚男人的天堂| 韩国av永久免费| 国产午夜精品免费一区二区三区| 激情视频在线观看| 欧美一区二区.| 粉嫩一区二区三区在线观看| 精品一区二区三区视频日产| 成人av资源电影网站| 人人妻人人澡人人爽欧美一区| 午夜影院日韩| 黄色a级三级三级三级| 91美女片黄在线观看91美女| 亚洲欧美另类日本| 欧美日韩在线视频首页| 国产毛片毛片毛片毛片毛片| 亚洲国产精品嫩草影院久久| 日本福利在线| 8090成年在线看片午夜| 91精品亚洲一区在线观看| 久久国产日韩欧美| 中文无码久久精品| 欧美伦理视频在线观看| 国产精品一卡二| 欧洲美熟女乱又伦| 午夜视频一区在线观看| 一区二区精品视频在线观看| 日韩av在线网址| 污片视频在线免费观看| 国产精品视频在线观看| 久久99蜜桃| 人妻av中文系列| 国产米奇在线777精品观看| 欧美黄色激情视频| 精品福利在线看| 国产激情视频在线播放| 在线视频国产日韩| 欧美舌奴丨vk视频| 国产麻豆日韩| 欧美久久久久| 午夜影院免费版| 国产精品久久久久婷婷二区次| 久久精品视频7| 亚洲国产精品小视频| 调教一区二区| 91久色国产| 中文字幕亚洲综合久久五月天色无吗''| 视色视频在线观看| 国产午夜精品一区二区三区嫩草| 精品美女久久久久| 亚洲成人精品在线| 91jq激情在线观看| 国产a一区二区| 国产综合色产| 熟妇女人妻丰满少妇中文字幕| 亚洲婷婷综合久久一本伊一区| 中国一级特黄视频| 中文字幕欧美日韩在线| 成人黄色毛片| 亚洲欧洲国产日韩精品| 日韩高清电影一区| 日韩黄色中文字幕| 精品视频在线看| 日本免费在线视频| 91色精品视频在线| 欧美一区综合| 免费黄色a级片| 午夜欧美视频在线观看| 日日夜夜精品免费| 1769国产精品| 国产综合久久久| 性刺激的欧美三级视频| 国产精品国产成人国产三级| 一级片在线免费观看视频| 日韩在线免费视频| 美女精品视频在线| 日b视频免费观看| 99久久精品国产导航| 国产福利拍拍拍| 亚洲性xxxx| 日韩一级特黄| 久久www视频| 久久一夜天堂av一区二区三区| 日本免费精品视频| 色噜噜久久综合伊人一本| 日本一区二区乱| 成年人午夜免费视频| 久久色成人在线| 国产精品九九九九| 欧美激情小视频| 中国av一区| 亚洲欧美天堂在线| 午夜精品福利一区二区三区蜜桃| 你懂的在线网址| 亚洲va男人天堂| 国产日韩免费| 国产性猛交xx乱| 欧美成人精品二区三区99精品| 亚洲女同志freevdieo| 亚洲欧美日韩精品在线| 国产suv精品一区二区883| 在线观看亚洲欧美| 精品国产一区av| 卡通动漫国产精品| 我要看一级黄色大片| 亚洲国产视频一区| 福利成人在线观看| 福利视频一区二区三区| 日日夜夜精品视频免费| 国产一区二区播放| 亚洲天堂色网站| 中文字幕av一区二区三区四区| 日本爱爱免费视频| 亚洲一区二区三区四区不卡| 国产二区在线播放| 国产精品三区四区| 国内外成人在线视频| 久久国产视频精品|