日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ARM的CACHE原理(转)

發(fā)布時(shí)間:2025/6/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM的CACHE原理(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對大量典型程序運(yùn)行情況的分析結(jié)果表明,在一個(gè)較短的時(shí)間間隔內(nèi),由程序產(chǎn)生的地址往往集中在存儲器邏輯地址空間的很小范圍內(nèi)。指令地址的分布本來就是連 續(xù)的,再加上循環(huán)程序段和子程序段要重復(fù)執(zhí)行多次。


Cache的工作原理是基于程序訪問的局部性。?
對大量典型程序運(yùn)行情況的分析結(jié)果表明,在一個(gè)較短的時(shí)間間隔內(nèi),由程序產(chǎn)生的地址往往集中在存儲器邏輯地址空間的很小范圍內(nèi)。指令地址的分布本來就是連 續(xù)的,再加上循環(huán)程序段和子程序段要重復(fù)執(zhí)行多次。因此,對這些地址的訪問就自然地具有時(shí)間上集中分布的傾向。?
數(shù)據(jù)分布的這種集中傾向不如指令明顯,但對數(shù)組的存儲和訪問以及工作單元的選擇都可以使存儲器地址相對集中。這種對局部范圍的存儲器地址頻繁訪問,而對此范圍以外的地址則訪問甚少的現(xiàn)象,就稱為程序訪問的局部性。
根據(jù)程序的局部性原理,可以在主存和CPU通用寄存器之間設(shè)置一個(gè)高速的容量相對較小的存儲器,把正在執(zhí)行的指令地址附近的一部分指令或數(shù)據(jù)從主存調(diào)入這 個(gè)存儲器,供CPU在一段時(shí)間內(nèi)使用。這對提高程序的運(yùn)行速度有很大的作用。這個(gè)介于主存和CPU之間的高速小容量存儲器稱作高速緩沖存儲器 (Cache)。?
系統(tǒng)正是依據(jù)此原理,不斷地將與當(dāng)前指令集相關(guān)聯(lián)的一個(gè)不太大的后繼指令集從內(nèi)存讀到Cache,然后再與CPU高速傳送,從而達(dá)到速度匹配。
CPU對存儲器進(jìn)行數(shù)據(jù)請求時(shí),通常先訪問Cache。由于局部性原理不能保證所請求的數(shù)據(jù)百分之百地在Cache中,這里便存在一個(gè)命中率。即CPU在任一時(shí)刻從Cache中可靠獲取數(shù)據(jù)的幾率。?
命中率越高,正確獲取數(shù)據(jù)的可靠性就越大。一般來說,Cache的存儲容量比主存的容量小得多,但不能太小,太小會使命中率太低;也沒有必要過大,過大不僅會增加成本,而且當(dāng)容量超過一定值后,命中率隨容量的增加將不會有明顯地增長。
只要Cache的空間與主存空間在一定范圍內(nèi)保持適當(dāng)比例的映射關(guān)系,Cache的命中率還是相當(dāng)高的。?
一般規(guī)定Cache與內(nèi)存的空間比為4:1000,即128kB Cache可映射32MB內(nèi)存;256kB Cache可映射64MB內(nèi)存。在這種情況下,命中率都在90%以上。至于沒有命中的數(shù)據(jù),CPU只好直接從內(nèi)存獲取。獲取的同時(shí),也把它拷進(jìn) Cache,以備下次訪問。

Cache的基本結(jié)構(gòu)?
Cache通常由相聯(lián)存儲器實(shí)現(xiàn)。相聯(lián)存儲器的每一個(gè)存儲塊都具有額外的存儲信息,稱為標(biāo)簽(Tag)。當(dāng)訪問相聯(lián)存儲器時(shí),將地址和每一個(gè)標(biāo)簽同時(shí)進(jìn)行比較,從而對標(biāo)簽相同的存儲塊進(jìn)行訪問。Cache的3種基本結(jié)構(gòu)如下:

DCACHE

ARM cache架構(gòu)由cache存儲器和寫緩沖器(write-buffer)組成,其中寫緩沖器是CACHE按照FIFO原則向主存寫的緩沖處理器。

一般來說CACHEABILITY和BUFFERABILITY都是可以配置的,所以,一塊存儲區(qū)域可以配置成下面4種方式:NCNB CNB NCB CB。 在實(shí)際應(yīng)用當(dāng)中,可以根據(jù)需要對主存進(jìn)行配置。對I/O MAP來說,一般都需要采用NCNB方式,以保證對I/O的正確操作。而其他的存儲區(qū)域一般都可以配置成CB方式,以獲取最好的性能。

引入CACHE和WRITE BUFFER是為了提高存儲訪問的 速度,提供系統(tǒng)性能。如果CACHE打開的話,CPU讀寫主存的時(shí)候,都是通?
過CACHE進(jìn)行的。進(jìn)行讀操作的時(shí)候,如果在CACHE里面找到了所需的內(nèi)容 (CACHE HIT),直接從CACHE里讀取;如果要讀的內(nèi)容不在CACHE上的時(shí)候 (CACHE MISS),先把所需的內(nèi)容裝載到CACHE里,在從CACHE上讀取。進(jìn)行 寫操作的時(shí)候,數(shù)據(jù)先寫到CACHE上。具體又可以分為WRITE THROUGH和 WRITE BACK兩種方式。如果是WRITE THROUGH方式的話,每次寫操作都通?
過CACHE+WRITE BUFFER把數(shù)據(jù)直接寫到主存當(dāng)中去;如果是WRITE BACK 方式的話,數(shù)據(jù)最初只是寫到CACHE上,必要的時(shí)候(CACHE REPLACEMENT) 在將CACHE上的數(shù)據(jù)通過WRITE BUFFER實(shí)際回寫到主存當(dāng)中去。

DCaches使用的是虛擬地址,它的大小是16KB,它被分成512行(entry),每行8個(gè)字(8 words,32Bits)。每行有兩個(gè)修改標(biāo)志位(dirty bits),第一個(gè)標(biāo)志位標(biāo)識前4個(gè)字,第二個(gè)標(biāo)志位標(biāo)識后4個(gè)字,同時(shí)每行中還有一個(gè)TAG 地址(標(biāo)簽地址)和一個(gè)valid bit。?
??? 與ICaches一樣,系統(tǒng)上電或重起(Reset)的時(shí)候,DCaches功能是被關(guān)閉的,我們必須往Ccr bit置1去開啟它,Ccr bit在CP15協(xié)處理器中控制寄存器1的第2位(關(guān)閉DCaches功能則是往該位置0)。與ICaches不同,DCaches功能是必須在MMU開 啟之后才能被使用的。
我們現(xiàn)在討論的都是DCaches,你可能會問那Write Buffer呢?他和DCaches區(qū)別是什么呢? 其實(shí)DCaches和Write Buffer兩者間的操作有著非常緊密的聯(lián)系,很抱歉,到目前為止我無法說出他們之間有什么根本上的區(qū)別(-_-!!!),但我能告訴你什么時(shí)候使用的是 DCaches,什么時(shí)候使用的是Write Buffer.系統(tǒng)可以通過Ccr bit對Dcaches的功能進(jìn)行開啟與關(guān)閉的設(shè)定,但是在s3c2410中卻沒有確定的某個(gè)bit可以來開啟或關(guān)閉Write Buffer… 你可能有點(diǎn)懵…我們還是來看一張表吧,這張表說明了DCaches,Write Buffer和CCr,Ctt (descriptor中的C bit),Btt(descriptor中的B bit)之間的關(guān)系,其中“Ctt and Ccr”一項(xiàng)里面的值是 Ctt與Ccr進(jìn)行邏輯與之后的值(Ctt&&Ccr).

從上面的表格中我們可以清楚的知道系統(tǒng)什么時(shí)候使用的是DCaches,什么時(shí)候使用的是Write Buffer,我們也可以看到DCaches的寫回方式是怎么決定的(write-back or write-througth)。
在這里我要對Ctt and Ccr=0進(jìn)行說明,能夠使Ctt and Ccr=0的共有三種情況,分別是
Ctt =0, Ccr=0
Ctt =1, Ccr=0
Ctt =0, Ccr=1
我們分別對其進(jìn)行說明。

情況1(Ctt =0, Ccr=0):這種情況下CPU的DCaches功能是關(guān)閉的(Ccr=0),所以CPU存取數(shù)據(jù)的時(shí)候不會從DCaches里進(jìn)行數(shù)據(jù)地查詢,CPU直接去內(nèi)存存取數(shù)據(jù)。?
情況2(Ctt =1, Ccr=0):與情況1相同。?
情況3(Ctt =0, Ccr=1):這種情況下DCaches功能是開啟的,CPU讀取數(shù)據(jù)的時(shí)候會先從DCaches里進(jìn)行數(shù)據(jù)地查詢,若DCaches中沒有合適的數(shù)據(jù), 則CPU會去內(nèi)存進(jìn)行讀取,但此時(shí)由于Ctt =0(Ctt 是descriptor中的C bit,該bit決定該descriptor所描述的內(nèi)存區(qū)域是否可以被Cache),所以CPU不會把讀取到的數(shù)據(jù)Cache到DCaches(不發(fā)生 linefill).?
到此為止我們用兩句話總結(jié)一下DCaches與Write Buffer的開啟和使用:
1.DCaches與Write Buffer的開啟由Ccr決定。
2.DCaches與Write Buffer的使用規(guī)則由Ctt和Btt決定。

ICACHE

當(dāng)系統(tǒng)上電或重起(Reset)的時(shí)候,ICaches功能是被關(guān)閉的,我們必須往lcr bit置1去開啟它,lcr bit在CP15協(xié)處理器中控制寄存器1的第12位(關(guān)閉ICaches功能則是往該位置0)。ICaches功能一般是在MMU開啟之后被使用的(為了 降低MMU查表帶來的開銷),但有一點(diǎn)需要注意,并不是說MMU被開啟了ICaches才會被開啟,正如本段剛開始講的,ICaches的開啟與關(guān)閉是由 lcr bit所決定的,無論MMU是否被開啟,只要lcr bit被置1了,ICaches就會發(fā)揮它的作用。

大家是否還記得discriptor(描述符)中有一個(gè)C bit我們稱之為Ctt,它是指明該描述符描述的內(nèi)存區(qū)域內(nèi)的內(nèi)容(可以是指令也可以是數(shù)據(jù))是否可以被Cache,若Ctt=1,則允許Cache,否 則不允許被Cache。于是CPU讀取指令出現(xiàn)了下面這些情況:

如果CPU從Caches中讀取到所要的一條指令(cache hit)且這條指令所在的內(nèi)存區(qū)域是Cacheble的(該區(qū)域所屬描述符中Ctt=1),則CPU執(zhí)行這條指令并從Caches中返回(不需要從內(nèi)存中讀取)。?
若CPU從Caches中讀取不到所要的指令(cache miss)而這條指令所在的內(nèi)存區(qū)域是Cacheble的(同第1點(diǎn)),則CPU將從內(nèi)存中讀取這條指令,同時(shí),一個(gè)稱為“8-word linefill”的動作將發(fā)生,這個(gè)動作是把該指令所處區(qū)域的8個(gè)word寫進(jìn)ICaches的某個(gè)entry中,這個(gè)entry必須是沒有被鎖定的 (對鎖定這個(gè)操作感興趣的朋友可以找相關(guān)的資料進(jìn)行了解)?
若CPU從Caches中讀取不到所要的指令(cache miss)而這條指令所在的內(nèi)存區(qū)域是UnCacheble的(該區(qū)域所屬描述符中Ctt=0),則CPU將從內(nèi)存讀取這條指令并執(zhí)行后返回(不發(fā)生linefill)

通過以上的說明,我們可以了解到CPU是怎么通過ICaches執(zhí)行指令的。你可能會有這個(gè)疑問,ICaches總共只有512個(gè)條目(entry),當(dāng) 512個(gè)條目都被填充完之后,CPU要把新讀取近來的指令放到哪個(gè)條目上呢?答案是CPU會把新讀取近來的8個(gè)word從512個(gè)條目中選擇一個(gè)對其進(jìn)行 寫入,那CPU是怎么選出一個(gè)條目來的呢?這就關(guān)系到ICaches的替換法則(replacemnet algorithm)了。 ICaches的replacemnet algorithm有兩種,一種是Random模式另一種Round-Robin模式,我們可以通過CP15協(xié)處理器中寄存器1的RR bit對其進(jìn)行指定(0 = Random replacement 1 = Round robin replacement),如果有需要你還可以進(jìn)行指令鎖定(INSTRUCTION CACHE LOCKDOWN)。

虛擬cache

Cache 位于MMU前面靠近CPU稱為邏輯CACHE又叫虛擬Cache。CPU可以直接訪問CACHE的數(shù)據(jù),而ARM 11(ARMV6)的結(jié)構(gòu)是CACHE?? 在MMU后面CPU訪問CACHE要通過MMU地址轉(zhuǎn)換

在DM6446的core用的是哈佛結(jié)構(gòu),即把CACHE分為8K的D-CACHE(數(shù)據(jù)CACHE)和16K的I-cache(指令CACHE)

一個(gè)完整的CACHE分為CACHE控制器和CACHE存儲器

例子

Davinci DM6446 D-cache行應(yīng)為512行 ,cache存儲器主要分為三個(gè)部分:目錄存儲段(driectory-story),狀態(tài)信息段(status information)和數(shù)據(jù)項(xiàng)段(data section)每一行cache都包括這三部分。Cache用目錄存儲段來存儲主存的地址,數(shù)據(jù)項(xiàng)段存放的是主存的數(shù)據(jù),在cache中用狀態(tài)信息段來 記錄狀態(tài)信息,其中v表示有效位,d表示臟位,有效位記錄當(dāng)前cache行是活動的,cache行的數(shù)據(jù)和主存中的數(shù)據(jù)是一致的,處理器可以讀取。臟位則 表示cache行的數(shù)據(jù)和主存中的數(shù)據(jù)不一致。

在讀寫請求到達(dá)存儲器前會被CACHE捕獲,cache存儲器將該請求分成三部分標(biāo)簽,組索引和數(shù)據(jù)索引域,cache通過組索引域確定可能包含地 址和數(shù)據(jù)cache的行,cache存儲器檢查匹配的CACHE?????? 行的狀態(tài)標(biāo)簽,如果是V表示(cache hit)命中,否則cache失效(cache miss)在cache失效時(shí)從主存吧cache行考到CACHE存儲器

主存中的部分內(nèi)容存放在cache中的最簡單方式是直接映射,在一個(gè)直接映射中,主存的地址唯一對應(yīng)cache行,因?yàn)橹鞔嫒萘亢艽笏灾鞔娴暮芏嗟刂酚成涞酵粋€(gè)cache行

