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

10 張圖打開 CPU 緩存一致性的大門

商務辦公
隨著時間的推移,CPU 和內存的訪問性能相差越來越大,于是就在 CPU 內部嵌入了 CPU Cache(高速緩存),CPU Cache 離 CPU 核心相當近,因此它的訪問速度是很快的,于是它充當了 CPU 與內存之間的緩存角色。

[[348565]]

本文轉載自微信公眾號「小林coding」,作者小林coding 。轉載本文請聯系小林coding公眾號。

 前言

直接上,不多 BB 了。

 

正文

CPU Cache 的數據寫入

隨著時間的推移,CPU 和內存的訪問性能相差越來越大,于是就在 CPU 內部嵌入了 CPU Cache(高速緩存),CPU Cache 離 CPU 核心相當近,因此它的訪問速度是很快的,于是它充當了 CPU 與內存之間的緩存角色。

CPU Cache 通常分為三級緩存:L1 Cache、L2 Cache、L3 Cache,級別越低的離 CPU 核心越近,訪問速度也快,但是存儲容量相對就會越小。其中,在多核心的 CPU 里,每個核心都有各自的 L1/L2 Cache,而 L3 Cache 是所有核心共享使用的。

 

我們先簡單了解下 CPU Cache 的結構,CPU Cache 是由很多個 Cache Line 組成的,CPU Line 是 CPU 從內存讀取數據的基本單位,而 CPU Line 是由各種標志(Tag)+ 數據塊(Data Block)組成,你可以在下圖清晰的看到:

 

我們當然期望 CPU 讀取數據的時候,都是盡可能地從 CPU Cache 中讀取,而不是每一次都要從內存中獲取數據。所以,身為程序員,我們要盡可能寫出緩存命中率高的代碼,這樣就有效提高程序的性能,具體的做法,你可以參考我上一篇文章「如何寫出讓 CPU 跑得更快的代碼?」

事實上,數據不光是只有讀操作,還有寫操作,那么如果數據寫入 Cache 之后,內存與 Cache 相對應的數據將會不同,這種情況下 Cache 和內存數據都不一致了,于是我們肯定是要把 Cache 中的數據同步到內存里的。

問題來了,那在什么時機才把 Cache 中的數據寫回到內存呢?為了應對這個問題,下面介紹兩種針對寫入數據的方法:

  • 寫直達(Write Through)
  • 寫回(Write Back)

寫直達

保持內存與 Cache 一致性最簡單的方式是,把數據同時寫入內存和 Cache 中,這種方法稱為寫直達(Write Through)。

 

在這個方法里,寫入前會先判斷數據是否已經在 CPU Cache 里面了:

  • 如果數據已經在 Cache 里面,先將數據更新到 Cache 里面,再寫入到內存里面;
  • 如果數據沒有在 Cache 里面,就直接把數據更新到內存里面。

寫直達法很直觀,也很簡單,但是問題明顯,無論數據在不在 Cache 里面,每次寫操作都會寫回到內存,這樣寫操作將會花費大量的時間,無疑性能會受到很大的影響。

寫回

既然寫直達由于每次寫操作都會把數據寫回到內存,而導致影響性能,于是為了要減少數據寫回內存的頻率,就出現了寫回(Write Back)的方法。

在寫回機制中,當發生寫操作時,新的數據僅僅被寫入 Cache Block 里,只有當修改過的 Cache Block「被替換」時才需要寫到內存中,減少了數據寫回內存的頻率,這樣便可以提高系統的性能。

 

那具體如何做到的呢?下面來詳細說一下:

  • 如果當發生寫操作時,數據已經在 CPU Cache 里的話,則把數據更新到 CPU Cache 里,同時標記 CPU Cache 里的這個 Cache Block 為臟(Dirty)的,這個臟的標記代表這個時候,我們 CPU Cache 里面的這個 Cache Block 的數據和內存是不一致的,這種情況是不用把數據寫到內存里的;
  • 如果當發生寫操作時,數據所對應的 Cache Block 里存放的是「別的內存地址的數據」的話,就要檢查這個 Cache Block 里的數據有沒有被標記為臟的,如果是臟的話,我們就要把這個 Cache Block 里的數據寫回到內存,然后再把當前要寫入的數據,寫入到這個 Cache Block 里,同時也把它標記為臟的;如果 Cache Block 里面的數據沒有被標記為臟,則就直接將數據寫入到這個 Cache Block 里,然后再把這個 Cache Block 標記為臟的就好了。

