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

并發原理之MESI與內存屏障

存儲 存儲軟件
現代的CPU比內存系統快很多,2006年的cpu可以在一納秒之內執行10條指令,但是需要多個十納秒去從內存讀取一個數據,這里面產生了至少兩個數量級的速度差距。

 現代的CPU比內存系統快很多,2006年的cpu可以在一納秒之內執行10條指令,但是需要多個十納秒去從內存讀取一個數據,這里面產生了至少兩個數量級的速度差距。在這樣的問題下,cpu cache應運而生。

[[323140]]

cache處于cpu與內存之間,讀寫速度比內存快很多,但也比較昂貴。

并發原理系列一:MESI與內存屏障

cache是以cache line為基本單位來進行讀寫的,cache line的大小是2的冪次,從16字節到256字節不等。

并發原理系列一:MESI與內存屏障

上圖就是一個cpu cache的架構示意圖,總共有32個cache line,每個cache line是256字節。cacheline的起始地址低8位都是0,使用內存地址的9-12位數據來進行hash。

當cpu在cache里尋找數據時,如果數據不存在,則會產生一個cache miss,這時候cpu需要等待數據從內存讀回,這需要耗費很長時間,但是因為讀取之后會存儲到cache中,所以以后的讀取就會變得非常快。為了減少cache miss造成的性能損失,現代的cpu單核可以超線程,一個線程等待的時候,另一個線程就能執行指令了。

為什么會有cache miss,一種是數據預熱,機器剛啟動的時候,cache是沒有數據的,還有一種情況是cache不足,需要淘汰舊的數據。

我們用的最多的緩存一致性協議是MESI,四個字母分別表示modified, exclusive, shared, invalid,這是cache line的四種狀態,

modified:數據是被該cpu獨占的,其他cpu沒有存儲該數據。

exclusive:這個狀態跟modified很類似,只是該狀態下,cache的數據已經同步到主存了,所以即使丟棄也無所謂。

shared:數據存在于多個cpu cache里,每個cpu對該數據只能讀,而不能簡單地寫

invalid:該cache line是空的

Read:read消息會帶上cache line的物理內存地址向其他cpu獲取數據

Read Response:如果其他cpu有這個cache line,并且處于modified,那么該cpu必須返回該消息,因為其他cpu的cache line和主存都沒有最新的數據

Invalidate:invalidate消息會帶上cache line的物理內存地址,來讓其他cache把相應的數據從cache line里去除掉

Invalidate Acknowledge:如果一個cpu收到Invalidate消息,那么它必須在刪除數據之后返回該消息

Read Invalidate:該消息是Read和Invalidate的組合,所以它需要一個Read Response和多個Invalidate Acknowledge

Writeback:modified狀態的cache line寫到主存,可以用來騰出空間給其他數據

我們現在來看一下MESI各種狀態之間的遷移:

并發原理系列一:MESI與內存屏障

a) cpu把cacheline 回寫到內存,此時該cpu對這個cacheline還是有獨占權

b) cacheline 被cpu修改,該操作不需要cpu之間通信

c) cpu收到read invalidate之后,本地cacheline失效

d) cacheline 被本地cpu修改,需要和其他cpu通信,發出read invalidate 獲取最新的數據

e) cacheline 被本地cpu修改,需要向其他cpu發出invalidate請求

f) 其他cpu發來read請求

g) 其他cpu發來read請求

h) cpu意識到它馬上要寫數據到cacheline,所以提前發出invalidate消息給其他cpu

i) 其他cpu發來read invalidate

j) cpu在寫數據之前發出read invalidate消息給其他cpu,之后就處于e狀態,該狀態很快就可能變成m狀態

k) cpu發出read請求

l) 收到invalidate請求

雖然MESI協議能保證讀寫內存的高性能,但還是有點問題:

并發原理系列一:MESI與內存屏障

當cpu0要寫數據到本地cache的時候,如果不是M或者E狀態,需要發送一個invalidate消息給cpu1,只有收到cpu1的acknowledgement才能寫數據到cache中,在這個過程中cpu0需要等待,這大大影響了性能。一種解決辦法是在cpu和cache之間引入store buffer,當發出invalidate之后直接把數據寫入store buffer。當收到acknowledgement之后可以把store buffer中的數據寫入cache?,F在的架構圖是這樣的:

