• <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)者能期待什么?
    入隊風波
    嫩草影院入口| 欧美潮喷喷水| 99视频精品全部免费 在线| 人人妻人人澡欧美一区二区| 国产精品女同一区二区软件| 99热这里只有是精品在线观看| 国产精品电影一区二区三区| 伦精品一区二区三区| 大型黄色视频在线免费观看| 欧美一区二区国产精品久久精品| 乱系列少妇在线播放| 最近最新中文字幕大全电影3| 伊人久久精品亚洲午夜| 日韩欧美精品v在线| 男女边吃奶边做爰视频| 最近手机中文字幕大全| 午夜精品一区二区三区免费看| 女同久久另类99精品国产91| 高清日韩中文字幕在线| 久久午夜福利片| 女的被弄到高潮叫床怎么办| 久久精品国产亚洲av涩爱 | 精品一区二区免费观看| 一区二区三区免费毛片| 久久精品国产鲁丝片午夜精品| 欧美激情久久久久久爽电影| 国产高清激情床上av| 乱人视频在线观看| 色视频www国产| 少妇的逼水好多| 12—13女人毛片做爰片一| 97超视频在线观看视频| 免费观看的影片在线观看| 亚洲第一电影网av| 国产熟女欧美一区二区| 久久中文看片网| 成人无遮挡网站| 色尼玛亚洲综合影院| 看十八女毛片水多多多| av免费在线看不卡| 好男人在线观看高清免费视频| 国产综合懂色| 小说图片视频综合网站| 国产精品人妻久久久影院| 18禁裸乳无遮挡免费网站照片| 直男gayav资源| 三级经典国产精品| 高清日韩中文字幕在线| 日本欧美国产在线视频| 一级毛片aaaaaa免费看小| 国产精品亚洲一级av第二区| av国产免费在线观看| 日韩强制内射视频| 秋霞在线观看毛片| 成人国产麻豆网| 哪里可以看免费的av片| 午夜福利视频1000在线观看| 最近最新中文字幕大全电影3| 国产伦在线观看视频一区| 精品人妻偷拍中文字幕| 久久中文看片网| 久久午夜福利片| 午夜福利成人在线免费观看| 国内精品一区二区在线观看| 精品国产三级普通话版| 女人十人毛片免费观看3o分钟| 欧美色欧美亚洲另类二区| 久久久精品大字幕| 亚洲色图av天堂| 成人三级黄色视频| 丝袜美腿在线中文| 国产91av在线免费观看| 欧美日韩一区二区视频在线观看视频在线 | 九九在线视频观看精品| 波多野结衣高清作品| 亚洲av免费高清在线观看| 亚洲av成人精品一区久久| 成人特级黄色片久久久久久久| 国产精品国产三级国产av玫瑰| 插阴视频在线观看视频| 国产伦精品一区二区三区四那| 嫩草影视91久久| 日韩强制内射视频| 免费黄网站久久成人精品| 国产高清不卡午夜福利| 波多野结衣高清作品| 乱系列少妇在线播放| 午夜免费男女啪啪视频观看 | 成熟少妇高潮喷水视频| 欧美日韩综合久久久久久| 99热网站在线观看| 成人无遮挡网站| 亚洲人成网站高清观看| 99国产极品粉嫩在线观看| 我要搜黄色片| 久久久久久久久久久丰满| 国产老妇女一区| 黑人高潮一二区| 国产片特级美女逼逼视频| 可以在线观看毛片的网站| 天天躁夜夜躁狠狠久久av| or卡值多少钱| 久久精品国产亚洲av天美| 欧美区成人在线视频| 国产精品国产三级国产av玫瑰| 精品欧美国产一区二区三| 日韩大尺度精品在线看网址| 国产一区二区三区av在线 | 欧美另类亚洲清纯唯美| 免费观看在线日韩| av在线天堂中文字幕| av在线老鸭窝| 我的老师免费观看完整版| 国产成人福利小说| 韩国av在线不卡| 国产成人一区二区在线| 精品久久久久久久久亚洲| 嫩草影院入口| 少妇的逼水好多| 久久人人精品亚洲av| 久久6这里有精品| 色尼玛亚洲综合影院| 永久网站在线| 狂野欧美激情性xxxx在线观看| 桃色一区二区三区在线观看| h日本视频在线播放| 国产精品一及| 1024手机看黄色片| 亚洲成av人片在线播放无| 2021天堂中文幕一二区在线观| 国产黄色小视频在线观看| 亚洲久久久久久中文字幕| 小说图片视频综合网站| 男女边吃奶边做爰视频| 精品午夜福利视频在线观看一区| 亚洲精品一卡2卡三卡4卡5卡| 国产精品一及| 欧美丝袜亚洲另类| 国产高清不卡午夜福利| 国产av不卡久久| 99热6这里只有精品| 国产精品亚洲美女久久久| 日韩中字成人| av女优亚洲男人天堂| 欧美日本视频| 久久中文看片网| 国产成人aa在线观看| 伦精品一区二区三区| 亚洲美女视频黄频| 久久久色成人| 中国美白少妇内射xxxbb| 欧美日韩精品成人综合77777| 97热精品久久久久久| 青春草视频在线免费观看| 国产av在哪里看| 亚洲欧美日韩卡通动漫| 国产欧美日韩精品一区二区| 久久婷婷人人爽人人干人人爱| 国产亚洲av嫩草精品影院| 国产激情偷乱视频一区二区| avwww免费| 99久久精品国产国产毛片| 日韩欧美在线乱码| 色综合亚洲欧美另类图片| 亚洲欧美日韩高清专用| 人妻制服诱惑在线中文字幕| 国产亚洲91精品色在线| 老司机福利观看| 欧美日韩一区二区视频在线观看视频在线 | 五月伊人婷婷丁香| 亚洲精品国产av成人精品 | 一区二区三区四区激情视频 | av在线蜜桃| 中文字幕熟女人妻在线| 午夜福利成人在线免费观看| 男女啪啪激烈高潮av片| 亚洲婷婷狠狠爱综合网| 欧美高清成人免费视频www| 看非洲黑人一级黄片| 毛片女人毛片| 天天一区二区日本电影三级| 麻豆国产97在线/欧美| 欧美丝袜亚洲另类| 国产精品一区二区性色av| 深爱激情五月婷婷| 久久久精品大字幕| 亚洲精品日韩av片在线观看| 亚洲成人久久爱视频| 亚洲国产精品sss在线观看| 99riav亚洲国产免费| 久久久久久久久中文| 久久精品夜夜夜夜夜久久蜜豆| 最近手机中文字幕大全| 人妻制服诱惑在线中文字幕| 国产av不卡久久| 又爽又黄无遮挡网站| 免费av不卡在线播放| 亚洲内射少妇av| 久久精品国产99精品国产亚洲性色| 黄色一级大片看看| 欧美性猛交黑人性爽| 九九爱精品视频在线观看| 成人毛片a级毛片在线播放| 在线观看美女被高潮喷水网站| 久久精品国产鲁丝片午夜精品| 久久精品人妻少妇| 亚洲av一区综合| 级片在线观看| 最好的美女福利视频网| 亚洲va在线va天堂va国产| 18+在线观看网站| 色综合亚洲欧美另类图片| 精品无人区乱码1区二区| av天堂中文字幕网| 少妇裸体淫交视频免费看高清| 国产大屁股一区二区在线视频| 男人舔奶头视频| 久久午夜福利片| 国产亚洲精品综合一区在线观看| 精品午夜福利在线看| 啦啦啦啦在线视频资源| 不卡一级毛片| 久久久久国内视频| 亚洲国产精品合色在线| 男女边吃奶边做爰视频| 亚洲人成网站高清观看| 久久这里只有精品中国| 美女高潮的动态| 日本-黄色视频高清免费观看| 日本免费a在线| 真实男女啪啪啪动态图| 3wmmmm亚洲av在线观看| 欧美色欧美亚洲另类二区| 全区人妻精品视频| 丝袜美腿在线中文| 国产精品99久久久久久久久| 天堂动漫精品| 欧美国产日韩亚洲一区| 亚洲国产精品sss在线观看| 最近在线观看免费完整版| 又黄又爽又免费观看的视频| 美女xxoo啪啪120秒动态图| 国产大屁股一区二区在线视频| 亚洲成人精品中文字幕电影| 国产美女午夜福利| 永久网站在线| 性色avwww在线观看| 国产成人一区二区在线| 综合色av麻豆| av在线老鸭窝| 色综合亚洲欧美另类图片| 国产亚洲欧美98| 三级国产精品欧美在线观看| 高清毛片免费观看视频网站| 亚洲色图av天堂| 激情 狠狠 欧美| 最近最新中文字幕大全电影3| 97人妻精品一区二区三区麻豆| 国产人妻一区二区三区在| 国语自产精品视频在线第100页| a级毛片免费高清观看在线播放| 精品久久久久久久久久久久久| 国产三级在线视频| 非洲黑人性xxxx精品又粗又长| 国产高清不卡午夜福利| 欧美在线一区亚洲| 成人永久免费在线观看视频| 久久久精品94久久精品| 联通29元200g的流量卡| 黑人高潮一二区| 成年av动漫网址| av中文乱码字幕在线| 在现免费观看毛片| 九九在线视频观看精品| 国产精品久久视频播放| 免费无遮挡裸体视频| 欧美性猛交╳xxx乱大交人| 日韩大尺度精品在线看网址| 黑人高潮一二区| 内地一区二区视频在线| 3wmmmm亚洲av在线观看| 亚洲精品456在线播放app| 22中文网久久字幕| 国产精品嫩草影院av在线观看| 伦理电影大哥的女人| 亚洲性夜色夜夜综合| 精品一区二区三区av网在线观看| 久久久久久久久大av| 欧美成人免费av一区二区三区| 久久热精品热| 午夜爱爱视频在线播放| 两个人的视频大全免费| 春色校园在线视频观看| 三级男女做爰猛烈吃奶摸视频| 99久久中文字幕三级久久日本| 国产片特级美女逼逼视频| 亚洲专区国产一区二区| 精品久久国产蜜桃| 亚洲久久久久久中文字幕| 无遮挡黄片免费观看| 国产人妻一区二区三区在| 亚洲国产高清在线一区二区三| 一个人观看的视频www高清免费观看| 在线播放无遮挡| 天堂√8在线中文| 直男gayav资源| 18禁黄网站禁片免费观看直播| 亚洲人与动物交配视频| 国产乱人视频| 久久久国产成人免费| 在线观看免费视频日本深夜| 久久午夜福利片| 国内精品一区二区在线观看| 岛国在线免费视频观看| 国产精品乱码一区二三区的特点| 日韩成人av中文字幕在线观看 | 一区二区三区四区激情视频 | 欧美日韩在线观看h| 少妇人妻精品综合一区二区 | 午夜福利18| 熟女人妻精品中文字幕| 日本免费一区二区三区高清不卡| 日韩亚洲欧美综合| 国产免费一级a男人的天堂| 亚洲精品国产av成人精品 | 可以在线观看的亚洲视频| av.在线天堂| 天天躁日日操中文字幕| 白带黄色成豆腐渣| 毛片一级片免费看久久久久| 国产成人freesex在线 | 国产极品精品免费视频能看的| 久久天躁狠狠躁夜夜2o2o| 99久久九九国产精品国产免费| 综合色丁香网| 欧美+日韩+精品| 亚洲精品国产成人久久av| 成人美女网站在线观看视频| 亚洲av成人av| 青春草视频在线免费观看| 国产成年人精品一区二区| 99久久成人亚洲精品观看| 男人舔女人下体高潮全视频| 国产精品久久电影中文字幕| 国产伦精品一区二区三区视频9| 中出人妻视频一区二区| 黄片wwwwww| 国产精品伦人一区二区| 美女免费视频网站| 国产精品久久电影中文字幕| 在线观看一区二区三区| 午夜福利成人在线免费观看| 亚洲美女视频黄频| 日韩欧美国产在线观看| 我的女老师完整版在线观看| 又黄又爽又刺激的免费视频.| 久久久成人免费电影| 99热这里只有精品一区| 国内揄拍国产精品人妻在线| 在线播放国产精品三级| 我的女老师完整版在线观看| 精品久久久久久久久久免费视频| 在线免费观看的www视频| 熟妇人妻久久中文字幕3abv| 18禁在线播放成人免费| 日本熟妇午夜| 夜夜爽天天搞| 精品不卡国产一区二区三区| 高清毛片免费观看视频网站| 精品一区二区三区人妻视频| 简卡轻食公司| 人人妻,人人澡人人爽秒播| 99热6这里只有精品| 国产精品久久久久久亚洲av鲁大| 日本黄色片子视频| 日韩中字成人| 国内久久婷婷六月综合欲色啪| 精品一区二区免费观看| 久久久a久久爽久久v久久| 在线免费观看的www视频| av在线老鸭窝| 有码 亚洲区| 看片在线看免费视频| 国产精品三级大全| 免费av观看视频| 最近视频中文字幕2019在线8| 久久久欧美国产精品| 久久久久久国产a免费观看| 99热这里只有是精品50| АⅤ资源中文在线天堂| 亚洲中文日韩欧美视频| 我要看日韩黄色一级片| 国产精品乱码一区二三区的特点| av卡一久久| 变态另类成人亚洲欧美熟女| 亚洲av免费高清在线观看| 人妻夜夜爽99麻豆av| 1024手机看黄色片| 日韩精品青青久久久久久| 简卡轻食公司| 自拍偷自拍亚洲精品老妇| 免费看av在线观看网站| 男女下面进入的视频免费午夜| 亚洲美女搞黄在线观看 | 可以在线观看毛片的网站| 国国产精品蜜臀av免费| 成人永久免费在线观看视频| 色播亚洲综合网| 三级经典国产精品| 国产亚洲av嫩草精品影院| 人妻夜夜爽99麻豆av| 亚洲成人久久爱视频| 99国产极品粉嫩在线观看| 麻豆av噜噜一区二区三区| 一级a爱片免费观看的视频| 色av中文字幕| 精品一区二区免费观看| 黄色欧美视频在线观看| 淫秽高清视频在线观看| 伊人久久精品亚洲午夜| 午夜福利在线观看吧| 国产熟女欧美一区二区| 乱系列少妇在线播放| 日日啪夜夜撸| 特大巨黑吊av在线直播| 久久久成人免费电影| 男女那种视频在线观看| 欧美性猛交黑人性爽| 亚洲性久久影院| 一夜夜www| 成年版毛片免费区| 免费观看的影片在线观看| 成人毛片a级毛片在线播放| 韩国av在线不卡| 97人妻精品一区二区三区麻豆| 成年av动漫网址| 国产私拍福利视频在线观看| 国产精品野战在线观看| 美女xxoo啪啪120秒动态图| 又黄又爽又免费观看的视频| 最近手机中文字幕大全| 又粗又爽又猛毛片免费看| 在线看三级毛片| 国产 一区精品| 别揉我奶头 嗯啊视频| 精品乱码久久久久久99久播| 国产在线男女| av视频在线观看入口| 成人亚洲欧美一区二区av| 国产亚洲精品久久久com| 日韩人妻高清精品专区| 干丝袜人妻中文字幕| 午夜a级毛片| 丝袜喷水一区| 露出奶头的视频| 伦精品一区二区三区| 夜夜爽天天搞| 亚洲成人久久性| 99热6这里只有精品| 欧美日韩在线观看h| 亚洲图色成人| 国产av不卡久久| 日韩成人伦理影院| 国产成人a∨麻豆精品| 熟女电影av网| 一级黄片播放器| 欧美极品一区二区三区四区| 看非洲黑人一级黄片| 日韩欧美国产在线观看| 丰满乱子伦码专区| 久久久久国产精品人妻aⅴ院| 一级毛片我不卡| 国内少妇人妻偷人精品xxx网站| 亚洲一区高清亚洲精品| 色综合亚洲欧美另类图片| 欧美最黄视频在线播放免费| 国产黄色小视频在线观看| 小说图片视频综合网站| 狂野欧美白嫩少妇大欣赏| 18禁黄网站禁片免费观看直播| 日韩欧美国产在线观看| 综合色av麻豆| 精品福利观看| 国产真实乱freesex| 国产午夜精品久久久久久一区二区三区 | 国产成人一区二区在线| 97热精品久久久久久| 久久久久久九九精品二区国产| 干丝袜人妻中文字幕| 亚洲综合色惰| 天堂av国产一区二区熟女人妻| 免费看美女性在线毛片视频| 人人妻人人澡人人爽人人夜夜 | 免费av不卡在线播放| 麻豆成人午夜福利视频| 97人妻精品一区二区三区麻豆| 中文字幕人妻熟人妻熟丝袜美| 欧美一区二区国产精品久久精品| 99久久九九国产精品国产免费| 日本欧美国产在线视频| 国产精品无大码| 乱码一卡2卡4卡精品| 久久久久久大精品| 亚洲精品一卡2卡三卡4卡5卡| 成人av在线播放网站| 深夜a级毛片| 丝袜喷水一区| 超碰av人人做人人爽久久| 99视频精品全部免费 在线| 热99re8久久精品国产| 3wmmmm亚洲av在线观看| 国产探花在线观看一区二区| 日本a在线网址| 久久精品91蜜桃| 桃色一区二区三区在线观看| 久久久久久伊人网av| 午夜免费男女啪啪视频观看 | 91久久精品电影网| 老司机午夜福利在线观看视频| 亚洲av免费在线观看| 日韩成人伦理影院| 俺也久久电影网| 亚洲真实伦在线观看| 别揉我奶头 嗯啊视频| 国产一区二区亚洲精品在线观看| 黄色一级大片看看| 精品人妻熟女av久视频| 日韩欧美精品v在线| 国产在线精品亚洲第一网站| 欧美日韩乱码在线| 国产午夜福利久久久久久| 干丝袜人妻中文字幕| 日韩三级伦理在线观看| 两性午夜刺激爽爽歪歪视频在线观看| 亚洲精品国产av成人精品 | 国产在视频线在精品| 亚洲最大成人av| 亚洲经典国产精华液单| 非洲黑人性xxxx精品又粗又长| 国产伦精品一区二区三区视频9| 麻豆一二三区av精品| av卡一久久| 国产三级中文精品| 99久久成人亚洲精品观看| 国产一区二区三区在线臀色熟女| 女同久久另类99精品国产91| 欧美色欧美亚洲另类二区| 国产精品,欧美在线| 成人永久免费在线观看视频| 午夜精品在线福利| 少妇被粗大猛烈的视频| 成人欧美大片| 美女内射精品一级片tv| 日本五十路高清| 亚洲天堂国产精品一区在线| 免费大片18禁| 麻豆久久精品国产亚洲av| 亚洲精品456在线播放app| 长腿黑丝高跟| 成年版毛片免费区| 精品无人区乱码1区二区| 91麻豆精品激情在线观看国产| 久久亚洲国产成人精品v| 99riav亚洲国产免费| 国产午夜精品久久久久久一区二区三区 | 欧美区成人在线视频| 桃色一区二区三区在线观看| 日本精品一区二区三区蜜桃| 又黄又爽又免费观看的视频| 51国产日韩欧美| 亚洲成人中文字幕在线播放| 欧洲精品卡2卡3卡4卡5卡区| 亚洲av免费在线观看| 看片在线看免费视频| 校园人妻丝袜中文字幕| 亚洲专区国产一区二区| 乱系列少妇在线播放| 久久99热这里只有精品18| 免费av观看视频| 国产精华一区二区三区| 少妇人妻一区二区三区视频| 国内精品久久久久精免费| 色哟哟·www| 小说图片视频综合网站| 成人二区视频| 亚洲熟妇熟女久久| .国产精品久久| 麻豆av噜噜一区二区三区| 国产欧美日韩精品亚洲av| 欧美不卡视频在线免费观看| 久久人人爽人人片av| 久久久久久久久久黄片| 久久鲁丝午夜福利片| 能在线免费观看的黄片| 久久久久久久久大av| 国产探花极品一区二区| 国产片特级美女逼逼视频| 日韩制服骚丝袜av| 欧美人与善性xxx| 精品人妻熟女av久视频| 国产私拍福利视频在线观看| 天天一区二区日本电影三级| 最近2019中文字幕mv第一页| 国产成人91sexporn| 亚洲无线观看免费| 国产淫片久久久久久久久| 国产伦精品一区二区三区视频9| 欧美日韩国产亚洲二区| 麻豆国产av国片精品| 日韩欧美一区二区三区在线观看| 欧美激情国产日韩精品一区| 熟女人妻精品中文字幕| 亚洲一级一片aⅴ在线观看| 色综合色国产| 国产视频内射|