可以發現寫回這個方法,在把數據寫入到 Cache 的時候,只有在緩存不命中,同時數據對應的 Cache 中的 Cache Block 為臟標記的情況下,才會將數據寫到內存中,而在緩存命中的情況下,則在寫入后 Cache 后,只需把該數據對應的 Cache Block 標記為臟即可,而不用寫到內存里。

這樣的好處是,如果我們大量的操作都能夠命中緩存,那么大部分時間里 CPU 都不需要讀寫內存,自然性能相比寫直達會高很多。

緩存一致性問題

現在 CPU 都是多核的,由于 L1/L2 Cache 是多個核心各自獨有的,那么會帶來多核心的緩存一致性(Cache Coherence) 的問題,如果不能保證緩存一致性的問題,就可能造成結果錯誤。

那緩存一致性的問題具體是怎么發生的呢?我們以一個含有兩個核心的 CPU 作為例子看一看。

假設 A 號核心和 B 號核心同時運行兩個線程,都操作共同的變量 i(初始值為 0 )。

 

這時如果 A 號核心執行了 i++ 語句的時候,為了考慮性能,使用了我們前面所說的寫回策略,先把值為 1 的執行結果寫入到 L1/L2 Cache 中,然后把 L1/L2 Cache 中對應的 Block 標記為臟的,這個時候數據其實沒有被同步到內存中的,因為寫回策略,只有在 A 號核心中的這個 Cache Block 要被替換的時候,數據才會寫入到內存里。

如果這時旁邊的 B 號核心嘗試從內存讀取 i 變量的值,則讀到的將會是錯誤的值,因為剛才 A 號核心更新 i 值還沒寫入到內存中,內存中的值還依然是 0。這個就是所謂的緩存一致性問題,A 號核心和 B 號核心的緩存,在這個時候是不一致,從而會導致執行結果的錯誤。

 

那么,要解決這一問題,就需要一種機制,來同步兩個不同核心里面的緩存數據。要實現的這個機制的話,要保證做到下面這 2 點:

  • 第一點,某個 CPU 核心里的 Cache 數據更新時,必須要傳播到其他核心的 Cache,這個稱為寫傳播(Wreite Propagation);
  • 第二點,某個 CPU 核心里對數據的操作順序,必須在其他核心看起來順序是一樣的,這個稱為事務的串形化(Transaction Serialization)。

第一點寫傳播很容易就理解,當某個核心在 Cache 更新了數據,就需要同步到其他核心的 Cache 里。

而對于第二點事務的串形化,我們舉個例子來理解它。

假設我們有一個含有 4 個核心的 CPU,這 4 個核心都操作共同的變量 i(初始值為 0 )。A 號核心先把 i 值變為 100,而此時同一時間,B 號核心先把 i 值變為 200,這里兩個修改,都會「傳播」到 C 和 D 號核心。

 

那么問題就來了,C 號核心先收到了 A 號核心更新數據的事件,再收到 B 號核心更新數據的事件,因此 C 號核心看到的變量 i 是先變成 100,后變成 200。

而如果 D 號核心收到的事件是反過來的,則 D 號核心看到的是變量 i 先變成 200,再變成 100,雖然是做到了寫傳播,但是各個 Cache 里面的數據還是不一致的。

所以,我們要保證 C 號核心和 D 號核心都能看到相同順序的數據變化,比如變量 i 都是先變成 100,再變成 200,這樣的過程就是事務的串形化。

要實現事務串形化,要做到 2 點:

  • CPU 核心對于 Cache 中數據的操作,需要同步給其他 CPU 核心;
  • 要引入「鎖」的概念,如果兩個 CPU 核心里有相同數據的 Cache,那么對于這個 Cache 數據的更新,只有拿到了「鎖」,才能進行對應的數據更新。

那接下來我們看看,寫傳播和事務串形化具體是用什么技術實現的。

總線嗅探

寫傳播的原則就是當某個 CPU 核心更新了 Cache 中的數據,要把該事件廣播通知到其他核心。最常見實現的方式是總線嗅探(Bus Snooping)。