見下圖:

在DM6446 中內(nèi)存為128M (bootargs 設(shè)為128M)8K的D-CACHE則128×1024/8 = 16384映射一個(gè)cache行。由于cache的速度大大大于低速的主存速度,因此需要寫緩沖器。

Cache與DRAM存取的一致性

在CPU與主存之間增加了Cache之后,便存在數(shù)據(jù)在CPU和Cache及主存之間如何存取的問題。讀寫各有2種方式。

貫穿讀出式(Look Through)

該方式將Cache隔在CPU與主存之間,CPU對主存的所有數(shù)據(jù)請求都首先送到Cache,由Cache自行在自身查找。如果命中,則切斷CPU對主存的請求,并將數(shù)據(jù)送出;不命中,則將數(shù)據(jù)請求傳給主存。?
該方法的優(yōu)點(diǎn)是降低了CPU對主存的請求次數(shù),缺點(diǎn)是延遲了CPU對主存的訪問時(shí)間。?
旁路讀出式(Look Aside)?
在這種方式中,CPU發(fā)出數(shù)據(jù)請求時(shí),并不是單通道地穿過Cache,而是向Cache和主存同時(shí)發(fā)出請求。由于Cache速度更快,如果命中,則 Cache在將數(shù)據(jù)回送給CPU的同時(shí),還來得及中斷CPU對主存的請求;不命中,則Cache不做任何動作,由CPU直接訪問主存。
它的優(yōu)點(diǎn)是沒有時(shí)間延遲,缺點(diǎn)是每次CPU對主存的訪問都存在,這樣,就占用了一部分總線時(shí)間。