并發原理系列一:MESI與內存屏障

現在這樣的架構引入了復雜性,看下面的例子:

cpu0cache里面有個b,初值為0,cpu1cache有個a,初值為0,現在cpu0運行代碼

  1. a=1; 
  2. b=a+1; 
  3. assert(b==2) 

cpu0執行a=1的時候發現本地cache沒有a,所以發送read invalidate給cpu1,然后把a=1寫入store buffer

cpu1收到read invalidate之后把a傳給cpu0并且本地cacheline置為無效

cpu0開始執行b=a+1

cpu0收到cpu1的read response,發現a=0

cpu0執行a+1,得到1賦給b

cpu0執行最后一句,失敗

這里關鍵的問題是cpu會把自己的操作看做是全局的內存操作,但其實操作storebuffer沒有操作到主存,所以我們需要在查cache的時候還得查一下store buffer,這種技術叫做store forwarding.

現在的架構是這樣的:

 并發原理系列一:MESI與內存屏障

上面是store buffer在一個cpu中碰到的問題,在多個cpu并發的過程中也可能存在問題,看下例:

  1. void foo(void) 
  2. a = 1; 
  3. b = 1; 
  4. void bar(void) 
  5. while (b == 0) continue
  6. assert(a == 1); 

同樣的,cpu0cache里面有個b,初值為0,cpu1cache有個a,初值為0,現在cpu0運行foo, cpu1運行bar

cpu0 發現a不在本地cache,發送read invalidate去cpu1,并在store buffer中把a置為1

cpu1 執行while (b == 0)發現b不在本地內存,發送read消息去cpu0

cpu0 在本地cache置b為1

cpu0收到read消息,把cache中的b傳送給cpu1,并把本地狀態置為s

cpu1發現b為1,退出循環,因為這時候cpu1本地cache中a還是1,所以失敗

cpu1收到read invalidate,把a傳輸給cpu0,并置本地cache為invalidate但是太晚了

cpu0收到cpu1關于a的read response,把本地的store buffer移到cache中

第一個問題硬件工程署可以解決,但是第二個很難處理,因為硬件無法知道變量之間的依賴關系,硬件工程師設計了memory barrier(內存屏障),軟件可以使用這個工具來提示cpu變量之間的關系。新的代碼如下:

  1. void foo(void) 
  2. a = 1; 
  3. smp_mb(); 
  4. b = 1; 
  5. void bar(void) 
  6. while (b == 0) continue
  7. assert(a == 1); 

內存屏障smp_mb()提示cpu在進行smp_mb之后的存儲的時候,會先把store buffer里的數據刷新到cache中。有兩種方式,1:cpu會等到store buffer清空之后再處理其他指令,或者2:之后的所有寫操作都不寫到cache,而是寫到store buffer中,直到smp_mb之前的store buffer中的數據刷新到cache中。

上例中的執行效果如下:

cpu0執行 a=1,發現a不在本地cache中,進而把a=1寫入store buffer,并發出read invalidate消息給cpu1

cpu1執行while (b == 0),發現b不在本地cache中,進而發出read消息給cpu0

cpu0執行smp_mb,把store buffer中的a標記一下

cpu0執行b=1 發現狀態為獨占,所以可以直接寫,但是因為store buffer中有標記過的值,所以把b=1寫入store buffer,但是不標記

cpu0收到read消息,把cache中b的數據0發給cpu1,并把cacheline置為s

cpu1收到b=0,陷入循環中

cpu0收到read invalidate消息,進而把a=1從store buffer寫入cache,這時候可以把store buffer中的b=1寫入cache,但是發現這時候cache中的b屬于s狀態,所以發出invalidate消息給cpu1

cpu1收到invalidate消息之后把b設為1

cpu0收到invalidate ack之后把b的值1寫入cache

cpu1要讀取b的值,發出read消息給cpu0,