我還是以前面的 i 變量例子來說明總線嗅探的工作機制,當 A 號 CPU 核心修改了 L1 Cache 中 i 變量的值,通過總線把這個事件廣播通知給其他所有的核心,然后每個 CPU 核心都會監聽總線上的廣播事件,并檢查是否有相同的數據在自己的 L1 Cache 里面,如果 B 號 CPU 核心的 L1 Cache 中有該數據,那么也需要把該數據更新到自己的 L1 Cache。

可以發現,總線嗅探方法很簡單, CPU 需要每時每刻監聽總線上的一切活動,但是不管別的核心的 Cache 是否緩存相同的數據,都需要發出一個廣播事件,這無疑會加重總線的負載。

另外,總線嗅探只是保證了某個 CPU 核心的 Cache 更新數據這個事件能被其他 CPU 核心知道,但是并不能保證事務串形化。

于是,有一個協議基于總線嗅探機制實現了事務串形化,也用狀態機機制降低了總線帶寬壓力,這個協議就是 MESI 協議,這個協議就做到了 CPU 緩存一致性。

MESI 協議

MESI 協議其實是 4 個狀態單詞的開頭字母縮寫,分別是:

  • Modified,已修改
  • Exclusive,獨占
  • Shared,共享
  • Invalidated,已失效

這四個狀態來標記 Cache Line 四個不同的狀態。

「已修改」狀態就是我們前面提到的臟標記,代表該 Cache Block 上的數據已經被更新過,但是還沒有寫到內存里。而「已失效」狀態,表示的是這個 Cache Block 里的數據已經失效了,不可以讀取該狀態的數據。

「獨占」和「共享」狀態都代表 Cache Block 里的數據是干凈的,也就是說,這個時候 Cache Block 里的數據和內存里面的數據是一致性的。

「獨占」和「共享」的差別在于,獨占狀態的時候,數據只存儲在一個 CPU 核心的 Cache 里,而其他 CPU 核心的 Cache 沒有該數據。這個時候,如果要向獨占的 Cache 寫數據,就可以直接自由地寫入,而不需要通知其他 CPU 核心,因為只有你這有這個數據,就不存在緩存一致性的問題了,于是就可以隨便操作該數據。

另外,在「獨占」狀態下的數據,如果有其他核心從內存讀取了相同的數據到各自的 Cache ,那么這個時候,獨占狀態下的數據就會變成共享狀態。

那么,「共享」狀態代表著相同的數據在多個 CPU 核心的 Cache 里都有,所以當我們要更新 Cache 里面的數據的時候,不能直接修改,而是要先向所有的其他 CPU 核心廣播一個請求,要求先把其他核心的 Cache 中對應的 Cache Line 標記為「無效」狀態,然后再更新當前 Cache 里面的數據。

我們舉個具體的例子來看看這四個狀態的轉換:

  1. 當 A 號 CPU 核心從內存讀取變量 i 的值,數據被緩存在 A 號 CPU 核心自己的 Cache 里面,此時其他 CPU 核心的 Cache 沒有緩存該數據,于是標記 Cache Line 狀態為「獨占」,此時其 Cache 中的數據與內存是一致的;
  2. 然后 B 號 CPU 核心也從內存讀取了變量 i 的值,此時會發送消息給其他 CPU 核心,由于 A 號 CPU 核心已經緩存了該數據,所以會把數據返回給 B 號 CPU 核心。在這個時候, A 和 B 核心緩存了相同的數據,Cache Line 的狀態就會變成「共享」,并且其 Cache 中的數據與內存也是一致的;
  3. 當 A 號 CPU 核心要修改 Cache 中 i 變量的值,發現數據對應的 Cache Line 的狀態是共享狀態,則要向所有的其他 CPU 核心廣播一個請求,要求先把其他核心的 Cache 中對應的 Cache Line 標記為「無效」狀態,然后 A 號 CPU 核心才更新 Cache 里面的數據,同時標記 Cache Line 為「已修改」狀態,此時 Cache 中的數據就與內存不一致了。
  4. 如果 A 號 CPU 核心「繼續」修改 Cache 中 i 變量的值,由于此時的 Cache Line 是「已修改」狀態,因此不需要給其他 CPU 核心發送消息,直接更新數據即可。
  5. 如果 A 號 CPU 核心的 Cache 里的 i 變量對應的 Cache Line 要被「替換」,發現 Cache Line 狀態是「已修改」狀態,就會在替換前先把數據同步到內存。