寫穿式(Write Through)

任一從CPU發(fā)出的寫信號送到Cache的同時(shí),也寫入主存,以保證主存的數(shù)據(jù)能同步地更新。

它的優(yōu)點(diǎn)是操作簡單,但由于主存的慢速,降低了系統(tǒng)的寫速度并占用了總線的時(shí)間。

回寫式(Copy Back)

為了克服貫穿式中每次數(shù)據(jù)寫入時(shí)都要訪問主存,從而導(dǎo)致系統(tǒng)寫速度降低并占用總線時(shí)間的弊病,盡量減少對主存的訪問次數(shù),又有了回寫式。

它是這樣工作的:數(shù)據(jù)一般只寫到Cache,這樣有可能出現(xiàn)Cache中的數(shù)據(jù)得到更新而主存中的數(shù)據(jù)不變(數(shù)據(jù)陳舊)的情況。但此時(shí)可在Cache 中設(shè)一標(biāo)志地址及數(shù)據(jù)陳舊的信息,只有當(dāng)Cache中的數(shù)據(jù)被再次更改時(shí),才將原更新的數(shù)據(jù)寫入主存相應(yīng)的單元中,然后再接受再次更新的數(shù)據(jù)。這樣保證了 Cache和主存中的數(shù)據(jù)不致產(chǎn)生沖突。