cpu0把b=1發給cpu1

cpu1收到b的值1,退出循環

cpu1發現a無效,發出read消息給cpu0

cpu0把a的值1發送給cpu1,并且把a置為s

cpu1得到a=1,成功

但是內存屏障的處理方法有個問題,那就是store buffer空間是有限的,如果store buffer中的空間被smp_mb之后的存儲塞滿,cpu還是得等待invalidate消息返回才能繼續處理。解決這種問題的思路是讓invalidate ack能更早得返回,一種辦法是提供一種放置invalidate message的隊列,稱為invalidate queue. cpu可以在收到invalidate之后馬上返回invalidate ack,而不是在把本地cache invalidate之后,并把invalidate message放置到invalide queue,以待之后處理。

并發原理系列一:MESI與內存屏障

但是這種方法會使得我們之前的內存屏障的例子也失效,主要是因為在cpu1收到cpu0關于a的invalidate消息之后直接ack,而沒有真正invalidate cache,導致退出循環之后發現a是有效的,執行assert(a==1)失敗

  1. void foo(void) 
  2. a = 1; 
  3. smp_mb(); 
  4. b = 1; 
  5. void bar(void) 
  6. while (b == 0) continue
  7. smp_mb(); 
  8.                          
  9. assert(a == 1); 

在assert之前插入內存屏障,作用是把invalidate queue標記下,在讀取下面的數據的時候,譬如a的時候會先把invalidate queue中的消息都處理掉,這里的話會使得a失效而去cpu0獲取最新的數據。

進而我們知道smp_mb有兩個作用,1,標記store buffer,在處理之后的寫請求之前需要把store buffer中的數據apply到cache,2,標記invalidate queue,在加載之后的數據之前把invalidate queue中的消息都處理掉

進而我們再觀察上面的例子,我們發現,在foo中我們不需要處理invalidate queue,而在bar中,我們不需要處理store buffer,我們可以使用一種更弱的內存屏障來修改上例讓我們程序的性能更高,smp_wmb寫屏障,只會標記store buffer,smp_rmb讀屏障,只會標記invalidate queue,代碼如下:

  1. void foo(void) 
  2. a = 1; 
  3. smp_wmb(); 
  4. b = 1; 
  5. void bar(void) 
  6. while (b == 0) continue
  7. smp_rmb(); 
  8. assert(a == 1); 

本文基本是對http://www.puppetmastertrading.com/images/hwViewForSwHackers.pdf的理解與翻譯。

MESI緩存一致性協議,能保證緩存和內存數據一致

volatile表示不使用寄存器的值,每次都從內存讀(不包括緩存)

dma越過cpu修改內存,會影響MESI

補充MESI:

緩存一致性協議給緩存行(通常為64字節)定義了個狀態:獨占(exclusive)、共享(share)、修改(modified)、失效(invalid),用來描述該緩存行是否被多處理器共享、是否修改。所以緩存一致性協議也稱MESI協議。

  • 獨占(exclusive):僅當前處理器擁有該緩存行,并且沒有修改過,是最新的值。
  • 共享(share):有多個處理器擁有該緩存行,每個處理器都沒有修改過緩存,是最新的值。
  • 修改(modified):僅當前處理器擁有該緩存行,并且緩存行被修改過了,一定時間內會寫回主存,會寫成功狀態會變為S。
  • 失效(invalid):緩存行被其他處理器修改過,該值不是最新的值,需要讀取主存上最新的值。
  • 協議協作如下:
  • 一個處于M狀態的緩存行,必須時刻監聽所有試圖讀取該緩存行對應的主存地址的操作,如果監聽到,則必須在此操作執行前把其緩存行中的數據寫回CPU。
  • 一個處于S狀態的緩存行,必須時刻監聽使該緩存行無效或者獨享該緩存行的請求,如果監聽到,則必須把其緩存行狀態設置為I。
  • 一個處于E狀態的緩存行,必須時刻監聽其他試圖讀取該緩存行對應的主存地址的操作,如果監聽到,則必須把其緩存行狀態設置為S。
  • 當CPU需要讀取數據時,如果其緩存行的狀態是I的,則需要從內存中讀取,并把自己狀態變成S,如果不是I,則可以直接讀取緩存中的值,但在此之前,必須要等待其他CPU的監聽結果,如其他CPU也有該數據的緩存且狀態是M,則需要等待其把緩存更新到內存之后,再讀取。
  • 當CPU需要寫數據時,只有在其緩存行是M或者E的時候才能執行,否則需要發出特殊的RFO指令(Read Or Ownership,這是一種總線事務),通知其他CPU置緩存無效(I),這種情況下會性能開銷是相對較大的。在寫入完成后,修改其緩存狀態為M。