所以,可以發現當 Cache Line 狀態是「已修改」或者「獨占」狀態時,修改更新其數據不需要發送廣播給其他 CPU 核心,這在一定程度上減少了總線帶寬壓力。

事實上,整個 MESI 的狀態可以用一個有限狀態機來表示它的狀態流轉。還有一點,對于不同狀態觸發的事件操作,可能是來自本地 CPU 核心發出的廣播事件,也可以是來自其他 CPU 核心通過總線發出的廣播事件。下圖即是 MESI 協議的狀態圖:

 

MESI 協議的四種狀態之間的流轉過程,我匯總成了下面的表格,你可以更詳細的看到每個狀態轉換的原因:

 

總結CPU 在讀寫數據的時候,都是在 CPU Cache 讀寫數據的,原因是 Cache 離 CPU 很近,讀寫性能相比內存高出很多。對于 Cache 里沒有緩存 CPU 所需要讀取的數據的這種情況,CPU 則會從內存讀取數據,并將數據緩存到 Cache 里面,最后 CPU 再從 Cache 讀取數據。

而對于數據的寫入,CPU 都會先寫入到 Cache 里面,然后再在找個合適的時機寫入到內存,那就有「寫直達」和「寫回」這兩種策略來保證 Cache 與內存的數據一致性:

  • 寫直達,只要有數據寫入,都會直接把數據寫入到內存里面,這種方式簡單直觀,但是性能就會受限于內存的訪問速度;
  • 寫回,對于已經緩存在 Cache 的數據的寫入,只需要更新其數據就可以,不用寫入到內存,只有在需要把緩存里面的臟數據交換出去的時候,才把數據同步到內存里,這種方式在緩存命中率高的情況,性能會更好;

當今 CPU 都是多核的,每個核心都有各自獨立的 L1/L2 Cache,只有 L3 Cache 是多個核心之間共享的。所以,我們要確保多核緩存是一致性的,否則會出現錯誤的結果。

要想實現緩存一致性,關鍵是要滿足 2 點:

  • 第一點是寫傳播,也就是當某個 CPU 核心發生寫入操作時,需要把該事件廣播通知給其他核心;
  • 第二點是事物的串行化,這個很重要,只有保證了這個,次啊能保障我們的數據是真正一致的,我們的程序在各個不同的核心上運行的結果也是一致的;

基于總線嗅探機制的 MESI 協議,就滿足上面了這兩點,因此它是保障緩存一致性的協議。

MESI 協議,是已修改、獨占、共享、已實現這四個狀態的英文縮寫的組合。整個 MSI 狀態的變更,則是根據來自本地 CPU 核心的請求,或者來自其他 CPU 核心通過總線傳輸過來的請求,從而構成一個流動的狀態機。另外,對于在「已修改」或者「獨占」狀態的 Cache Line,修改更新其數據不需要發送廣播給其他 CPU 核心。

原文鏈接:https://mp.weixin.qq.com/s/PDUqwAIaUxNkbjvRfovaCg

責任編輯:武曉燕 來源: 小林coding
相關推薦

2022-12-14 08:23:30

2023-08-14 08:10:33

CPU緩存RFO

2021-11-12 08:38:26

一致性哈希算法數據結構

2021-06-30 21:13:49

CPUCache數據

2020-05-12 10:43:22

Redis緩存數據庫

2020-06-01 22:09:48

緩存緩存同步緩存誤用

2024-11-14 07:10:00

2023-11-20 08:10:55

處理器CPU緩存

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2019-10-16 00:06:08

CPU內存存儲

2024-12-26 15:01:29

2020-11-12 10:53:36

volatile

2019-03-27 13:56:39

緩存雪崩穿透

2025-08-08 07:09:58

2023-05-09 10:59:33

緩存技術派MySQL

2024-05-28 00:50:00

RedisMySQL緩存

2019-10-24 10:42:00

CPU內存存儲器

2024-10-28 12:41:25

