• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于無鎖數(shù)據(jù)結(jié)構(gòu)的FIFO隊列算法

    2018-08-17 00:28:02俊昌
    計算機工程 2018年8期
    關鍵詞:入隊單元格生產(chǎn)者

    俊昌, ,

    (1.南京郵電大學 計算機學院,南京 210023; 2.江蘇省大數(shù)據(jù)安全與智能處理重點實驗室,南京 210023)

    0 概述

    近年來,隨著多核處理器的廣泛應用,高速應用程序的并行化飛速發(fā)展[1-4]。其中一種可行的并行化方法為流水線并行化,即多核處理器中的一個處理器核心完成較大任務中的第一階段子任務,然后將該任務傳遞給另一個核心,該核心負責完成下一階段的子任務處理。

    由于現(xiàn)代商用多核處理器中普遍缺乏硬件支持的核間通信機制[5],因此當前研究大多采用基于軟件實現(xiàn)的無鎖隊列[1-2,6-7]作為流水線的核間通信機制。然而,現(xiàn)有無鎖隊列算法在設計時均假設數(shù)據(jù)的到達速率處于穩(wěn)定狀態(tài),如果輸入數(shù)據(jù)到達速率波動較大,隊列將頻繁地趨于空或趨于滿,從而導致無鎖隊列性能急劇下降。因此,在真實應用場景中,采用流水線并行技術(shù)的軟件性能往往急劇下降。

    針對數(shù)據(jù)到達速率不穩(wěn)定的實際應用場景,本文提出一種新的無鎖隊列TinyQueue。當數(shù)據(jù)到達速率較低時,自適應地減小隊列大小,以減少內(nèi)存占用;而當數(shù)據(jù)到達速率較高時,則自適應地增加隊列大小,以避免數(shù)據(jù)丟失。

    1 相關工作

    無鎖隊列被廣泛地應用于多線程程序中,并且也有大量關于并發(fā)無鎖隊列的研究[8-11],其中大部分研究都集中在多生產(chǎn)者多消費者隊列。然而,由于需要避免ABA問題,因此這些無鎖隊列性能都不甚理想。

    作為一種特殊情況,單生產(chǎn)者單消費者隊列是實現(xiàn)高速核間通信很好的解決方案[1-2,6-7,12],因為它從根本上避免了ABA問題。此外,這些隊列的實現(xiàn)通常采用批處理來利用CPU高速緩存提高隊列的吞吐量。Lynx[13]是一個SPSC隊列,其降低了入隊操作和出隊操作的檢查開銷。但Lynx的主要設計目標是增加隊列的吞吐量,相比之下,TinyQueue更適用于實際應用場景中數(shù)據(jù)到達速率波動較大的情況。

    另一種通信的方法是基于硬件隊列[14-15],它們從硬件層面上提供入隊操作和出隊操作的指令,以減少基于軟件隊列的開銷。然而,因為硬件隊列的狀態(tài)必須通過上下文切換來保留,所以需要對處理器和操作系統(tǒng)進行修改。目前它們也主要存在于仿真器中,對于商用處理器而言還不支持這種功能。

    2 TinyQueue基礎算法

    TinyQueue基于以下基礎算法(算法1和算法2),其中整個隊列是一個無限數(shù)組,使用head和tail來標識包含有效數(shù)據(jù)的部分。最初,每個單元格data[i]為空,初始值為ELEMENT_ZERO。

    算法1基礎算法入隊操作

    變量:value (將被插入隊列的數(shù)據(jù))

    1.if(data[head]!= ELEMENT_ZERO ) {

    2.return BUFFER_ FULL;

    3.}

    4.data[head]= value;

    5.head ++;

    6.if(head > QUEUE_MAX_SIZE ) {

    7.head = 0;

    8.}

    9.return SUCCESS

    算法2基礎算法出隊操作

    1.if(data[tail] == ELEMENT_ZERO ) {

    2.return BUFFER_EMPTY;

    3.}

    4.temp = data[tail];

    5.data[tail] = ELEMENT_ZERO;

    6.tail ++;

    7.if(tail > QUEUE_MAX_SIZE) {

    8.tail = 0;

    9.}

    10.return temp;

    算法1是入隊操作的偽代碼。入隊操作首先讀取head指向的單元格的值(第1行)來檢查隊列是否已滿。如果該值等于ELEMENT_ZERO,即該單元格不包含有用的數(shù)據(jù),則可以插入數(shù)據(jù)。此時若該單元格已經(jīng)準備好接收數(shù)據(jù),入隊線程會將數(shù)據(jù)插入到該單元格中(第4行)且head遞增。若head超出了隊列長度,則將head置為0(第6行~第8行)。

    算法2是出隊操作的偽代碼。出隊操作首先讀取tail指向的單元格的值并與ELEMENT_ZERO進行比較,檢查隊列是否為空(第1行)。如果tail指向的單元格的值等于ELEMENT_ZERO,表示數(shù)據(jù)不能出隊,返回BUFFER_EMPTY。否則,出隊操作讀取tail指向的單元格的值(第4行),然后將ELEMENT_ZERO寫入該單元格中,表示數(shù)據(jù)成功出隊(第5行)且tail遞增,如果tail的大小超出了隊列長度,則將tail置為0(第7行~第9行)。

    值得注意的是,該基礎算法僅適用于單生產(chǎn)者單消費者循環(huán)隊列,所以,即使在沒有Compare-and-Swap(CAS)原語保護的情況下,將數(shù)據(jù)插入head指向的單元格中也是安全的。

    3 TinyQueue核心算法

    TinyQueue基于算法1和算法2,其設計思想如圖1所示。當數(shù)據(jù)到達速率較低時,隊列趨于空,如果此時生產(chǎn)者位于消費者后面且兩者都不會訪問隊列的后半部分,TinyQueue會自適應地將隊列大小減半,以減少其內(nèi)存占用,提高緩存命中率;當數(shù)據(jù)到達速率較高時,隊列趨于滿,如果此時生產(chǎn)者位于消費者前面,TinyQueue會自適應地將隊列大小增加一倍,以避免數(shù)據(jù)丟失。

    圖1 TinyQueue算法原理

    3.1 數(shù)據(jù)結(jié)構(gòu)和全局變量

    算法3是TinyQueue的主要數(shù)據(jù)結(jié)構(gòu)。每個隊列都會創(chuàng)建一個TinyQueue實例,其中:data是指向預分配的循環(huán)數(shù)組的指針;traffic是一個有符號整數(shù),用于計算隊列full/empty單元格數(shù),每當入隊操作因為隊列滿失敗時,traffic減1,每當出隊操作因隊列空失敗時,traffic加1。因此,traffic的大小可以反映數(shù)據(jù)到達頻率的波動情況,即可以用它來決定是否需要增加或減小隊列的大小;變量size用來表示隊列的大小,TinyQueue會預先分配一個MAX_SIZE大小的數(shù)組,其中MAX_SIZE等于100 000,但TinyQueue會根據(jù)traffic自動選擇預分配數(shù)組的第一部分;變量head和tail分別指向入隊線程將要插入數(shù)據(jù)的單元格和出隊線程將要提取數(shù)據(jù)的單元格。值得注意的是,要減小隊列大小時,變量head和size必須同時更新,所以將其封裝在結(jié)構(gòu)體cas_info中。由于每個變量長度都是32位,因此cas_info是一個64位的字,在64位對齊的服務器上,其更新操作是原子的。

    算法3TinyQueue數(shù)據(jù)結(jié)構(gòu)

    1.struct cas info {

    2.head:Indicator of enqueue (32-bits integer);

    3.size:Size of the cyclic array (32-bits integer);

    4.};

    5.struct tinyqueue {

    6.info:instance of struct cas_info;

    7.//緩存行(cache line)對齊

    8.tail:Indicator of dequeue (32-bits integer);

    9.//緩存行(cache line)對齊

    10.traffic:Statistical counter of empty and full cases;

    11.//緩存行(cache line)對齊

    12.data:pointer to cyclic array;

    13.};

    3.2 TinyQueue入隊操作

    TinyQueue入隊操作(算法4)基于算法1。入隊操作首先檢查隊列是否已滿(第3行)。如果隊列已滿,則traffic加1(第4行)并返回BUFFER_FULL;否則,入隊操作將head賦值給局部變量temp(第7行)且head遞增。如果head大于或等于size(第9行),表示head指向TinyQueue循環(huán)數(shù)組的尾部,入隊操作將比較traffic與預定義閾值ENLARGE_THRESHOLD的大小來判斷是否需要增加隊列的大小(第10行)。若traffic較大,入隊操作將隊列大小增加1倍即變量size乘以2(第11行),然后將traffic置為0;若traffic較小,則說明不需要調(diào)整隊列大小,入隊操作將head置為0,使其指向隊列的第一個單元格(第15行),然后保存數(shù)據(jù)并返回SUCCESS。

    算法4TinyQueue入隊操作

    變量:value (將被插入隊列的數(shù)據(jù))

    1.//局部變量

    2.temp:local variable to buffer value of info.head

    3.if(data[head] != ELEMENT_ZERO ) {

    4.traffic++;

    5.return BUFFER_FULL;

    6.}

    7.temp = info.head;

    8.info.head ++;

    9.if(info.head > info.size ) {

    10.if( traffic > ENLARGE_THRESHOLD ) {

    11.info.size = info.size * 2;

    12.traffic = 0;

    13.}

    14.else {

    15.info.head = 0;

    16.}

    17.}

    18.data[temp] = value;

    19.return SUCCESS;

    3.3 TinyQueue出隊操作

    TinyQueue出隊操作(算法5)基于算法2實現(xiàn)。出隊操作首先檢查隊列是否為空(第5行)。如果隊列為空,traffic減1并返回EMPTY(第6行);如果隊列不為空,出隊操作將tail賦值給局部變量temp(第9行),tail遞增(第10行)。若tail等于size(第11行),則說明tail指向TinyQueue循環(huán)數(shù)組的尾部,出隊操作將比較traffic與預定義閾值SHRINK_THRESHOLD的大小來判斷是否需要減小隊列大小(第14行)。SHRINK_THRESHOLD是一個負整數(shù)(例如-50),用來表示隊列EMPTY的情況。若traffic較小,則出隊操作將局部變量size除以2(第19行)使隊列大小減半,然后更新全局共享變量size(第25行),強制入隊操作和出隊操作使用新的隊列大小,然而,減小隊列大小仍然存在一些易錯點;若traffic的值較大,則說明不需要調(diào)整隊列的大小,出隊操作將tail置為0,使其指向隊列的第一個單元格。最后,出隊操作從單元格中提取數(shù)據(jù)(第37行),將ELEMENT_ZERO寫入單元格中(第38行)并返回。

    算法5TinyQueue出隊操作

    1.//局部變量

    2.temp:local variable to buffer value of tail

    3.temp_value:local variable to buffer value of data pointed by tail

    4.info_tmp,info_tmp_new:local instances of structure info

    5.if(data[tail] == ELEMENT ZERO ) {

    6.traffic--;

    7.return BUFFER_EMPTY;

    8.}

    9.temp = tail;

    10.tail++;

    11.if(tail >= info.size ) {

    12.count = 0;

    13.tag1;

    14.if(traffic <= SHRINK_THRESHOLD) {

    15.info_tmp = info_tmp_new = info;//原子的讀取

    16.if(count LOOP THRESHOLD ) {

    17.goto 34;

    18.}

    19.if(info_tmp.head <= info_tmp.size / 2 ) {

    20.info_tmp_new.size /= 2;

    21.}

    22.else {

    23.goto 34;

    24.}

    25.if(CAS(&info,info_tmp,info_tmp_new)) {

    26.traffic = 0;

    27.goto 34;

    28.}

    29.else {

    30.count++;

    31.goto 13;

    32.}

    33.}

    34.tag2;

    35.tail = 0;

    36.}

    37.temp_value = data[temp];

    38.data[temp] = ELEMENT_ZERO;

    39.return temp_value;

    3.4 TinyQueue增加隊列大小操作

    由算法4和算法5可知,入隊操作和出隊操作每次都需要先讀取size的值來檢查它們是否到達TinyQueue循環(huán)數(shù)組的尾部。因此,TinyQueue增加隊列大小的基本思路是:如果size乘以2,那么入隊操作和出隊操作可以使用的循環(huán)數(shù)組的大小也會增加1倍。但是在算法設計中應保證其正確性和無鎖性。圖2展示了增加隊列大小時可能發(fā)生的2種情況:

    1)生產(chǎn)者在消費者后面(圖2標為不安全)。在這種情況下,通過改變size的值來改變隊列的大小是不安全的。因為消費者線程會讀取新的size,然后使用未插入數(shù)據(jù)的單元格,進而產(chǎn)生錯誤。

    2)生產(chǎn)者在消費者前面(圖2標為安全)。在這種情況下,當生產(chǎn)者到達當前循環(huán)數(shù)組的尾部時,生產(chǎn)者通過改變size來增加隊列大小并使用新分配的單元格是安全的。因為在生產(chǎn)者向新的單元格插入數(shù)據(jù)前,消費者不會超過生產(chǎn)者使用新分配的單元格。針對此種情況的具體實現(xiàn)在算法4中已給出(第9行~第17行)。

    圖2 增加隊列大小的情況

    3.5 TinyQueue減小隊列大小操作

    由于TinyQueue是一個高速無鎖隊列,因此很難通過減小size來減小隊列大小。圖3展示了收縮隊列時可能遇到的2種情況:

    1)生產(chǎn)者位于消費者前面(圖3標為不安全)。在這種情況下減小隊列大小是不安全的。因為生產(chǎn)者可能會將數(shù)據(jù)插入到TinyQueue不會使用的隊列后半部分。

    2)生產(chǎn)者位于消費者之后(圖3標為安全)。在這種情況下,當消費者到達隊列尾部時,如果生產(chǎn)者位于隊列前半部分,消費者通過改變size來減小隊列大小是安全的,但減小size和檢查生產(chǎn)者是否在隊列前半部分必須是同時的原子操作。為了實現(xiàn)這一點,本文將變量size和head封裝為一個64位結(jié)構(gòu)體(算法3中的cas_info),其可以通過CAS指令原子的更新。因此,本文做了一個符合現(xiàn)實的假設,即TinyQueue隊列大小最大不超過232。但當消費者嘗試減小隊列大小時,若生產(chǎn)者一直位于隊列前半部分,會使消費者一直不斷嘗試減小隊列大小。為了避免這種潛在的活鎖問題,本文設置了一個閾值LOOP_THREASHOLD,當消費者嘗試次數(shù)大于LOOP_THREASHOLD時,消費者就會放棄。

    圖3 減小隊列大小的情況

    在算法5中,出隊操作首先讀取結(jié)構(gòu)體info(第15行),然后檢查其是否已經(jīng)多次嘗試減小隊列大小。如果嘗試次數(shù)已經(jīng)大于LOOP_THREASHOLD,那么將會放棄出隊(第16行)以避免活鎖問題。否則,檢查head是否小于隊列大小的一半(第19行)來判斷生產(chǎn)者是否位于隊列前半部分。如果生產(chǎn)者位于隊列前半部分,入隊操作引入新的變量info_tmp_new,并將info_tmp_new.size的值減半(第20行)。否則,減小隊列大小和出隊操作都是不安全的。如果入隊操作可以減小隊列大小,那么它將嘗試使用CAS指令來更新size(第25行),從而保證以下2個操作都是原子的:1)確保生產(chǎn)者沒有移動到將要移除的數(shù)組的下半部分;2)size減半。如果CAS指令成功,則出列操作將traffic置為0并返回(第26行)。否則,count遞增,并返回到開始位置再次嘗試(第30行)。

    4 性能評估

    本節(jié)將會對TinyQueue的性能與現(xiàn)有的最佳解決方案FastForward、MCRingBuffer和B-Queue的性能進行對比。

    4.1 實驗設置

    在Dell R730服務器上進行性能評估。該服務器配有2個Intel Xeon E5-2609處理器,每個處理器包含8個CPU內(nèi)核,最高頻率可達1.7 GHz。每個CPU內(nèi)核有32 KB的一級數(shù)據(jù)緩存,32 KB的一級指令緩存和256 KB的二級緩存。同一處理器上的8個CPU內(nèi)核共享20 MB的三級緩存。2個處理器間通過2條6.4 GT/s的QPI鏈路相連。該服務器使用128 GB DDR4內(nèi)存,運行64位的Ubuntu 16.04,其內(nèi)核版本為Linux kernel version 4.4.0。TinyQueue使用GCC 5.4.0編譯。

    實驗中,生產(chǎn)者將1013條數(shù)據(jù)插入到隊列中,消費者將按順序讀取這些數(shù)據(jù)。每個線程都將綁定到一個專用的CPU上,并且生產(chǎn)者線程和消費者線程分別運行在不同的CPU上。為了獲取入隊操作和出隊操作的執(zhí)行時間,使用X86中基于硬件的時間戳計數(shù)器來記錄RDTSC寄存器執(zhí)行1013次入隊操作和出隊操作所需的CPU周期。單個入隊或出隊操作的時間可通過總CPU周期數(shù)除以1013減去工作負載時間求得。值得注意的是,讀取RDTSC寄存器并不是一個序列化指令,這意味著總CPU周期數(shù)會存在一些偏差。盡管如此,因為總CPU周期數(shù)需要除以1013,所以筆者認為單個入隊操作或出隊操作的時間偏差可忽略不計。對于其他的統(tǒng)計信息(如緩存未命中率),本文使用Linux Perf 獲得。每條數(shù)據(jù)通過30次實驗獲得。

    4.2 理想平臺性能測試

    在理想測試平臺上對4種無鎖隊列進行了性能測試。在實驗中,生產(chǎn)者線程執(zhí)行while循環(huán),并且在每次迭代中都會盡可能快地將數(shù)據(jù)插入隊列中。當隊列滿時,生產(chǎn)者線程將休眠1 μs避免和消費者線程沖突。隊列大小設置為2 048。

    表1列出了在同一CPU(2個線程運行在同一CPU上)和跨CPU(2個線程運行在不同的CPU上)每個操作所需的CPU周期。實驗中使用Perf分析無鎖隊列的緩存行為(選擇一級數(shù)據(jù)緩存命中率進行分析)。

    表1 理想測試平臺上的最高性能

    表1的數(shù)據(jù)是4種隊列在理想測試臺上達到的最佳性能,每個入隊或出隊操作最少只需要十幾個CPU周期。為了進一步研究不同的無鎖隊列在理想測試平臺上的性能,本文統(tǒng)計了隊列的緩存行為。一級緩存缺失率一列數(shù)據(jù)表明4種無鎖隊列都具有較高的一級緩存命中率。造成這種情況的原因在于在理想測試平臺上,無鎖隊列工作集很小,幾乎所有的內(nèi)存訪問都可以通過一級緩存進行。

    然而,在真正的應用程序中,無鎖隊列的工作集通常會很大,數(shù)據(jù)傳入速率也會大幅波動。在這種情況下,無鎖隊列的工作集就不能全都保存在一級緩存中,從而會導致容量緩存未命中和一致性緩存未命中。例如,對于本文使用的E5-2609處理器,一次一級緩存命中需要2個CPU周期,一次二級緩存命中需要10個CPU周期,一次三級緩存命中需要40個CPU周期,一次存儲區(qū)訪問則需要200個CPU周期。顯然,單獨的三級緩存命中會妨礙無鎖隊列實現(xiàn)最高性能。也就是說,在理想測試平臺上性能優(yōu)異的無鎖隊列在實際應用中的性能可能會有所下降。這一點筆者將在下文中進行論述。

    4.3 真實平臺性能測試

    為了評估TinyQueue在實際應用中處理傳入數(shù)據(jù)突發(fā)性的能力,在真實測試平臺上對其進行了性能測試。在該測試平臺中,用戶每次從隊列中檢索一條數(shù)據(jù)并等待85個CPU周期(一條10 Gb/s的鏈路處理一個數(shù)據(jù)包的時間)來模擬工作負載。為了模擬實際應用中的突發(fā)事件,生產(chǎn)者線程在每次迭代中都會執(zhí)行以下操作:1)休眠一段時間(處理單條數(shù)據(jù)的時間乘以突發(fā)數(shù)據(jù)的大小)以模擬批處理過程中網(wǎng)絡設備中斷;2)盡可能快地插入數(shù)據(jù)。

    圖4顯示了入隊或出隊操作所需的平均CPU周期數(shù)。可以看出,當突發(fā)數(shù)據(jù)較小時(例如小于2 048),不同的無鎖隊列的性能是相似的。但是隨著數(shù)據(jù)大小的增加,FastForward、MCRingBuffer和BQueue的性能會急劇下降,但TinyQueue的性能幾乎不變。

    圖4 真實平臺上不同無鎖隊列的性能表現(xiàn)

    為探究TinyQueue在真實測試平臺中表現(xiàn)更好的原因,將突發(fā)數(shù)據(jù)的大小設置為4 096。表2列出了不同無鎖隊列的性能。由同一CPU列和跨CPU列的數(shù)據(jù)可知,TinyQueue的性能明顯優(yōu)于其他3種隊列。其中最小長度列和最大長度列的數(shù)據(jù)分別表示系統(tǒng)運行時隊列的最小長度和最大長度(這里只列出了TinyQueue的隊列長度,因為其他隊列不能隨時改變它們的隊列大小)。由實驗數(shù)據(jù)可知,當數(shù)據(jù)到達速率較高時,TinyQueue可以將隊列增加到65 536個單元,以處理數(shù)據(jù)的突發(fā)性,而當數(shù)據(jù)到達速率較低時,TinyQueue也可以將隊列減小到256個單元。真實平臺上的性能測試結(jié)果表明,由于TinyQueue可以自適應地調(diào)整隊列大小,因此其具有最高的一級緩存命中率(99.20%)和最低的三級緩存未命中率(0.07%)。通過減小隊列大小,TinyQueue可以大大減小緩存缺失率,從而提高隊列的整體性能。

    表2 真實測試平臺中各無鎖隊列的性能

    值得注意的是,在該真實測試平臺上,所有隊列的性能都比在文獻[1,6]中所采用的理想測試平臺中的性能要差(在理想測試平臺中,一次入隊或出隊操作通常需要10 ns),其原因在于在該真實測試平臺中,本文更真實地還原了實際應用中數(shù)據(jù)的接收處理場景。正如文獻[1]指出的,在這樣的測試平臺上測試一個隊列的性能比在理想測試平臺上測試更有價值。

    5 結(jié)束語

    本文提出一種適用于多核處理器中流水線并行化的高效無鎖隊列TinyQueue。當數(shù)據(jù)到達速率較低時,TinyQueue可以自適應地減小隊列大小,保持較小的內(nèi)存占用,提高緩存命中率;當數(shù)據(jù)速率較高時,TinyQueue可以自適應地增加隊列大小,以避免數(shù)據(jù)丟失。因此,即使在輸入數(shù)據(jù)頻率波動較大的實際應用中,TinyQueue仍能在較少的CPU周期內(nèi)完成一次入隊或出隊操作,保持較好的性能。由于TinyQueue的性能可以通過實時系統(tǒng)調(diào)度器進一步優(yōu)化,因此下一步將對此進行研究。

    猜你喜歡
    入隊單元格生產(chǎn)者
    今天我入隊——入隊儀式
    少先隊活動(2022年5期)2022-06-06 03:45:02
    1月巴西生產(chǎn)者價格指數(shù)上漲3.92%
    1+1我們這樣學隊章:我們的入隊誓詞
    少先隊活動(2020年7期)2020-08-14 01:17:50
    玩轉(zhuǎn)方格
    玩轉(zhuǎn)方格
    2019德國IF設計大獎
    今天我入隊了
    淺談Excel中常見統(tǒng)計個數(shù)函數(shù)的用法
    西部皮革(2018年6期)2018-05-07 06:41:07
    家禽福利的未來:生產(chǎn)者能期待什么?
    入隊風波
    日韩av不卡免费在线播放| 国产aⅴ精品一区二区三区波| 最近手机中文字幕大全| 国内精品宾馆在线| 俺也久久电影网| 色播亚洲综合网| 国产精品久久久久久av不卡| 国产欧美日韩一区二区精品| 久久99热6这里只有精品| 蜜桃久久精品国产亚洲av| 亚洲天堂国产精品一区在线| 午夜精品一区二区三区免费看| 精品久久久久久久久久久久久| 日韩大尺度精品在线看网址| 国产黄片美女视频| 国产精品亚洲一级av第二区| 日韩欧美 国产精品| 国产三级在线视频| 久久亚洲精品不卡| 两个人的视频大全免费| 亚洲中文字幕日韩| 波多野结衣巨乳人妻| 久久亚洲国产成人精品v| 看十八女毛片水多多多| 在线a可以看的网站| 国产精品亚洲一级av第二区| 中文亚洲av片在线观看爽| 三级经典国产精品| 人妻制服诱惑在线中文字幕| 亚洲成人av在线免费| 国内精品美女久久久久久| 老熟妇仑乱视频hdxx| av天堂在线播放| 色在线成人网| 婷婷六月久久综合丁香| 我的女老师完整版在线观看| 亚洲内射少妇av| 国产黄色小视频在线观看| 午夜免费激情av| 亚洲美女搞黄在线观看 | 五月伊人婷婷丁香| 亚洲五月天丁香| 欧美极品一区二区三区四区| 99久久精品热视频| 亚洲欧美日韩卡通动漫| 又爽又黄无遮挡网站| 91狼人影院| av中文乱码字幕在线| 亚洲无线在线观看| 女人被狂操c到高潮| 亚洲精华国产精华液的使用体验 | 长腿黑丝高跟| 少妇熟女欧美另类| 两性午夜刺激爽爽歪歪视频在线观看| 免费看a级黄色片| 成人漫画全彩无遮挡| 精品无人区乱码1区二区| 看片在线看免费视频| 午夜福利高清视频| 日韩欧美免费精品| 亚洲美女搞黄在线观看 | 国产人妻一区二区三区在| 人妻丰满熟妇av一区二区三区| 精品熟女少妇av免费看| 国产一区二区亚洲精品在线观看| 国产中年淑女户外野战色| 久久久欧美国产精品| 欧美+亚洲+日韩+国产| 亚洲最大成人av| 在线看三级毛片| 尾随美女入室| 深夜a级毛片| а√天堂www在线а√下载| 中出人妻视频一区二区| 老熟妇乱子伦视频在线观看| 我的女老师完整版在线观看| av女优亚洲男人天堂| 精品国内亚洲2022精品成人| 午夜影院日韩av| 深爱激情五月婷婷| 欧美国产日韩亚洲一区| 99久久久亚洲精品蜜臀av| 亚洲精品粉嫩美女一区| 成年免费大片在线观看| 国产成人一区二区在线| 亚洲人成网站在线播放欧美日韩| 可以在线观看的亚洲视频| 狂野欧美白嫩少妇大欣赏| 成年免费大片在线观看| a级一级毛片免费在线观看| 国产精品亚洲一级av第二区| 国产 一区精品| 国产成人福利小说| 嫩草影院入口| 美女内射精品一级片tv| 国产视频内射| 精品国内亚洲2022精品成人| av福利片在线观看| 亚洲国产精品sss在线观看| 国产av不卡久久| 美女内射精品一级片tv| 欧美丝袜亚洲另类| 日本一本二区三区精品| 少妇熟女aⅴ在线视频| 久久精品人妻少妇| 我的女老师完整版在线观看| 欧美zozozo另类| 韩国av在线不卡| 啦啦啦观看免费观看视频高清| 成年版毛片免费区| 最好的美女福利视频网| 国产蜜桃级精品一区二区三区| 色哟哟·www| 国模一区二区三区四区视频| 欧美中文日本在线观看视频| 午夜久久久久精精品| 大又大粗又爽又黄少妇毛片口| 亚洲成人av在线免费| 久久精品人妻少妇| 99久久中文字幕三级久久日本| 我要看日韩黄色一级片| 春色校园在线视频观看| 久久精品国产99精品国产亚洲性色| 精品久久久久久久久久免费视频| 91在线观看av| 日韩欧美 国产精品| 日韩制服骚丝袜av| 亚洲最大成人av| 精品欧美国产一区二区三| 精品人妻一区二区三区麻豆 | 青春草视频在线免费观看| 欧美日本视频| 亚洲经典国产精华液单| 欧美日本亚洲视频在线播放| 久久久成人免费电影| 日韩成人av中文字幕在线观看 | 亚洲中文字幕日韩| 少妇丰满av| 亚洲国产欧美人成| 99riav亚洲国产免费| 成人鲁丝片一二三区免费| 免费人成在线观看视频色| 熟女电影av网| 免费av毛片视频| 最近视频中文字幕2019在线8| 国产黄色小视频在线观看| 亚洲av五月六月丁香网| 日韩精品青青久久久久久| 国产成人91sexporn| 俄罗斯特黄特色一大片| 国产人妻一区二区三区在| 中文字幕免费在线视频6| 人妻丰满熟妇av一区二区三区| 精品不卡国产一区二区三区| 又粗又爽又猛毛片免费看| 亚洲一级一片aⅴ在线观看| 最近中文字幕高清免费大全6| 99在线视频只有这里精品首页| 午夜精品国产一区二区电影 | 夜夜爽天天搞| 色视频www国产| 国产精品野战在线观看| 精品一区二区三区视频在线观看免费| 国产精品一及| 在线免费十八禁| 熟妇人妻久久中文字幕3abv| av免费在线看不卡| 免费看av在线观看网站| 国产亚洲精品久久久久久毛片| 欧美一区二区国产精品久久精品| 校园春色视频在线观看| 国产三级中文精品| 春色校园在线视频观看| 亚洲国产精品合色在线| 国产一区二区激情短视频| 国产v大片淫在线免费观看| 国产亚洲精品久久久久久毛片| a级毛片免费高清观看在线播放| 中文字幕免费在线视频6| 麻豆久久精品国产亚洲av| 一级毛片久久久久久久久女| 天堂网av新在线| 国产男靠女视频免费网站| 亚洲五月天丁香| 国产伦精品一区二区三区四那| 搡老岳熟女国产| 亚洲va在线va天堂va国产| 人妻丰满熟妇av一区二区三区| 无遮挡黄片免费观看| 久久久久国内视频| 午夜免费男女啪啪视频观看 | 天堂网av新在线| 色在线成人网| 熟女人妻精品中文字幕| 亚洲中文字幕日韩| 亚洲aⅴ乱码一区二区在线播放| 成人美女网站在线观看视频| 婷婷色综合大香蕉| 国产淫片久久久久久久久| 精品少妇黑人巨大在线播放 | 亚洲美女视频黄频| 桃色一区二区三区在线观看| 三级国产精品欧美在线观看| 日日摸夜夜添夜夜爱| 欧美潮喷喷水| 国产精品一及| 国产91av在线免费观看| 久久人人精品亚洲av| 午夜福利在线观看吧| 国产伦精品一区二区三区四那| 日韩精品有码人妻一区| 麻豆av噜噜一区二区三区| 欧美日韩一区二区视频在线观看视频在线 | 午夜福利18| 亚洲精品国产av成人精品 | videossex国产| 看片在线看免费视频| 美女大奶头视频| 亚洲精品粉嫩美女一区| 人人妻人人澡欧美一区二区| 俄罗斯特黄特色一大片| 少妇熟女欧美另类| 真人做人爱边吃奶动态| 日韩欧美 国产精品| 免费观看人在逋| 国产91av在线免费观看| 中文亚洲av片在线观看爽| 国产一区二区在线av高清观看| 欧美色欧美亚洲另类二区| 大香蕉久久网| 97超视频在线观看视频| 三级毛片av免费| 久久久久免费精品人妻一区二区| 精品久久久久久久久亚洲| videossex国产| 波多野结衣巨乳人妻| 久久国产乱子免费精品| 一级毛片我不卡| 精品久久久久久久人妻蜜臀av| 亚洲精品日韩在线中文字幕 | 国产一区二区亚洲精品在线观看| 麻豆精品久久久久久蜜桃| 国产伦在线观看视频一区| 久久久午夜欧美精品| 欧美zozozo另类| 免费观看精品视频网站| 日韩一本色道免费dvd| 九色成人免费人妻av| 亚洲欧美日韩高清专用| 国产色婷婷99| 国产午夜福利久久久久久| 国产精品,欧美在线| 亚洲va在线va天堂va国产| 啦啦啦观看免费观看视频高清| 国内精品美女久久久久久| 五月玫瑰六月丁香| 禁无遮挡网站| 日本一本二区三区精品| 久久久久国产精品人妻aⅴ院| 久久99热这里只有精品18| 久久午夜福利片| 亚洲人成网站高清观看| 人妻夜夜爽99麻豆av| 天堂√8在线中文| 麻豆精品久久久久久蜜桃| 亚洲最大成人中文| 日韩欧美三级三区| 精品久久久久久久久久久久久| 国产真实伦视频高清在线观看| 国产片特级美女逼逼视频| 在线观看66精品国产| 国产黄色小视频在线观看| 亚洲av中文字字幕乱码综合| 国产黄a三级三级三级人| 色尼玛亚洲综合影院| 午夜影院日韩av| 午夜爱爱视频在线播放| 国产一级毛片七仙女欲春2| 色播亚洲综合网| av在线亚洲专区| 精品久久国产蜜桃| 内射极品少妇av片p| 国产蜜桃级精品一区二区三区| 性欧美人与动物交配| 久久久久久九九精品二区国产| 一级毛片我不卡| 大香蕉久久网| 岛国在线免费视频观看| 国产成人一区二区在线| 亚洲最大成人av| 联通29元200g的流量卡| 十八禁网站免费在线| 直男gayav资源| 国产精品无大码| 三级毛片av免费| 精品一区二区三区人妻视频| 日本一二三区视频观看| 全区人妻精品视频| 在线观看午夜福利视频| h日本视频在线播放| 欧美性感艳星| 日韩在线高清观看一区二区三区| 亚洲最大成人av| 国产精品电影一区二区三区| 日韩欧美精品v在线| 少妇裸体淫交视频免费看高清| 亚洲国产欧美人成| 国产视频内射| 一个人看的www免费观看视频| 亚洲av美国av| 久久久国产成人免费| 可以在线观看毛片的网站| 亚洲第一区二区三区不卡| 97超视频在线观看视频| 麻豆国产av国片精品| av天堂中文字幕网| 成人无遮挡网站| 免费无遮挡裸体视频| 精品免费久久久久久久清纯| 日日摸夜夜添夜夜添av毛片| 激情 狠狠 欧美| a级一级毛片免费在线观看| 十八禁网站免费在线| 久久人妻av系列| 男女做爰动态图高潮gif福利片| 国产精品久久久久久久久免| 欧美日本亚洲视频在线播放| 欧美3d第一页| 日韩欧美精品v在线| 久久久久性生活片| 欧美+亚洲+日韩+国产| 在线免费十八禁| 国内精品美女久久久久久| 美女cb高潮喷水在线观看| 在线a可以看的网站| av卡一久久| 亚洲色图av天堂| 女人十人毛片免费观看3o分钟| 欧美绝顶高潮抽搐喷水| av视频在线观看入口| 精品少妇黑人巨大在线播放 | 久久久午夜欧美精品| 三级毛片av免费| 欧美一区二区精品小视频在线| 国内精品宾馆在线| 99久久久亚洲精品蜜臀av| 精品欧美国产一区二区三| 欧美日韩一区二区视频在线观看视频在线 | 听说在线观看完整版免费高清| 午夜视频国产福利| 国产精品精品国产色婷婷| 亚洲成a人片在线一区二区| 国产日本99.免费观看| 精品日产1卡2卡| 国语自产精品视频在线第100页| 国产成人福利小说| 成年女人毛片免费观看观看9| 日本-黄色视频高清免费观看| 超碰av人人做人人爽久久| 中文字幕免费在线视频6| 麻豆久久精品国产亚洲av| 日日摸夜夜添夜夜爱| 看片在线看免费视频| 国产乱人视频| 午夜福利在线观看吧| 伦精品一区二区三区| 深夜精品福利| 男人狂女人下面高潮的视频| 亚洲电影在线观看av| 国产一区二区三区在线臀色熟女| 色av中文字幕| 国产视频一区二区在线看| or卡值多少钱| 亚洲图色成人| 男人舔奶头视频| 精品免费久久久久久久清纯| 国产 一区 欧美 日韩| 日日啪夜夜撸| 插阴视频在线观看视频| 欧美日韩国产亚洲二区| 国产蜜桃级精品一区二区三区| 三级毛片av免费| 看十八女毛片水多多多| 欧美性猛交黑人性爽| 亚洲人成网站在线播| 国产爱豆传媒在线观看| 亚洲欧美日韩卡通动漫| 少妇高潮的动态图| 欧美成人a在线观看| 三级男女做爰猛烈吃奶摸视频| 久久天躁狠狠躁夜夜2o2o| 亚洲av二区三区四区| 美女内射精品一级片tv| 欧美三级亚洲精品| 国产精品美女特级片免费视频播放器| 国产精品久久久久久亚洲av鲁大| 美女高潮的动态| 精华霜和精华液先用哪个| 亚洲人成网站在线播| 久久久成人免费电影| 亚洲天堂国产精品一区在线| 国产精品人妻久久久影院| 免费观看精品视频网站| 噜噜噜噜噜久久久久久91| 91狼人影院| 日日干狠狠操夜夜爽| 网址你懂的国产日韩在线| 亚洲精品久久国产高清桃花| 永久网站在线| 欧美xxxx性猛交bbbb| 日本五十路高清| 亚洲一区高清亚洲精品| 国产精品av视频在线免费观看| 中文在线观看免费www的网站| 深夜精品福利| 久久久欧美国产精品| 国产精品精品国产色婷婷| 搞女人的毛片| 亚洲五月天丁香| av.在线天堂| 成人av在线播放网站| 午夜福利在线在线| 欧美成人精品欧美一级黄| 久久亚洲精品不卡| 亚洲在线观看片| 国产精品日韩av在线免费观看| 中国美白少妇内射xxxbb| 日日干狠狠操夜夜爽| 欧美最新免费一区二区三区| 国产欧美日韩一区二区精品| 国产精品久久久久久亚洲av鲁大| 亚洲国产精品成人久久小说 | 日本黄大片高清| 欧美成人a在线观看| 精品少妇黑人巨大在线播放 | 欧美日韩乱码在线| 伦理电影大哥的女人| 一区二区三区免费毛片| 成人av一区二区三区在线看| 97超级碰碰碰精品色视频在线观看| 欧美日韩在线观看h| 免费黄网站久久成人精品| 久久久久久伊人网av| 大又大粗又爽又黄少妇毛片口| 淫秽高清视频在线观看| 国产毛片a区久久久久| 国产成人影院久久av| 国产精品综合久久久久久久免费| 99热这里只有是精品在线观看| 美女大奶头视频| 亚洲精品乱码久久久v下载方式| 久久久久久久久久黄片| 日韩欧美在线乱码| 免费搜索国产男女视频| 色哟哟哟哟哟哟| 国产高清有码在线观看视频| 一级黄色大片毛片| 别揉我奶头~嗯~啊~动态视频| 神马国产精品三级电影在线观看| 夜夜夜夜夜久久久久| 国产一区二区三区av在线 | 亚洲精品一卡2卡三卡4卡5卡| 久久九九热精品免费| 97碰自拍视频| 中文字幕免费在线视频6| 91麻豆精品激情在线观看国产| 美女被艹到高潮喷水动态| 超碰av人人做人人爽久久| 人人妻人人澡人人爽人人夜夜 | 女同久久另类99精品国产91| 国产真实乱freesex| 色在线成人网| 老师上课跳d突然被开到最大视频| 国产av不卡久久| 搡老熟女国产l中国老女人| 久久韩国三级中文字幕| 精品一区二区三区人妻视频| 啦啦啦啦在线视频资源| av免费在线看不卡| 18+在线观看网站| 俄罗斯特黄特色一大片| 搞女人的毛片| 欧美一区二区亚洲| 国产伦一二天堂av在线观看| 欧美日韩综合久久久久久| 欧美日韩在线观看h| 亚洲欧美精品综合久久99| av福利片在线观看| 在线观看午夜福利视频| 免费观看在线日韩| 99在线视频只有这里精品首页| 国产爱豆传媒在线观看| 亚洲欧美中文字幕日韩二区| 小说图片视频综合网站| 欧美xxxx黑人xx丫x性爽| 一个人看的www免费观看视频| 久久午夜福利片| 亚洲人成网站在线播放欧美日韩| 国内精品宾馆在线| 欧美不卡视频在线免费观看| 一个人免费在线观看电影| 18+在线观看网站| 露出奶头的视频| 91狼人影院| 国产成人福利小说| 可以在线观看毛片的网站| 国产一区二区在线av高清观看| 亚洲丝袜综合中文字幕| 精品午夜福利在线看| 最近最新中文字幕大全电影3| 国产精品一及| 国产 一区 欧美 日韩| 国产精品免费一区二区三区在线| 一本精品99久久精品77| 亚洲av免费在线观看| 丝袜喷水一区| 亚洲国产欧洲综合997久久,| 青春草视频在线免费观看| 国产精品三级大全| 少妇的逼水好多| 我要看日韩黄色一级片| 亚洲无线观看免费| 欧美日韩乱码在线| 伊人久久精品亚洲午夜| 女人十人毛片免费观看3o分钟| 看十八女毛片水多多多| 欧美xxxx黑人xx丫x性爽| 插逼视频在线观看| 99久久精品国产国产毛片| 色哟哟哟哟哟哟| 乱系列少妇在线播放| 波多野结衣高清无吗| 国产中年淑女户外野战色| 男人舔奶头视频| 校园春色视频在线观看| 成年女人永久免费观看视频| 黄色日韩在线| 久久久久性生活片| 我的女老师完整版在线观看| 亚洲性久久影院| 毛片女人毛片| 91av网一区二区| 啦啦啦观看免费观看视频高清| 亚洲七黄色美女视频| 1000部很黄的大片| 亚洲人成网站在线播| 久久久久久国产a免费观看| 三级经典国产精品| 一级黄片播放器| 日韩欧美一区二区三区在线观看| 国产亚洲精品综合一区在线观看| 中国美女看黄片| 2021天堂中文幕一二区在线观| 久久久a久久爽久久v久久| 综合色丁香网| 悠悠久久av| 亚洲久久久久久中文字幕| 在线免费观看的www视频| 99精品在免费线老司机午夜| 菩萨蛮人人尽说江南好唐韦庄 | 久久久久精品国产欧美久久久| 免费不卡的大黄色大毛片视频在线观看 | 亚洲成av人片在线播放无| 69人妻影院| 在线a可以看的网站| 麻豆成人午夜福利视频| 人人妻,人人澡人人爽秒播| 国产亚洲欧美98| 黄片wwwwww| 亚洲美女搞黄在线观看 | 久久久久精品国产欧美久久久| 免费不卡的大黄色大毛片视频在线观看 | 欧美一级a爱片免费观看看| 丰满乱子伦码专区| 亚洲成av人片在线播放无| 女人十人毛片免费观看3o分钟| 黄色日韩在线| 国产淫片久久久久久久久| 一本精品99久久精品77| 99久久精品热视频| 99热这里只有精品一区| 亚洲精品日韩av片在线观看| 精品午夜福利视频在线观看一区| 精品一区二区免费观看| 国产在线精品亚洲第一网站| 国国产精品蜜臀av免费| av专区在线播放| 嫩草影院精品99| 国产成人一区二区在线| 91久久精品国产一区二区成人| 夜夜看夜夜爽夜夜摸| 亚洲成人久久爱视频| 久久国产乱子免费精品| 精品久久久久久久久久久久久| 国产av不卡久久| 国产伦一二天堂av在线观看| 嫩草影院入口| 国产高潮美女av| 亚洲精品456在线播放app| 日韩欧美一区二区三区在线观看| 可以在线观看毛片的网站| 免费观看人在逋| 插逼视频在线观看| 美女 人体艺术 gogo| 一a级毛片在线观看| 男女那种视频在线观看| 久久久久久大精品| 两性午夜刺激爽爽歪歪视频在线观看| 在线观看午夜福利视频| 天天躁夜夜躁狠狠久久av| 特大巨黑吊av在线直播| 亚洲自偷自拍三级| 亚洲欧美成人精品一区二区| 毛片一级片免费看久久久久| 国产高清视频在线播放一区|