另外MESI協議為了提高性能,引入了Store Buffe和Invalidate Queues,還是有可能會引起緩存不一致,還會再引入內存屏障來確保一致性

存儲緩存(Store Buffe)

也就是常說的寫緩存,當處理器修改緩存時,把新值放到存儲緩存中,處理器就可以去干別的事了,把剩下的事交給存儲緩存。

失效隊列(Invalidate Queues)

處理失效的緩存也不是簡單的,需要讀取主存。并且存儲緩存也不是無限大的,那么當存儲緩存滿的時候,處理器還是要等待失效響應的。為了解決上面兩個問題,引進了失效隊列(invalidate queue)。處理失效的工作如下:

  • 收到失效消息時,放到失效隊列中去。
  • 為了不讓處理器久等失效響應,收到失效消息需要馬上回復失效響應。
  • 為了不頻繁阻塞處理器,不會馬上讀主存以及設置緩存為invlid,合適的時候再一塊處理失效隊列。

MESI和CAS關系

在x86架構上,CAS被翻譯為”lock cmpxchg...“,當兩個core同時執行針對同一地址的CAS指令時,其實他們是在試圖修改每個core自己持有的Cache line,

假設兩個core都持有相同地址對應cacheline,且各自cacheline 狀態為S, 這時如果要想成功修改,就首先需要把S轉為E或者M, 則需要向其它core invalidate 這個地址的cacheline,則兩個core都會向ring bus發出 invalidate這個操作, 那么在ringbus上就會根據特定的設計協議仲裁是core0,還是core1能贏得這個invalidate, 勝者完成操作, 失敗者需要接受結果, invalidate自己對應的cacheline,再讀取勝者修改后的值, 回到起點.。

對于我們的CAS操作來說, 其實鎖并沒有消失,只是轉嫁到了ring bus的總線仲裁協議中. 而且大量的多核同時針對一個地址的CAS操作會引起反復的互相invalidate 同一cacheline, 造成pingpong效應, 同樣會降低性能(參考[9])。當然如果真的有性能問題,我覺得這可能會在ns級別體現了,一般的應用程序中使用CAS應該不會引起性能問題。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2010-04-27 09:17:23

內存屏障JVM

2019-12-10 14:51:00

CPU緩存內存

2019-11-12 14:40:43

CPU緩存內存

2019-10-30 09:56:56

內存屏障變量

2020-11-30 16:01:03

Semaphore

2020-12-09 08:21:47

編程Exchanger工具

2020-12-03 11:15:21

CyclicBarri

2020-12-04 19:28:53

CountDownLaPhaserCyclicBarri

2025-06-12 03:25:00

2021-07-03 17:44:34

并發高并發原子性

2017-09-04 15:15:48

Linux內核內存屏障

2025-09-08 04:11:00

2025-03-27 09:14:51

2011-07-11 18:10:28

java

2010-09-25 15:19:01

2011-07-11 18:02:50

java

2013-06-19 10:55:40

Disruptor并發框架

2023-10-27 07:47:58

Java語言順序性

2023-04-06 00:15:03

JavaReentrantL線程

2023-09-12 13:48:47

點贊
收藏

51CTO技術棧公眾號