2024-01-15 10:38:20

多級緩存數據一致性分布式緩存

2022-03-29 10:39:10

緩存數據庫數據
點贊
收藏

51CTO技術棧公眾號

在线视频欧美日韩| 精品国产成人av| 国产精品视频免费在线观看| 午夜国产小视频| 亚洲网一区二区三区| 午夜视频久久久久久| 欧美一区二区高清在线观看| 888奇米影视| 欧美激情成人在线| 亚洲欧美国产制服动漫| 久国产精品视频| 无遮挡爽大片在线观看视频| 国产精品精品国产色婷婷| 成人高清在线观看| 国产情侣小视频| 亚洲一级影院| 最近2019中文字幕大全第二页| 亚洲成a人片在线www| 91伊人久久| 婷婷成人激情在线网| 在线不卡日本| 免费观看成年在线视频网站| 国内精品第一页| 欧美在线视频观看免费网站| 欧洲猛交xxxx乱大交3| 国产精品一区二区av日韩在线| 日韩一级精品视频在线观看| 韩国中文字幕av| jizz一区二区三区| 亚洲欧洲精品一区二区精品久久久| 国内精品一区二区| 国产毛片毛片毛片毛片| 日韩激情一二三区| 97精品免费视频| 91高清免费观看| 日韩免费一区| 亚洲美女免费精品视频在线观看| 337p日本欧洲亚洲大胆张筱雨| jizz欧美| 在线视频亚洲一区| 日本www在线播放| 欧美人体视频xxxxx| 18成人在线观看| 亚洲精品一区二区三区蜜桃久| 天堂av中文在线资源库| 国产成人鲁色资源国产91色综| 国产日本欧美一区| 欧美成人一区二区视频| 久久综合影音| 97免费在线视频| 久久久久人妻一区精品色欧美| 久久精品久久久| www日韩欧美| 麻豆一区在线观看| 日韩片欧美片| 日韩在线欧美在线国产在线| a资源在线观看| 国产伦一区二区三区| 精品小视频在线| 极品白嫩丰满美女无套| 秋霞影院一区二区三区| 亚洲国产97在线精品一区| 日本成人在线免费| 黑人久久a级毛片免费观看| 日韩午夜av一区| 又色又爽又黄18网站| caoporn成人免费视频在线| 精品国产麻豆免费人成网站| 一区二区免费在线观看视频| 精品少妇一区| 亚洲人线精品午夜| 人妻无码一区二区三区免费| 91影院成人| 欧美久久久精品| 精品深夜av无码一区二区老年| 亚洲午夜一级| 4444欧美成人kkkk| 国产日韩在线免费观看| 久久99国产精品久久99果冻传媒| 91久久久久久久久久久久久| www.午夜激情| av电影在线观看完整版一区二区| 欧美连裤袜在线视频| 二区在线视频| 一区二区三区在线免费| 91视频 -- 69xx| 久久麻豆视频| 精品国产a毛片| 最近中文字幕免费视频| 天天久久综合| 亚州精品天堂中文字幕| 无码人妻av免费一区二区三区| 麻豆91在线观看| 成人片在线免费看| 韩国福利在线| 亚洲精品乱码久久久久久 | www五月婷婷| 久久嫩草精品久久久久| 自拍偷拍一区二区三区| av伦理在线| 在线免费观看日本欧美| 97中文字幕在线观看| 国产日产精品一区二区三区四区的观看方式 | 亚洲最新视频在线观看| www黄色av| 国产在线不卡一区二区三区| 亚洲精品在线观看www| 亚洲一二三在线观看| 国产欧美不卡| 91麻豆国产语对白在线观看| 日韩a在线观看| 一区二区三区日韩精品视频| 不要播放器的av网站| 亚洲国产欧美在线观看| 一区二区三区久久精品| 日韩伦理在线视频| 韩国av一区二区| 欧美18视频| 国内高清免费在线视频| 欧美日韩精品欧美日韩精品一综合| 妖精视频一区二区| 亚洲在线久久| 国产精品日韩电影| 欧美挠脚心网站| 五月激情六月综合| 天天爽夜夜爽视频| 欧美成免费一区二区视频| 日本精品性网站在线观看| 亚洲男人第一天堂| 综合在线观看色| 国产视频一区二区视频| 激情av综合| 久久久欧美一区二区| 国产成年妇视频| 国产精品国模大尺度视频| 国产无套内射久久久国产| 国产精品美女在线观看直播| 欧美精品日韩三级| 国产露脸91国语对白| 国产精品女同一区二区三区| 999精品网站| 精品一区毛片| 97超级碰在线看视频免费在线看| www.污视频| 夜夜揉揉日日人人青青一国产精品| 欧美午夜aaaaaa免费视频| 国产精品午夜一区二区三区| 日本精品视频在线| 九色在线观看视频| 色综合久久久网| 扒开jk护士狂揉免费| 午夜在线一区二区| 蜜桃91精品入口| 男人最爱成人网| 亚洲人成网在线播放| 亚洲国产精品无码久久久| 久久网站热最新地址| 成年人在线看片| 欧美日韩国产免费观看视频| 国产精品热视频| 高清免费电影在线观看| 51精品国自产在线| 久久综合亚洲色hezyo国产| 成人综合在线观看| 免费毛片小视频| 国产精品一区二区av交换| 国产精品日韩欧美综合| 免费黄色在线观看| 欧美α欧美αv大片| 日本免费一二三区| 91视频观看视频| 成人性生生活性生交12| 99国产**精品****| 成人av男人的天堂| 性欧美18~19sex高清播放| 亚洲新中文字幕| 国产精品久久久久久久成人午夜| 亚洲精品乱码久久久久久黑人 | 成人午夜网址| 欧美专区日韩视频| h网站在线免费观看| 欧美一个色资源| 亚洲黄色三级视频| 国产女主播一区| 极品人妻一区二区| 亚洲欧美日韩一区在线观看| 亚洲精品欧洲精品| 136导航精品福利| 国产成人97精品免费看片| 免费黄色网址在线观看| 亚洲国产福利在线| 中文在线观看av| 一区二区三区日本| 欧美丰满老妇熟乱xxxxyyy| 国产精品综合在线视频| 日韩avxxx| 中文字幕乱码亚洲无线精品一区 | 久久亚洲成人| 国产精品三区www17con| 成人免费毛片嘿嘿连载视频…| 九九热这里只有精品6| 极品白浆推特女神在线观看| 欧美一二三四在线| 姑娘第5集在线观看免费好剧| 亚洲欧美电影一区二区| 精品无人区无码乱码毛片国产| 国产一区二区精品久久| 老熟妇仑乱视频一区二区| 精品1区2区3区4区| 最新av在线免费观看| 国产一区不卡| 精品视频一区二区| 日韩在线视频一区二区三区| 国产精品igao视频| 国内精彩免费自拍视频在线观看网址| 久久精品视频免费播放| 九色在线免费| 日韩精品中文字幕视频在线| 性生活免费网站| 欧美精品在线观看播放| 波多野结衣一区二区三区四区| 亚洲一区视频在线| 国产激情无码一区二区三区| 久久精品亚洲乱码伦伦中文| 亚洲精品第二页| 国产精品自拍一区| 亚洲18在线看污www麻豆| 狂野欧美一区| 18禁免费无码无遮挡不卡网站| 国模吧视频一区| 黄黄视频在线观看| 午夜精品一区二区三区国产| 四虎影院一区二区三区| 蜜桃成人av| 欧美lavv| 久久最新网址| 蜜桃久久精品乱码一区二区 | 亚洲成年人在线| 国产黄色一区二区| 日韩视频一区二区在线观看| 国产三级自拍视频| 欧美精品v国产精品v日韩精品 | 久久99国产乱子伦精品免费| 国产一伦一伦一伦| 久久国产成人午夜av影院| 日本xxxx黄色| 蜜桃一区二区三区在线| 国产一级做a爰片久久| 日韩在线一区二区三区| 国产三级日本三级在线播放| 日韩中文字幕麻豆| 美女少妇一区二区| 精品一区二区三区不卡 | 精品国产欧美成人夜夜嗨| www.在线播放| 日韩在线观看网址| 国产精品刘玥久久一区| 久热在线中文字幕色999舞| 91最新在线视频| 欧美激情一区二区三区高清视频| 秋霞在线午夜| 97精品视频在线观看| 婷婷综合六月| 国产精品亚洲激情| 色悠久久久久综合先锋影音下载 | 免费毛片在线不卡| 日本一区视频在线播放| 欧美一区电影| 看一级黄色录像| 亚洲理伦在线| 男女啪啪网站视频| 极品少妇xxxx精品少妇| 久久久久国产免费| 91免费观看视频在线| 伊人影院综合网| 亚洲精品乱码久久久久久日本蜜臀| 亚洲国产精品午夜在线观看| 欧美视频一区二区三区…| 最近中文字幕在线视频| 欧美一级高清片| 视频一区二区在线播放| 正在播放欧美一区| 精品日韩av| 国产91九色视频| 国产精品毛片无码| 久久www免费人成精品| 久久亚洲影视| 日韩av三级在线| 国产一区视频在线看| 黄色录像a级片| 亚洲欧洲国产专区| 男人天堂中文字幕| 欧美日韩国产不卡| 日韩在线视频免费| 中文字幕最新精品| 97超碰在线免费| 国产在线视频91| 日韩大片在线免费观看| 在线观看免费黄色片| 久久精品二区三区| 香蕉视频xxx| 国产欧美日韩在线观看| 久久久久久久久97| 欧美少妇bbb| 婷婷在线免费视频| 大胆欧美人体视频| 草民电影神马电影一区二区| 裸模一区二区三区免费| 亚洲乱码精品| 精品999在线| 久久五月婷婷丁香社区| 国产精品7777| 欧美一级片在线| 8888四色奇米在线观看| 欧美一区二区三区免费视| 视频一区视频二区欧美| 亚洲春色综合另类校园电影| 亚洲在线成人| 亚洲午夜久久久久久久久| 亚洲六月丁香色婷婷综合久久 | 亚洲国产高清福利视频| av中文字幕在线观看| 国产欧美一区二区三区视频| 蜜桃一区二区三区| 999在线观看视频| 国产精品亚洲成人| √天堂中文官网8在线| 欧美日韩的一区二区| 美女欧美视频在线观看免费| 97色伦亚洲国产| 风间由美性色一区二区三区四区| 91xxx视频| 久久99国产精品免费| 99自拍偷拍视频| 欧美色综合网站| av在线中文| 国产精品爽爽爽爽爽爽在线观看| 久久成人av| 91蝌蚪视频在线观看| 国产日韩视频一区二区三区| 99精品在线播放| 亚洲女人天堂网| 亚洲天堂一区二区| 日本三级中国三级99人妇网站| 欧美资源在线| 少妇无套高潮一二三区| 在线免费观看成人短视频| h视频在线免费| 国产日韩欧美综合| 91精品久久久久久久久久不卡| 天天综合成人网| 亚洲美女免费视频| 内射无码专区久久亚洲| 久久久欧美一区二区| 婷婷亚洲精品| 国产性生交xxxxx免费| 国产校园另类小说区| 中文字幕理论片| 免费av在线一区| 澳门成人av| 欧美 国产 日本| 国产欧美精品日韩区二区麻豆天美| 一本久道久久综合无码中文| 久久精品人人爽| 国产成人在线中文字幕| 欧美亚洲另类色图| 国产精品久久久久四虎| 国产青青草视频| 午夜伦理精品一区| 精品福利久久久| 爱情岛论坛亚洲自拍| 五月婷婷欧美视频| jizz在线观看中文| 粉嫩av免费一区二区三区| 国产视频亚洲| 国产成人在线网址| 亚洲国产成人av在线| 日韩av免费| 天堂а√在线中文在线| 91在线免费视频观看| 一本色道久久综合精品婷婷| 欧美极品欧美精品欧美视频| 欧美男男gaytwinkfreevideos| 三级av免费观看| 亚洲一区二区精品3399| 久草福利在线| 国产精品对白一区二区三区| 视频在线观看91| 青青草偷拍视频| 亚洲午夜未删减在线观看 | 日本免费一区二区六区| 一本久久a久久精品vr综合| 成人一道本在线| 中文字幕一区二区三区人妻四季| 欧美日韩国产成人在线| 精品国产欧美日韩| 黑人玩弄人妻一区二区三区| 欧美视频在线一区二区三区| bl视频在线免费观看| 亚洲三级一区|