ARM cache 策略

Cache的寫策略分為直寫策略和回寫策略。同時(shí)向cache行和相應(yīng)的主存位置寫數(shù)據(jù),同時(shí)更新這兩個(gè)地方的數(shù)據(jù)的方法稱為直寫策略 (writethrough),把數(shù)據(jù)寫入cache行,不寫入主存的或者只有當(dāng)cache被替換時(shí)或清理cache行時(shí)才寫入主存的策略稱為回寫策略 (writeback)。采用回寫策略時(shí),當(dāng)處理器cache命中,只向cache存儲器寫數(shù)據(jù),不寫入主存,主存里的數(shù)據(jù)就和cache里不一 致,cache里的數(shù)據(jù)是最新的,主存里的數(shù)據(jù)是早前的。這就用cache存儲器信息狀態(tài)標(biāo)志位了,當(dāng)向cache存儲器里某行寫數(shù)據(jù)時(shí),置相應(yīng)行的信息 標(biāo)志臟位為1,那么主控制器下次訪問cache存儲器就知道cache里有主存沒有的數(shù)據(jù)了,把數(shù)據(jù)寫回到主存中去。

當(dāng)一個(gè)cache訪問失效時(shí),cache控制器必須從當(dāng)前有效行中取出一個(gè)cache行存儲從主存中取到的信息,被選中替換的cache行稱為丟棄者,如 果這個(gè)cache行中臟位為1則應(yīng)把該cache行中的數(shù)據(jù)回寫到主存中,而替換策略決定了那個(gè)cache行會被替換,在arm926ejs中ARM支持 兩種策略:輪轉(zhuǎn)策略和偽隨機(jī)策略。輪轉(zhuǎn)策略就是取當(dāng)前cache行的下一行,偽隨機(jī)策略是控制器隨機(jī)產(chǎn)生一個(gè)值。

