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

        ?

        基于PCI+Express2.0的高速網(wǎng)卡中DMA的設(shè)計

        2018-03-29 04:34:50鄭凱
        軟件 2017年8期
        關(guān)鍵詞:網(wǎng)卡

        摘要:PCffi總線已經(jīng)成為高帶寬網(wǎng)卡與計算機通信的主流總線。而DMA控制器是實現(xiàn)PCIE總線高帶寬應(yīng)用的關(guān)鍵因素。本文詳細闡述了基于PCIE接口的網(wǎng)卡中DMA引擎的接收和發(fā)送數(shù)據(jù)過程,介紹了描述符機制。本文提出了基于PCIE接口的網(wǎng)卡DMA的設(shè)計方案,并詳細說明了其中的實現(xiàn)難點和各子模塊的功能。本文還提出了影響DMA性能的主要因素和改進方向。

        關(guān)鍵詞:網(wǎng)卡;DMA機制;PCIExpress

        中圖分類號:TP334.7文獻標識碼:ADOI:10.3969/j.issn.1003-6970.2017.08.041

        本文著錄格式:鄭凱.基于PCI+ExpressZO的高速網(wǎng)卡中DMA的設(shè)計[J].軟件,2017,38(8):204-209

        引言

        高性能高可靠性的網(wǎng)絡(luò)接口卡是大型數(shù)據(jù)中心服務(wù)器直連高速網(wǎng)絡(luò)的關(guān)鍵部件。PCI Express2.0提供的最高單位通道速率已可達5.0Gb/s。使用該總線的網(wǎng)卡能適應(yīng)更高速度、更高帶寬網(wǎng)絡(luò)的需要。高速網(wǎng)卡通過直接內(nèi)存訪問機制(即DMA機制)來進行主機和網(wǎng)絡(luò)直接的數(shù)據(jù)交互。在DMA機制中,數(shù)據(jù)傳輸無需CPU的介入,大大降低主機的工作負擔。在主流的以PCIE為總線接口的網(wǎng)卡中,如何利用DMA機制來充分利用PC正總線的高帶寬特性,實現(xiàn)網(wǎng)卡和主機間的高速數(shù)據(jù)傳輸是目前的一個研究熱點。

        DMA控制器是隨著DMA機制在網(wǎng)卡中的應(yīng)用而出現(xiàn)的,DMA控制器的主要功能是通過硬件數(shù)據(jù)通路完成主機和網(wǎng)卡之間的數(shù)據(jù)交互。設(shè)計一個高效合理的DMA控制器首先需要理解DMA機制下的工作原理和傳輸數(shù)據(jù)的關(guān)鍵機制。并且需要了解軟件驅(qū)動程序和硬件網(wǎng)卡高效傳輸數(shù)據(jù)的交互過程。能否實現(xiàn)軟硬件協(xié)同高效工作,也是DMA設(shè)計好壞的一個指標。為了更好的應(yīng)用PCIE總線的特性,要充分了解PCIE總線協(xié)議和數(shù)據(jù)傳輸?shù)男问?。本文正是由以上思路來展開對論文的闡述。

        1DMA的關(guān)鍵機制和工作流程在網(wǎng)卡采用的DMA方式下,網(wǎng)卡在發(fā)送和讀寫前必須知道其讀寫的內(nèi)存地址,DMA控制器中接收和發(fā)送描述符的設(shè)計便是為DMA提供讀寫主存的地址和其他控制信息。

        1.1 接收和發(fā)送描述符隊列

        DMA控制器包含了兩個描述符隊列即接收和發(fā)送描述符隊列。描述符隊列的設(shè)計正是為了提高系統(tǒng)的性能和總線帶寬利用率。在主機的主存中也存在著同樣的兩個隊列的映射。

        1.2 接收和發(fā)送描述符隊列

        DMA控制器包含了兩個描述符隊列即接收和發(fā)送描述符隊列。描述符隊列的設(shè)計正是為了提高系統(tǒng)的性能和總線帶寬利用率。在主機的主存中也存在著同樣的兩個隊列的映射。

        如圖1為主存中發(fā)送描述符隊列示意圖,隊列中每個描述符中的地址信息被配置為一個待發(fā)送數(shù)據(jù)緩存的基地址。其中Base為這個描述符隊列存放在主存中的基地址,Size為隊列長度,Head指針指向此隊列中配好的第一個可用描述符,Tail指針指向此隊列中CPU配好的最后一個可用描述符。

        發(fā)送描述符的組成結(jié)構(gòu)如圖2所示。其中,Datalength域為待發(fā)送數(shù)據(jù)的長度,由CRJ來配置;RdAddr域為主存中待發(fā)送數(shù)據(jù)緩存的基地址。Own位由CPU置為0,表明為此描述可被DMA控制器使用;被硬件置為1,表明此描述符已經(jīng)被DMA控制器用掉,需要被CPU重新配置。

        1.3 高速網(wǎng)卡中DMA數(shù)據(jù)發(fā)送流程

        (1)CPU在主存中創(chuàng)建了一個發(fā)送描述符隊列,并且把該隊列在主存中的起始位置,隊列長度和頭尾指針(初值都為0)寫到網(wǎng)卡中的相關(guān)寄存器中去。

        (2)CPU被協(xié)議棧請求發(fā)包,它把包存放在一個緩存區(qū)或多個緩存區(qū)中。

        (3)CPU初始化描述符隊列中的描述符,將其指向待發(fā)送的數(shù)據(jù)緩存區(qū)。

        (4)主機準備好了可用的描述符,并及時更新網(wǎng)卡中的隊列尾指針寄存器。

        (5)網(wǎng)卡中的DMA通過查看頭尾指針寄存器的值,知道主存中有可用描述符,進而通過PCIE接口發(fā)起一次為獲取描述符的存儲器讀請求。

        (6)描述符以PCffi讀完成報文的形式被網(wǎng)卡接收并且存放到網(wǎng)卡中的專門位置。

        (7)DMA讀出描述符中存放的讀主存地址和長度等信息,通過PCIE總線發(fā)起一次為獲取主存中待發(fā)送數(shù)據(jù)的存儲器讀請求。如果讀取長度大于PCIE總線的最大讀請求長度,還會分割為幾次讀請求發(fā)出。

        (8)主存中的數(shù)據(jù)包被以PCIE完成報文的形式傳送到網(wǎng)卡中。

        (9)當整個數(shù)據(jù)包存放到本地網(wǎng)卡后,DMA會通過PCIE總線向主存發(fā)起一次存儲器寫請求,來回寫主存中被網(wǎng)卡剛用過的描述符。

        (10)DMA會發(fā)起一次中斷,通知主機驅(qū)動,數(shù)據(jù)包已經(jīng)被讀到網(wǎng)卡中,驅(qū)動可以釋放剛才的數(shù)據(jù)緩存。

        1.3 高速網(wǎng)卡中DMA數(shù)據(jù)接收流程

        (1)CPU在主存中創(chuàng)建了一個接收描述符隊列,并且把該隊列在主存中的起始位置,隊列長度和頭尾指針(初值都為0)寫到網(wǎng)卡中的相關(guān)寄存器中去。

        (2)主機將隊列中的描述符指針指向空的緩存,并且更新了網(wǎng)卡中尾指針寄存器的值。

        (3)接收DMA通過查看尾指針寄存器,獲知主存中有可用接收描述符,通過PCIE總線發(fā)出存儲器讀請求來獲取主存中的接收描述符。

        (4)接收描述符通過PC正總線以讀完成報文形式返回并被存放在網(wǎng)卡中的適當位置。

        (5)網(wǎng)絡(luò)的數(shù)據(jù)包進入接收MAC,并通過過濾模塊后進入接收FIFO中。

        (6)當網(wǎng)卡接收到一個完整包時,會發(fā)起數(shù)據(jù)傳輸請求。DMA讀取描述符中的寫主存地址并且根據(jù)數(shù)據(jù)包長度來進行切割請求,發(fā)起若干個存儲器與請求。

        (7)等一個完整的數(shù)據(jù)包都寫到主存,DMA可以回寫本地描述符中的數(shù)據(jù)包長度,并將own位置為1,表示此描述符已經(jīng)用完。

        (8)DMA通過PCIE接口,將回寫后的本地描述符組裝成存儲器寫請求,來回寫剛用掉的對應(yīng)主存中的描述符。

        (9)網(wǎng)卡產(chǎn)生一個中斷通知主機一個新的數(shù)據(jù)包已經(jīng)被接收到主存,等待處理。

        (10)主機讀取這個數(shù)據(jù)包并把它送到TCP/IP協(xié)議棧進行進一步處理。

        (11)主機釋放掉相關(guān)的緩存,并通過查看主存中描述符的狀態(tài)位確定哪些描述符已經(jīng)被用,并重新分配描述符。

        2 基于PCIE接口的DMA設(shè)計

        PCIExpress總線采用了一種類似網(wǎng)絡(luò)報文的形式來進行傳輸。在PCIExpress協(xié)議中,隱藏了地址線、數(shù)據(jù)線,以及中斷信號等邊緣信號。所有信息以傳輸層報文TLP(Transaction Layer Packet)進行傳輸。TLP與TCP/IP很相似,在報文中同樣也具有報文頭和載荷:報文頭是由代表不同傳輸信息的字段組成,如報文長度、報文傳輸?shù)刂返?;而載荷則由傳輸?shù)臄?shù)據(jù)構(gòu)成。

        PCIE的DMA讀/寫操作實現(xiàn)的主要方法是將TLP包頭中的各個字段正確填充,并將數(shù)據(jù)按照64bit或者32bit并行放在TLP包頭后,按照64bit或者32bit并行傳輸給PCffi核,由PCE核以PCIE協(xié)議串行傳輸給主機。

        2.1 系統(tǒng)設(shè)計架構(gòu)和模塊劃分

        結(jié)合高速網(wǎng)卡高效的數(shù)據(jù)收發(fā)流程,以及對PCIE總線協(xié)議的了解,本文提出了DMA控制器的設(shè)計方案。如圖3為基于PCIE總線的高速網(wǎng)卡中,DMA控制器的設(shè)計架構(gòu)圖。其中PCIE接口采用了賽林思的PCIE核。

        在DMA接收方向上大概的數(shù)據(jù)路徑依次是:網(wǎng)絡(luò)中的數(shù)據(jù)包通過RxMAC模塊進入網(wǎng)卡,被包過濾模塊過濾后,存放到接收緩存控制模塊的DataFIFO中,通過接收引擎送入PCIE接口,并最終寫入主存中去。

        在DMA發(fā)送方向上大概的數(shù)據(jù)路徑依次是:主存中的數(shù)據(jù)通過PCIE接口傳入網(wǎng)卡,在發(fā)送引擎中被解析后送到發(fā)送緩存控制模塊,并通過數(shù)據(jù)成幀模塊形成網(wǎng)絡(luò)報文,最終通過TXMAC模塊送到網(wǎng)絡(luò)中去。

        在數(shù)據(jù)接收和傳送過程中,都要用到描述符,它們被存放在各自的FIFO中。

        DMA的主要模塊包括接收引擎和發(fā)送引擎,以及描述符和寄存器讀寫模塊。

        2.2 接收引擎功能詳述

        接收引擎需要向PCIE核發(fā)送存儲器寫/讀請求和完成包,本設(shè)計支持以上三種包類型的產(chǎn)生。其中存儲器寫請求是用來向主存寫入網(wǎng)卡接收到的網(wǎng)絡(luò)報文。

        存儲器讀請求主要上有兩種用途:一是用來讀取主存中待發(fā)送的數(shù)據(jù);二是用來讀取主存中準備好的描述符,包括接收和發(fā)送描述符。

        完成報文主要是為了回應(yīng)主機對網(wǎng)卡中某些寄存器的讀操作。

        為了產(chǎn)生這三種報文,接收引擎內(nèi)部設(shè)計了專門的產(chǎn)生三種報文的模塊:即存儲器寫請求(MWr)組包模塊,存儲器讀請求(MRd)組包模塊,完成報文(Comp)組包模塊。

        2.2.1 存儲器寫請求(MWr)切片和組包模塊

        PCIE總線協(xié)議規(guī)定最大存儲器寫請求的數(shù)據(jù)載荷長度是4K字節(jié)。但是在大部分實際系統(tǒng)中,最大存儲器寫請求長度為128字節(jié)或者256字節(jié)。因此傳送長度較長的網(wǎng)絡(luò)報文需要分割為幾次存儲器寫請求。

        存儲器寫請求(MWr)切片模塊就是根據(jù)接收到的報文長度進行切割。當已經(jīng)接收到一個完整的報文,并且接收描述FIFO不空時,切片模塊讀入描述符FIFO中的寫主存地址,并讀取CtrlFIFO中的報文長度,隨后進行寫請求的分割。分割的原則是一次讀請求不能跨越主存地址的4k邊界,并且一次請求的長度不超過最大請求長度。

        存儲器寫請求切片模塊將每次切割的寫請求長度和寫主存地址送入存儲器寫請求包頭組裝模塊,進行包頭的組裝。組裝后的存儲器寫請求包頭會被存放到存儲器寫請求包頭FIFO中去。

        2.2.2 存儲器讀請求(MRd)切片和組包模塊

        存儲器讀請求切片模塊和存儲器寫請求切片模塊大體相似,但是它需要完成更多的任務(wù)。上文中提到存儲器讀請求要完成對主存中描述符的讀取。這需要通過查看網(wǎng)卡中的發(fā)送/接收描述符尾指針寄存器。

        當網(wǎng)卡中的尾指針寄存器有變化時,網(wǎng)卡需要計算兩次變化的差值并結(jié)合發(fā)送/接收描述符隊列基地址等信息,組成一次存儲器讀請求。如果這次讀取的描述符的數(shù)目很多,使讀取長度大于最大讀請求長度,就會分割為多次存儲器讀請求。每次切割后,將相關(guān)信息送入存儲器讀請求組包模塊中,生成多個存儲器讀請求并被存放到讀取發(fā)送/接收描述符請求FIFO中去。

        同樣,為了完成對主存中待發(fā)送數(shù)據(jù)的讀取,還需要查看發(fā)送描述符FIFO。如果發(fā)送描述FIFO不空,就會將描述符FIFO中的讀主存地址和數(shù)據(jù)長度讀入存儲器讀請求切片模塊進行切割。

        如果CPU剛剛更新了網(wǎng)卡中發(fā)送描述符的尾指針寄存器,并且這時發(fā)送描述符FIFO也不空,就需要對兩種切割任務(wù)的仲裁。當發(fā)送描述符FIFO中的描述符數(shù)目不小于一個最少值時,我們優(yōu)先發(fā)起獲取主存待發(fā)送數(shù)據(jù)的讀請求。當發(fā)送描述符FIFO中的描述符小于一個最小值時,我們要首先發(fā)起獲取新的發(fā)送描述符的讀請求丁作。

        在存儲器讀請求組包模塊中,我們通過存儲器讀請求中的標簽號(Tag號)來區(qū)分三種不同的讀請求,以便在接收它們對應(yīng)的完成報文時能分類存放和管理。因此Tag號的管理是一個非常重要的問題。

        2.2.3 完成報文(Comp)組包模塊

        如果主機想了解網(wǎng)卡中寄存器的相關(guān)信息,會發(fā)出存儲器讀請求,這時網(wǎng)卡就要回復一個完成報文。其中完成報文的切片操作是由發(fā)送引擎中解析到存儲器讀請求來觸發(fā)的。其中,完成報文包頭中的完成標號(completeId)等信息需要從PCIE核的配置接口來獲知。

        2.2.4 仲裁模塊

        當各種請求的包頭FIFO都不空時,我們需要進行對事務(wù)層報文(TLP)的接收進行仲裁。在本設(shè)計中,我們采用加權(quán)輪詢分時的方法對三種TLP報文請求進行調(diào)度。加權(quán)輪詢(Weighted Round Robin)是為了解決不同任務(wù)間的調(diào)度平衡問題,而通過為各個任務(wù)設(shè)置不同權(quán)重值,以權(quán)重值來組織各個任務(wù)的執(zhí)行時間,從而達到調(diào)度的合理性。

        當傳輸開始時,在傳輸模塊中分別有兩個計數(shù)器負責對讀寫請求計數(shù),當請求次數(shù)達到權(quán)重值,則將該請求計數(shù)器清零,跳入另一請求周期,如此反復直到傳輸完畢。采用這種分時方式的好處是,用戶可根據(jù)傳輸?shù)妮敵鐾掏碌奶攸c對傳輸進行配置。

        2.2.5 接收狀態(tài)機

        這個狀態(tài)機負責通過接收傳輸接口把TLP報文送給PCIE核。當要發(fā)起傳輸時,它要從存放各種TLP報文包頭FIFO中讀出包頭信息先存到寄存器中,然后在狀態(tài)機的控制下發(fā)送出去。

        這個狀態(tài)機模塊負責產(chǎn)生一次完整的DMA傳輸結(jié)束信號,回寫描述符FIFO中相應(yīng)的信息,并將回寫后的本地描述符組裝成存儲器寫請求送人到PCIE核。

        中斷邏輯也是在這個模塊產(chǎn)生的。接收狀態(tài)機負責產(chǎn)生中斷通知CPU刷新已使用的主存中相應(yīng)描述符。

        這個狀態(tài)機主要部分是傳輸狀態(tài)的產(chǎn)生邏輯和每種傳輸狀態(tài)下要分類傳送數(shù)據(jù)的邏輯。當包頭組裝模塊中某種存儲包頭的fifo不空時,狀態(tài)機狀態(tài)開始調(diào)轉(zhuǎn),進入傳送某種TLP包的狀態(tài)。

        2.3 發(fā)送引擎功能詳述

        2.3.1 發(fā)送狀態(tài)機

        發(fā)送狀態(tài)機用來解析主機發(fā)送到網(wǎng)卡的TLP報文類型,把收到的不同類型的數(shù)據(jù)送到各自對應(yīng)的FIFO緩存。當有存儲器讀請求時,要向接收引擎?zhèn)魉桶l(fā)起完成包的請求。

        2.3.2 發(fā)送檢測模塊

        發(fā)送檢測模塊的功能主要有:

        (1)檢測一次讀請求發(fā)起的完成包的結(jié)束,以釋放Tag資源。

        (2)檢測完整的一次DMA讀請求是否完成。

        (3)檢測收到的完成包是否正確。

        (4)產(chǎn)生中斷,通知CPU刷新已使用的主存中相應(yīng)描述符,并通知接收引擎發(fā)起回寫主存描述符的存儲器寫請求。

        2.3.3 數(shù)據(jù)緩存狀態(tài)機

        PCIE協(xié)議規(guī)定一次讀請求的完成包是按序收來的,但是后一次的讀請求對應(yīng)的完成可能比一次讀請求對應(yīng)的完成來的早。因此接收到的完成包的順序不一定是對應(yīng)發(fā)出的讀請求的順序,所以當存到SRAM里時要有一個存放排序的問題,根據(jù)完成包的tag標簽來分配存放地址。

        數(shù)據(jù)緩存狀態(tài)機就是要計算每個完成包要存放的起始地址和存放順序。

        2.4接收和發(fā)送描述符FIFO和寄存器模塊從主存中獲取的發(fā)送和接收描述符被分別存放在網(wǎng)卡中的發(fā)送和接收描述符FIFO。描述符的獲取和正確存放是實現(xiàn)DMA高效工作的必要條件。CPU通過PCIE總線將一些DMA相關(guān)寄存器信息寫到本地網(wǎng)卡中的DMA寄存器模塊。

        3 實現(xiàn)難點和性能改進方向

        3.1 DMA讀寫對界問題

        PCIE接口的TLP報文的數(shù)據(jù)載荷長度是以雙字為單位因此需要要求PCIE存儲器讀寫請求的地址都以雙字對齊。而網(wǎng)絡(luò)報文的長度不一定能被雙字整除,因此在報文的包頭填寫時需要做細致的處理,以實現(xiàn)數(shù)據(jù)對界的要求。

        為此我們采用了向前X字節(jié)對界和向后X字節(jié)對界的方法操作來處理對界問題。

        3.2 對存儲器讀完成TLP的亂序處理

        在PQE總線中,一個存儲器讀請求可以對應(yīng)幾個完成報文。設(shè)備發(fā)出的存儲器讀請求可以超越之前發(fā)出的存儲器讀請求。而且當存儲器完成報文使用的Transaction ID不同時,存儲器讀完成TLP也可能超越之前的存儲器讀完成TLP,這將造成存儲器讀完成TLP亂序到達網(wǎng)卡。

        但是我們要充分利用存儲器讀請求和其對應(yīng)的完成報文的Tag號相同的特點,以及同一個存儲器讀請求對應(yīng)的完成報文是按地址順序依次到達的。

        為了實現(xiàn)對亂序存儲器讀完成報文的接收,我們在DMA中采用了一塊SRAM對完成報文進行存儲。并且用一個小的RAM來對完成報文的存放順序做管理。我們以Tag號對這塊RAM進行編址,每個Tag號對應(yīng)的entry中填入這個讀請求對應(yīng)完成報文存到SRAM的起始存放地址。這個起始地址是以每個Tag號對應(yīng)的發(fā)送讀請求的先后順序來安排的。

        當這個讀請求對應(yīng)的一個完成報文到達后,要及時根據(jù)這個完成報文的長度,對這個RAM對應(yīng)的entry進行更新,遞增其目的存放地址,以便接收此存儲器讀請求對應(yīng)的下一個完成報文。當確認這個存儲器讀請求對應(yīng)的完成報文都已接收完成后,這個存儲器讀請求的Tag號對應(yīng)的Entry會被標記。并且這個Tag號會被其他存儲器讀請求再次使用,否則其它存儲器讀請求不能使用這個Tag號。

        當SRAM中的一個數(shù)據(jù)報文發(fā)送到網(wǎng)絡(luò)中后,已發(fā)送報文的存儲起始地址和報文長度會送到報文管理模塊,以便讓下一次存儲器讀請求返回的完成報文來使用。

        3.2 DMA性能改進的方向

        本文中的DMA是每當往主存寫好一個完整包后,就會向主機發(fā)出一次中斷。當網(wǎng)絡(luò)上的小報文集中大量涌入網(wǎng)卡時,會使網(wǎng)卡產(chǎn)生的接收中斷過于頻繁,導致CPU在沒有完成一次接收中斷處理的時候又有需要處理的接收中斷,CPU就會疲于處理接收中斷而沒有時間對接收數(shù)據(jù)做進一步處理。

        這需要我們可以不再以接收一個包來發(fā)出中斷。而是等一定量的數(shù)據(jù)塊(例如1K字節(jié)的包)寫到主存后,再發(fā)出中斷。但是這會大大增加DMA控制器硬件的復雜度。因為需要很多邏輯去解析這次接收的定量數(shù)據(jù)塊中含有數(shù)據(jù)報文的數(shù)目。因為CPU是以一個數(shù)據(jù)報文為單位來進行處理。

        另外描述符的設(shè)計上,多隊列描述符會比單隊列描述更能提高DMA控制器的性能。目前,市場上大多數(shù)采取描述符機制的網(wǎng)卡使用的是傳統(tǒng)的單隊列接收描述符。雖然服務(wù)器[11-12]的內(nèi)存可以配置到1GB以上,但對于越來越復雜的應(yīng)用程序來說服務(wù)器內(nèi)存仍然是緊缺資源。所以在描述符機制中分配給接收描述符的接收數(shù)據(jù)的緩沖區(qū)空間總量不會太大,而為了提高高速網(wǎng)卡的性能,接收描述符的數(shù)量當然是越多越好。這就需要在固定容量的緩沖區(qū)空間條件下開發(fā)更多個數(shù)的接收描述符。多對列描述符機制在同樣緩沖空間大小下能夠獲得更多的接收描述符,從而提高了網(wǎng)卡的性能。

        猜你喜歡
        網(wǎng)卡
        在DDS 中間件上實現(xiàn)雙冗余網(wǎng)卡切換的方法
        部署Linux虛擬機出現(xiàn)的網(wǎng)絡(luò)故障
        Server 2016網(wǎng)卡組合模式
        驗證鏈路聚合
        雙網(wǎng)卡疊加 提高網(wǎng)絡(luò)性能
        挑戰(zhàn)Killer網(wǎng)卡Realtek網(wǎng)游專用Dragon網(wǎng)卡
        讀編往來
        無線網(wǎng)卡種類有什么區(qū)別?
        RHEL7 Network Teaming(網(wǎng)卡綁定)配置與測試
        電腦與電信(2014年9期)2014-03-13 07:41:21
        USB故障又一原因
        美女扒开屁股让男人桶| 久久国产精品免费一区六九堂| 理论片87福利理论电影| 无码日韩人妻AV一区免费| 亚洲一区二区综合色精品| 男人的av天堂狠狠操| 一区二区三区国产天堂| 伊人青青草综合在线视频免费播放| 久热re这里精品视频在线6| 女人高潮被爽到呻吟在线观看| 又黄又爽又色的视频| 无码人妻中文中字幕一区二区 | 亚洲一区二区三区国产精品| 国产美女高潮流白浆视频| 亚洲美女av一区二区在线| 久久99国产综合精品| 天天躁日日躁狠狠躁av| 国产精品青草久久久久婷婷| 91精品啪在线观看国产色| 久久国产成人午夜av免费影院| 国产成a人亚洲精品无码樱花 | 亚洲人成网站色7799| 亚洲aⅴ无码成人网站国产app| 久久久www成人免费无遮挡大片| 亚洲女同免费在线观看| 亚洲乱码一区av春药高潮| 国产一品道av在线一二三区| 三级国产女主播在线观看| 国产丝袜美腿嫩模视频诱惑| 国产精品区一区二区三在线播放| 久久精品人妻一区二区三区| 美女污污网站| 一区二区三区高清视频在线| 久久久久久欧美精品se一二三四| 国产特级毛片aaaaaa高清| 激情综合欧美| 日本一区二区在线看看| 久久精品国产亚洲夜色av网站| 久久精品国产亚洲av高清热| 亚洲国产夜色在线观看| 中文字幕精品人妻av在线|