欧美成人二区| 国产一级大片在线观看| 麻豆久久久久| 亚洲一区二区三区美女| 另类视频在线观看+1080p| 精品无码一区二区三区的天堂| 久久人人88| 精品国产网站在线观看| 四虎永久在线精品无码视频| 秋霞成人影院| 91色在线porny| 成人黄色在线观看| 久久久久久久久黄色| 亚洲色图国产| 亚洲香蕉成人av网站在线观看| av在线网站免费观看| 日韩影片中文字幕| 亚洲超碰精品一区二区| 亚洲.欧美.日本.国产综合在线| 国产黄色一区二区| 人禽交欧美网站| 91精品国产91久久久久| 国产一区二区播放| 国内精品久久久久久99蜜桃| 日韩欧美一区二区免费| 色悠悠久久综合网| 手机在线观看av| 亚洲综合久久久| 一区二区三区四区免费视频| 国产精品国产高清国产| 国产精品一区二区三区乱码| 国产精品啪视频| 国产无人区码熟妇毛片多| 欧美一区亚洲| 日韩视频在线观看免费| av黄色在线免费观看| 欧美爱爱网站| 精品国产免费视频| 日本网站在线看| 久久精品资源| 欧美羞羞免费网站| 不要播放器的av网站| 色一区二区三区| 亚洲福利一区二区三区| 中文字幕の友人北条麻妃| 日本中文字幕伦在线观看| 国产欧美日韩中文久久| 美女黄毛**国产精品啪啪| 熟妇人妻一区二区三区四区| 国产成人av电影在线观看| 91在线免费观看网站| 一起草av在线| 久久国产生活片100| 国产欧美日韩视频| 在线免费av片| 精油按摩中文字幕久久| 成人羞羞国产免费| 国产欧美一级片| 国产一区二区福利| 91系列在线播放| 99久久久无码国产精品免费| 国产一区二区三区国产| 亚洲xxxxx电影| 精品国产一级片| 成人激情av网| 麻豆成人av| 国产在线日本| 一区在线观看视频| 成人短视频在线观看免费| 影音先锋中文在线视频| 亚洲国产精品久久一线不卡| 成人网站免费观看入口| 欧美日韩电影免费看| 欧美优质美女网站| 特级西西444www| 超碰97久久| 国产丝袜高跟一区| 特黄一区二区三区| 午夜欧美精品| 91国产精品91| 97超碰人人模人人人爽人人爱| 国产精品99久| 精品无人乱码一区二区三区的优势| 四虎精品在线| 国产精品麻豆网站| 国产一线二线三线女| 中文字幕av一区二区三区佐山爱| 欧美日韩日日夜夜| 香蕉视频免费网站| 九九亚洲精品| 久久影视电视剧免费网站| 久久精品国产av一区二区三区| 国产伦理一区| 亚洲一区二区三区在线视频 | av影院在线免费观看| 欧美性xxxxx极品娇小| 我要看一级黄色大片| 澳门精品久久国产| 最近的2019中文字幕免费一页| 日本老熟俱乐部h0930| 欧美一级网站| 亚洲jizzjizz日本少妇| 三级毛片在线免费看| 成人欧美一区二区三区1314| 中文字幕无码精品亚洲35| 精品久久在线| 日韩精品在线电影| 劲爆欧美第一页| 日韩精品电影一区亚洲| 国产精品成人一区二区三区| h视频网站在线观看| 午夜精品免费在线观看| 可以看污的网站| 丝袜连裤袜欧美激情日韩| 另类专区欧美制服同性| 亚洲黄网在线观看| a级精品国产片在线观看| 一区二区在线不卡| 日韩毛片一区| 精品亚洲永久免费精品| 久久久一二三区| 久久99九九99精品| 日韩.欧美.亚洲| 国产激情视频在线看| 91麻豆精品国产91久久久资源速度 | 91精品论坛| 精品福利一区二区三区免费视频| 日本免费网站视频| 日韩国产欧美在线观看| 久久99精品国产99久久| 欧洲黄色一区| 欧美一级专区免费大片| 乱老熟女一区二区三区| 日韩精品91亚洲二区在线观看 | 国产精品wwwwww| 午夜在线观看视频18| 亚洲第一福利一区| 国产高潮失禁喷水爽到抽搐| 五月综合激情| 国产精品自产拍在线观| 北岛玲日韩精品一区二区三区| 欧美日韩精品二区| 亚洲中文字幕无码av| 樱桃成人精品视频在线播放| 国产富婆一区二区三区| 久久青青色综合| 精品国产乱码久久久久久夜甘婷婷 | 精品视频99| 日本伊人精品一区二区三区介绍 | 国产视频一区二| 久久久精品日本| 国产成人精品无码高潮| 亚洲乱码中文字幕综合| 中文写幕一区二区三区免费观成熟| 午夜影院欧美| 99精品国产一区二区| 黄色影院在线看| 精品盗摄一区二区三区| 玖玖爱免费视频| 成人高清视频在线观看| 国产超级av在线| 国产91精品对白在线播放| 国产精品99久久久久久人| fc2在线中文字幕| 欧美日韩黄视频| 日本在线一级片| 高清不卡一区二区| 大j8黑人w巨大888a片| 亚洲毛片免费看| 国产欧美精品va在线观看| а√天堂在线官网| 精品99一区二区三区| xxxx.国产| 国产精品欧美经典| 在线观看欧美一区二区| 在线亚洲观看| 日韩欧美电影一区二区| 国产色99精品9i| 午夜精品久久久久久99热软件| 亚洲人午夜射精精品日韩| 欧美性做爰猛烈叫床潮| 免费一级片在线观看| av在线一区二区| 搡女人真爽免费午夜网站| 亚洲不卡av不卡一区二区| 好吊色欧美一区二区三区视频 | 91在线免费视频| 岛国在线视频网站| 在线成人激情视频| 蜜桃91麻豆精品一二三区| 欧美日韩在线免费观看| 久草手机视频在线观看| a亚洲天堂av| 91 视频免费观看| 一本色道久久综合| 日本免费在线视频观看| 欧美18免费视频| 91最新在线免费观看| 日本三级一区| 久久成人精品视频| 欧美日韩在线中文字幕| 91精品免费在线| 精品视频一二三区| 亚洲综合成人网| 欧美性猛交xxxx乱大交少妇| a美女胸又www黄视频久久| 亚洲黄色av片| 久色成人在线| 国产欧美精品aaaaaa片| 日本一二区不卡| 欧美日产一区二区三区在线观看| 国产精品一区二区美女视频免费看 | 国产一级av毛片| 中文字幕一区在线观看视频| 精品黑人一区二区三区观看时间| 国产精选一区二区三区| 亚洲一区二区三区四区五区xx| 日韩亚洲精品在线| 日本一道在线观看| 久久社区一区| 日韩av高清| 国产成人av毛片| 91久久爱成人| 91精品一区| 国产一区二区在线播放| 2019年精品视频自拍| 欧美一级高清免费| 3344国产永久在线观看视频| 欧美xxxx18性欧美| 欧美18hd| www.欧美精品| 亚洲精品传媒| 中文字幕免费精品一区| 黄视频在线观看免费| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 日韩午夜在线| 久艹视频在线免费观看| 欧美日韩一视频区二区| 色一情一乱一乱一区91| 午夜精品视频一区二区三区在线看| 亚洲高清在线观看一区| 精品久久久久久久久久久aⅴ| 品久久久久久久久久96高清| 一本色道久久综合亚洲精品酒店| 精品在线一区| 制服丝袜日韩| 日韩国产欧美一区| 日韩一区二区在线| 大地资源第二页在线观看高清版| 久久美女视频| 久久视频免费在线| 国产精品www994| 僵尸世界大战2 在线播放| 亚洲天堂成人| 国产黄色一级网站| 羞羞答答国产精品www一本| 黑人糟蹋人妻hd中文字幕| 亚洲视频1区| 黄色高清无遮挡| 蜜臀99久久精品久久久久久软件| 色天使在线观看| 国产一区二区久久| 精品人妻一区二区免费视频| 99国产精品视频免费观看| 精品人妻无码一区二区三区换脸| 国产情人综合久久777777| 91香蕉视频污在线观看| 一区二区在线看| 99视频在线看| 色先锋资源久久综合| 亚洲天堂自拍偷拍| 欧美一区二区三区白人| 男人天堂一区二区| 亚洲无线码在线一区观看| 久久99精品久久久久久野外| 久久久久亚洲精品| 欧美www.| 亚洲va久久久噜噜噜久久天堂| 林ゆな中文字幕一区二区| 日韩欧美精品一区二区三区经典| 亚洲老妇激情| 欧美 日本 亚洲| 美腿丝袜亚洲一区| 国产ts在线观看| 久久精品欧美一区二区三区麻豆| 小早川怜子一区二区的演员表| 亚洲电影在线免费观看| 国产一级淫片a视频免费观看| 91精品免费在线观看| 五十路在线观看| 日韩视频欧美视频| 亚洲天堂资源| 亚洲综合国产精品| 中文字幕中文字幕精品| 熟女视频一区二区三区| 性久久久久久| 日韩欧美色视频| 国产日韩欧美麻豆| 日韩久久精品视频| 欧美日韩激情一区| 青青草免费在线| 欧美大片网站在线观看 | 一本色道亚洲精品aⅴ| 国产毛片久久久久| 亚洲欧美日韩中文在线制服| 50度灰在线| 国产精品欧美一区二区| 欧美人与动xxxxz0oz| 波多野结衣激情| 日韩高清在线不卡| 漂亮人妻被黑人久久精品| 亚洲色图在线看| 免费视频网站在线观看入口| 精品国产91久久久久久久妲己| 欧美精品日韩少妇| 国产精品91久久久| 日本韩国欧美超级黄在线观看| 男人j进女人j| 韩国一区二区视频| 老司机福利在线观看| 欧美天天综合色影久久精品| www.我爱av| 久久五月天色综合| 天堂久久午夜av| 欧美精品免费观看二区| 99热免费精品在线观看| 亚洲av无一区二区三区久久| 国产精品嫩草影院com| 天堂网视频在线| 日韩电影大片中文字幕| 俺来也官网欧美久久精品| 91香蕉视频在线下载| 亚洲一区二区| 91蝌蚪视频在线| 亚洲天堂av一区| 国产免费一区二区三区免费视频| 在线观看国产精品日韩av| 日本欧美韩国| 日韩成人在线资源| 日精品一区二区| 能直接看的av| 欧美日韩国产一二三| 电影av一区| 国产精品情侣自拍| 久久精品国产大片免费观看| 91小视频网站| 中文字幕一区二区日韩精品绯色| 亚洲视频在线观看一区二区| 中文字幕在线看视频国产欧美在线看完整| av亚洲一区二区三区| 色噜噜狠狠一区二区三区| 日本美女一区二区| 免费一级suv好看的国产网站| 欧美美女bb生活片| 国产精品久久久久久福利| 国产精品青青在线观看爽香蕉| 97精品在线| 无码国产精品一区二区高潮| 亚洲妇熟xx妇色黄| 青青草免费在线| 国产精品亚洲美女av网站| 91亚洲国产高清| 免费欧美一级片| 亚洲成人精品一区二区| 四虎影视在线播放| 国产精品视频免费在线观看| 国产精品成人一区二区不卡| 欧美性猛交乱大交| 黄色成人在线播放| 久久久国产视频91| 丰满岳乱妇国产精品一区| 欧美日韩国产成人在线| av成人综合| aⅴ在线免费观看| 中国色在线观看另类| 国产欧美一级片| 韩国精品美女www爽爽爽视频| 偷拍亚洲精品| 在线观看国产一级片| 一区二区三区在线看| 少妇喷水在线观看| 国产精品99久久久久久人| 在线一区电影| 国产三级国产精品| 在线不卡一区二区| 久久男人天堂| 在线观看精品视频| av电影在线观看一区| 天天天天天天天干| 麻豆国产精品va在线观看不卡| 日本成人a网站| 亚洲第一色av| 欧美性xxxxxxx| 伊人精品影院| 日本一区二区三不卡| 国产·精品毛片| 在线观看毛片视频| 国产69精品久久久久久| 在线观看国产精品入口| 国产激情在线免费观看|