當(dāng)cache失效時(shí),ARM采取兩種方式分配cache行,一種是讀操作(read-allocate)還有一種是讀-寫分配策略(read- write-allocate),當(dāng)cache未命中時(shí)對于讀操作策略,在對cache存儲器讀操作時(shí)才會分配cache行

全相聯(lián)Cache

在全相聯(lián)Cache中,存儲的塊與塊之間,以及存儲順序或保存的存儲器地址之間沒有直接的關(guān)系。程序可以訪問很多的子程序、堆棧和段,而它們是位于主存儲器的不同部位上。

因此,Cache保存著很多互不相關(guān)的數(shù)據(jù)塊,Cache必須對每個(gè)塊和塊自身的地址加以存儲。當(dāng)請求數(shù)據(jù)時(shí),Cache控制器要把請求地址同所有地址加以比較,進(jìn)行確認(rèn)。

這種Cache結(jié)構(gòu)的主要優(yōu)點(diǎn)是,它能夠在給定的時(shí)間內(nèi)去存儲主存器中的不同的塊,命中率高;缺點(diǎn)是每一次請求數(shù)據(jù)同Cache中的地址進(jìn)行比較需要相當(dāng)?shù)臅r(shí)間,速度較慢。

直接映像Cache

直接映像Cache不同于全相聯(lián)Cache,地址僅需比較一次。?
??? 在直接映像Cache中,由于每個(gè)主存儲器的塊在Cache中僅存在一個(gè)位置,因而把地址的比較次數(shù)減少為一次。其做法是,為Cache中的每個(gè)塊位置分配一個(gè)索引字段,用Tag字段區(qū)分存放在Cache位置上的不同的塊。
??? 單路直接映像把主存儲器分成若干頁,主存儲器的每一頁與Cache存儲器的大小相同,匹配的主存儲器的偏移量可以直接映像為Cache偏移量。Cache的Tag存儲器(偏移量)保存著主存儲器的頁地址(頁號)。?
??? 以上可以看出,直接映像Cache優(yōu)于全相聯(lián)Cache,能進(jìn)行快速查找,其缺點(diǎn)是當(dāng)主存儲器的組之間做頻繁調(diào)用時(shí),Cache控制器必須做多次轉(zhuǎn)換。?
組相聯(lián)Cache?
??? 組相聯(lián)Cache是介于全相聯(lián)Cache和直接映像Cache之間的一種結(jié)構(gòu)。這種類型的Cache使用了幾組直接映像的塊,對于某一個(gè)給定的索引號,可以允許有幾個(gè)塊位置,因而可以增加命中率和系統(tǒng)效率。

總結(jié)

以上是生活随笔為你收集整理的ARM的CACHE原理(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产免费成人在线视频 | 关之琳三级全黄做爰在线观看 | 污站在线观看 | 中文字幕在线观看一区 | 国产情趣视频 | 亚洲免费在线看 | 中文字幕免费高清在线观看 | 国产又粗又长又大视频 | 婷婷伊人五月 | 亚洲视频中文字幕在线观看 | 亚洲一区二区观看 | 国产精品毛片久久久久久久av | 好爽…又高潮了毛片免费看 | 午夜免费福利小视频 | 以女性视角写的高h爽文 | 爱爱免费网址 | 禁片天堂 | 欧美最猛黑人xxxx | 东京热一本视频一区 | av性色| 黄色污污网站 | 日韩伦理在线视频 | 人人草网站 | 亚洲视频网址 | 久久这里只有精品99 | 激情综合久久 | 久久艹中文字幕 | 男女男精品视频 | 在线香蕉| 伊人激情在线 | 久草福利视频 | 国产免费观看久久黄av片 | 国产精品免费在线 | 亚洲天天在线 | 韩国伦理中文字幕 | 日韩一级视频在线观看 | 国产视频资源 | 91黄色片 | 少妇被爽到高潮动态图 | 欧美久久久久久 | 人人澡人人澡 | 国产无码精品视频 | 亚洲精品一区二区三区四区乱码 | 狠狠干免费视频 | 黄色成人在线免费观看 | 一道本在线播放 | 国产精品欧美综合亚洲 | a在线看 | 黄色一级大片免费看 | 看av免费毛片手机播放 | 亚洲爱色 | 蜜桃成熟时李丽珍国语 | 久久一区二区三区四区 | 嫩草影院菊竹影院 | 国产成人精品久久二区二区 | 夜夜草导航 | 激情五月婷婷小说 | 亚洲综合五月天婷婷丁香 | 播放毛片 | 妺妺窝人体色www聚色窝仙踪 | 国产999精品 | 蜜桃av噜噜一区二区三区麻豆 | 欧美精品免费在线 | 777中文字幕| 精品人妻无码一区二区三 | 红桃视频国产 | 成人快色| 在线播放国产视频 | 久久日av| 中文字幕一级二级三级 | 高潮喷水一区二区三区 | 午夜免费毛片 | 日韩和欧美一区二区 | 欧美激情图区 | 精品一区二区三区蜜臀 | 亚洲三级网 | 男插女视频网站 | 成人免费高清在线观看 | 诱人的乳峰奶水hd | 亚洲手机在线观看 | 国产伦精品一区二区三区妓女 | 欧美综合激情 | 人人人妻人人澡人人爽欧美一区 | 成人午夜免费网站 | a天堂在线 | 天天草夜夜操 | 97xxxxx| 久热精品视频 | 亚洲天堂五月天 | 亚洲免费播放 | 黑人大群体交免费视频 | 精品国产污污免费网站入口 | 美女一区二区三区视频 | 色欲亚洲Av无码精品天堂 | 欧美又粗又长又爽做受 | 美女隐私无遮挡免费 | 亚洲经典一区二区三区 | 99热这里只有精品在线观看 | 国产专区一区二区 |