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

看一遍就理解:零拷貝詳解

開發 前端
做服務端開發的小伙伴,文件下載功能應該實現過不少了吧。如果你實現的是一個web程序,前端請求過來,服務端的任務就是:將服務端主機磁盤中的文件從已連接的socket發出去。

1.什么是零拷貝

零拷貝字面上的意思包括兩個,“零”和“拷貝”:

  • “拷貝”:就是指數據從一個存儲區域轉移到另一個存儲區域。
  • “零” :表示次數為0,它表示拷貝數據的次數為0。

合起來,那零拷貝就是不需要將數據從一個存儲區域復制到另一個存儲區域咯。

零拷貝是指計算機執行IO操作時,CPU不需要將數據從一個存儲區域復制到另一個存儲區域,從而可以減少上下文切換以及CPU的拷貝時間。它是一種I/O操作優化技術。

2. 傳統 IO 的執行流程

做服務端開發的小伙伴,文件下載功能應該實現過不少了吧。如果你實現的是一個web程序,前端請求過來,服務端的任務就是:將服務端主機磁盤中的文件從已連接的socket發出去。關鍵實現代碼如下:

while((n = read(diskfd, buf, BUF_SIZE)) > 0)
    write(sockfd, buf , n);

傳統的IO流程,包括read和write的過程。

  • read:把數據從磁盤讀取到內核緩沖區,再拷貝到用戶緩沖區
  • write:先把數據寫入到socket緩沖區,最后寫入網卡設備。

流程圖如下:

圖片圖片

  • 用戶應用進程調用read函數,向操作系統發起IO調用,上下文從用戶態轉為內核態(切換1)
  • DMA控制器把數據從磁盤中,讀取到內核緩沖區。
  • CPU把內核緩沖區數據,拷貝到用戶應用緩沖區,上下文從內核態轉為用戶態(切換2),read函數返回
  • 用戶應用進程通過write函數,發起IO調用,上下文從用戶態轉為內核態(切換3)
  • CPU將用戶緩沖區中的數據,拷貝到socket緩沖區
  • DMA控制器把數據從socket緩沖區,拷貝到網卡設備,上下文從內核態切換回用戶態(切換4),write函數返回

從流程圖可以看出,傳統IO的讀寫流程,包括了4次上下文切換(4次用戶態和內核態的切換),4次數據拷貝(兩次CPU拷貝以及兩次的DMA拷貝),什么是DMA拷貝呢?我們一起來回顧下,零拷貝涉及的操作系統知識點哈。

3. 零拷貝相關的知識點回顧

3.1 內核空間和用戶空間

我們電腦上跑著的應用程序,其實是需要經過操作系統,才能做一些特殊操作,如磁盤文件讀寫、內存的讀寫等等。因為這些都是比較危險的操作,不可以由應用程序亂來,只能交給底層操作系統來。

因此,操作系統為每個進程都分配了內存空間,一部分是用戶空間,一部分是內核空間。內核空間是操作系統內核訪問的區域,是受保護的內存空間,而用戶空間是用戶應用程序訪問的內存區域。 以32位操作系統為例,它會為每一個進程都分配了4G(2的32次方)的內存空間。

  • 內核空間:主要提供進程調度、內存分配、連接硬件資源等功能
  • 用戶空間:提供給各個程序進程的空間,它不具有訪問內核空間資源的權限,如果應用程序需要使用到內核空間的資源,則需要通過系統調用來完成。進程從用戶空間切換到內核空間,完成相關操作后,再從內核空間切換回用戶空間。

3.2 什么是用戶態、內核態

  • 如果進程運行于內核空間,被稱為進程的內核態
  • 如果進程運行于用戶空間,被稱為進程的用戶態。

3.3 什么是上下文切換

  • 什么是CPU上下文?

CPU 寄存器,是CPU內置的容量小、但速度極快的內存。而程序計數器,則是用來存儲 CPU 正在執行的指令位置、或者即將執行的下一條指令位置。它們都是 CPU 在運行任何任務前,必須的依賴環境,因此叫做CPU上下文。

  • 什么是CPU上下文切換?

它是指,先把前一個任務的CPU上下文(也就是CPU寄存器和程序計數器)保存起來,然后加載新任務的上下文到這些寄存器和程序計數器,最后再跳轉到程序計數器所指的新位置,運行新任務。

一般我們說的上下文切換,就是指內核(操作系統的核心)在CPU上對進程或者線程進行切換。進程從用戶態到內核態的轉變,需要通過系統調用來完成。系統調用的過程,會發生CPU上下文的切換。

CPU 寄存器里原來用戶態的指令位置,需要先保存起來。接著,為了執行內核態代碼,CPU 寄存器需要更新為內核態指令的新位置。最后才是跳轉到內核態運行內核任務。

圖片圖片

3.4 虛擬內存

現代操作系統使用虛擬內存,即虛擬地址取代物理地址,使用虛擬內存可以有2個好處:

  • 虛擬內存空間可以遠遠大于物理內存空間
  • 多個虛擬內存可以指向同一個物理地址

正是多個虛擬內存可以指向同一個物理地址,可以把內核空間和用戶空間的虛擬地址映射到同一個物理地址,這樣的話,就可以減少IO的數據拷貝次數啦,示意圖如下

圖片圖片

3.5 DMA技術

DMA,英文全稱是Direct Memory Access,即直接內存訪問。DMA本質上是一塊主板上獨立的芯片,允許外設設備和內存存儲器之間直接進行IO數據傳輸,其過程不需要CPU的參與。

我們一起來看下IO流程,DMA幫忙做了什么事情.

圖片圖片

  • 用戶應用進程調用read函數,向操作系統發起IO調用,進入阻塞狀態,等待數據返回。
  • CPU收到指令后,對DMA控制器發起指令調度。
  • DMA收到IO請求后,將請求發送給磁盤;
  • 磁盤將數據放入磁盤控制緩沖區,并通知DMA
  • DMA將數據從磁盤控制器緩沖區拷貝到內核緩沖區。
  • DMA向CPU發出數據讀完的信號,把工作交換給CPU,由CPU負責將數據從內核緩沖區拷貝到用戶緩沖區。
  • 用戶應用進程由內核態切換回用戶態,解除阻塞狀態

可以發現,DMA做的事情很清晰啦,它主要就是幫忙CPU轉發一下IO請求,以及拷貝數據。為什么需要它的?

主要就是效率,它幫忙CPU做事情,這時候,CPU就可以閑下來去做別的事情,提高了CPU的利用效率。大白話解釋就是,CPU老哥太忙太累啦,所以他找了個小弟(名叫DMA) ,替他完成一部分的拷貝工作,這樣CPU老哥就能著手去做其他事情。

4. 零拷貝實現的幾種方式

零拷貝并不是沒有拷貝數據,而是減少用戶態/內核態的切換次數以及CPU拷貝的次數。零拷貝實現有多種方式,分別是

  • mmap+write
  • sendfile
  • 帶有DMA收集拷貝功能的sendfile

4.1 mmap+write實現的零拷貝

mmap 的函數原型如下:

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
  • addr:指定映射的虛擬內存地址
  • length:映射的長度
  • prot:映射內存的保護模式
  • flags:指定映射的類型
  • fd:進行映射的文件句柄
  • offset:文件偏移量

前面一小節,零拷貝相關的知識點回顧,我們介紹了虛擬內存,可以把內核空間和用戶空間的虛擬地址映射到同一個物理地址,從而減少數據拷貝次數!mmap就是用了虛擬內存這個特點,它將內核中的讀緩沖區與用戶空間的緩沖區進行映射,所有的IO都在內核中完成。

mmap+write實現的零拷貝流程如下:

圖片圖片

  • 用戶進程通過mmap方法向操作系統內核發起IO調用,上下文從用戶態切換為內核態。
  • CPU利用DMA控制器,把數據從硬盤中拷貝到內核緩沖區。
  • 上下文從內核態切換回用戶態,mmap方法返回。
  • 用戶進程通過write方法向操作系統內核發起IO調用,上下文從用戶態切換為內核態。
  • CPU將內核緩沖區的數據拷貝到的socket緩沖區。
  • CPU利用DMA控制器,把數據從socket緩沖區拷貝到網卡,上下文從內核態切換回用戶態,write調用返回。

可以發現,mmap+write實現的零拷貝,I/O發生了4次用戶空間與內核空間的上下文切換,以及3次數據拷貝。其中3次數據拷貝中,包括了2次DMA拷貝和1次CPU拷貝。

mmap是將讀緩沖區的地址和用戶緩沖區的地址進行映射,內核緩沖區和應用緩沖區共享,所以節省了一次CPU拷貝‘’并且用戶進程內存是虛擬的,只是映射到內核的讀緩沖區,可以節省一半的內存空間。

4.2 sendfile實現的零拷貝

sendfile是Linux2.1內核版本后引入的一個系統調用函數,API如下:

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
  • out_fd:為待寫入內容的文件描述符,一個socket描述符。,
  • in_fd:為待讀出內容的文件描述符,必須是真實的文件,不能是socket和管道。
  • offset:指定從讀入文件的哪個位置開始讀,如果為NULL,表示文件的默認起始位置。
  • count:指定在fdout和fdin之間傳輸的字節數。

sendfile表示在兩個文件描述符之間傳輸數據,它是在操作系統內核中操作的,避免了數據從內核緩沖區和用戶緩沖區之間的拷貝操作,因此可以使用它來實現零拷貝。

sendfile實現的零拷貝流程如下:

圖片圖片

sendfile實現的零拷貝

  1. 用戶進程發起sendfile系統調用,上下文(切換1)從用戶態轉向內核態
  2. DMA控制器,把數據從硬盤中拷貝到內核緩沖區。
  3. CPU將讀緩沖區中數據拷貝到socket緩沖區
  4. DMA控制器,異步把數據從socket緩沖區拷貝到網卡,
  5. 上下文(切換2)從內核態切換回用戶態,sendfile調用返回。

可以發現,sendfile實現的零拷貝,I/O發生了2次用戶空間與內核空間的上下文切換,以及3次數據拷貝。其中3次數據拷貝中,包括了2次DMA拷貝和1次CPU拷貝。那能不能把CPU拷貝的次數減少到0次呢?有的,即帶有DMA收集拷貝功能的sendfile!

4.3 sendfile+DMA scatter/gather實現的零拷貝

linux 2.4版本之后,對sendfile做了優化升級,引入SG-DMA技術,其實就是對DMA拷貝加入了scatter/gather操作,它可以直接從內核空間緩沖區中將數據讀取到網卡。使用這個特點搞零拷貝,即還可以多省去一次CPU拷貝。

sendfile+DMA scatter/gather實現的零拷貝流程如下:

圖片圖片

  1. 用戶進程發起sendfile系統調用,上下文(切換1)從用戶態轉向內核態
  2. DMA控制器,把數據從硬盤中拷貝到內核緩沖區。
  3. CPU把內核緩沖區中的文件描述符信息(包括內核緩沖區的內存地址和偏移量)發送到socket緩沖區
  4. DMA控制器根據文件描述符信息,直接把數據從內核緩沖區拷貝到網卡
  5. 上下文(切換2)從內核態切換回用戶態,sendfile調用返回。

可以發現,sendfile+DMA scatter/gather實現的零拷貝,I/O發生了2次用戶空間與內核空間的上下文切換,以及2次數據拷貝。其中2次數據拷貝都是包DMA拷貝。這就是真正的 零拷貝(Zero-copy) 技術,全程都沒有通過CPU來搬運數據,所有的數據都是通過DMA來進行傳輸的。

5. Java提供的零拷貝方式

  • Java NIO對mmap的支持
  • Java NIO對sendfile的支持

5.1 Java NIO對mmap的支持

Java NIO有一個MappedByteBuffer的類,可以用來實現內存映射。它的底層是調用了Linux內核的mmap的API。

mmap的小demo如下:

public class MmapTest {

    public static void main(String[] args) {
        try {
            FileChannel readChannel = FileChannel.open(Paths.get("./jay.txt"), StandardOpenOption.READ);
            MappedByteBuffer data = readChannel.map(FileChannel.MapMode.READ_ONLY, 0, 1024 * 1024 * 40);
            FileChannel writeChannel = FileChannel.open(Paths.get("./siting.txt"), StandardOpenOption.WRITE, StandardOpenOption.CREATE);
            //數據傳輸
            writeChannel.write(data);
            readChannel.close();
            writeChannel.close();
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
}

5.2 Java NIO對sendfile的支持

FileChannel的transferTo()/transferFrom(),底層就是sendfile() 系統調用函數。Kafka 這個開源項目就用到它,平時面試的時候,回答面試官為什么這么快,就可以提到零拷貝sendfile這個點。

@Override
public long transferFrom(FileChannel fileChannel, long position, long count) throws IOException {
   return fileChannel.transferTo(position, count, socketChannel);
}

sendfile的小demo如下:

public class SendFileTest {
    public static void main(String[] args) {
        try {
            FileChannel readChannel = FileChannel.open(Paths.get("./jay.txt"), StandardOpenOption.READ);
            long len = readChannel.size();
            long position = readChannel.position();
            
            FileChannel writeChannel = FileChannel.open(Paths.get("./siting.txt"), StandardOpenOption.WRITE, StandardOpenOption.CREATE);
            //數據傳輸
            readChannel.transferTo(position, len, writeChannel);
            readChannel.close();
            writeChannel.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

參考

[1]框架篇:小白也能秒懂的Linux零拷貝原理: https://juejin.cn/post/6887469050515947528

[2]深入剖析Linux IO原理和幾種零拷貝機制的實現: https://juejin.cn/post/6844903949359644680#heading-11

責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2022-01-17 20:59:37

開發group by思路

2021-06-15 07:15:15

Oracle底層explain

2021-08-12 10:36:18

order byMySQL數據庫

2025-02-13 09:06:27

2021-12-01 07:26:13

IO模型異步

2024-03-26 07:59:32

IO模型多路復用

2021-10-07 20:12:03

MVCC事務原理

2020-02-09 17:30:54

反轉鏈表程序員節點

2019-03-19 14:11:44

VLANLANMAC

2022-05-08 23:05:38

Route-Poli路由策略

2023-09-12 07:31:45

HashMap線程

2022-08-26 10:41:03

指針C語言

2015-10-10 11:10:24

重敲代碼拷貝粘貼

2019-09-19 08:04:40

網絡七層模型TCPUDP

2021-10-08 07:53:01

事務隔離級別

2023-08-14 07:49:42

AI訓練

2023-01-10 19:47:47

Redis原理多線程

2017-12-26 14:17:24

潤乾報表

2021-11-25 08:16:46

Wi-FiWi-Fi 6路由Wi-Fi 5

2021-03-11 07:14:01

Epoll原理線程
點贊
收藏

51CTO技術棧公眾號

亚州精品天堂中文字幕| 日韩欧美一区在线观看| 亚洲一二三区在线| www.com欧美| 亚洲一区欧美二区| 在线视频日韩精品| 中国特级黄色片| 91精品论坛| 亚洲欧美综合另类在线卡通| 国产美女在线精品免费观看| 精人妻无码一区二区三区| 一本到12不卡视频在线dvd| 日韩精品在线看| 国内自拍第二页| jk漫画禁漫成人入口| 亚洲人成7777| 欧美日韩在线一区二区三区| 精品人妻一区二区三区含羞草| 亚洲一区日本| 欧美精品在线播放| 国产又粗又猛又色| 亚洲免费一区| 欧美中文字幕一区二区三区| 国产玉足脚交久久欧美| 午夜激情在线观看| 99在线精品观看| 91影视免费在线观看| 五月婷婷六月婷婷| 国产精品主播| 久久久噜噜噜久噜久久| 欧洲第一无人区观看| 精品视频免费在线观看| 日韩精品免费在线观看| 色综合久久久无码中文字幕波多| 欧美大片网站| 欧洲av在线精品| 免费无遮挡无码永久视频| 四虎影视成人| 亚洲精品乱码久久久久久| 日韩资源av在线| 青青视频在线观| 99久久精品情趣| 国产精品有限公司| 亚洲av无码乱码国产精品| 精品写真视频在线观看| 国产精品美女av| 老熟妇一区二区三区啪啪| 欧美亚洲自偷自偷| 日韩av手机在线观看| 超碰中文字幕在线| 国产一区成人| 欧美中文字幕精品| 中文字幕视频网站| 噜噜噜91成人网| 日韩av不卡电影| 免费观看日批视频| 肉色丝袜一区二区| 国产精品欧美激情| 亚洲图片视频小说| 麻豆91精品视频| 国产一区二中文字幕在线看| 在线观看免费中文字幕| 国产一区欧美二区| 亚洲一区亚洲二区| 亚洲国产成人精品一区二区三区| 国产成人精品三级| 国产一区二区免费电影| 成人午夜免费福利| 91在线观看一区二区| 九9re精品视频在线观看re6| 亚洲欧美日韩动漫| 久久精品在线观看| 一区国产精品| 综合图区亚洲| 欧美日韩国产综合新一区| 欧美日韩成人免费视频| 欧美xoxoxo| 欧美日韩精品久久久| 特级黄色片视频| 黄色免费大全亚洲| 在线视频日本亚洲性| 无码黑人精品一区二区| 一区在线免费| 国产91在线播放九色快色| 中国老头性行为xxxx| 精品一区二区三区av| 97se亚洲综合在线| 日本一本草久在线中文| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 第一页在线视频| 亚洲成人一品| 日韩视频―中文字幕| 久久久一二三区| 视频在线观看一区| 91久久久久久| 天堂av中文在线资源库| 国产精品久久久久久福利一牛影视 | 99久久婷婷这里只有精品| 欧美国产第一页| 午夜精品免费观看| 国产成人综合自拍| 日韩成人在线资源| 91桃色在线观看| 欧美精品日韩综合在线| 少妇精品一区二区| 欧美1区2区3区| 国产精品第一区| 三级在线观看网站| 中文字幕亚洲影视| 可以免费在线观看的av| 最新一区二区三区| 首页亚洲中字| 成人444kkkk在线观看| 99精品视频99| 国产一区二区精品久久91| 国产一区二区在线观看免费播放| 成人精品一区二区三区校园激情| 亚洲愉拍自拍另类高清精品| 男女污污的视频| 韩国精品福利一区二区三区| 久久夜色精品国产| 国产精品欧美综合| av在线播放成人| 青青草视频国产| 欧美三级电影网址| 亚洲欧美国产一本综合首页| 国产亚洲第一页| 久久se精品一区二区| 你懂的网址一区二区三区| 日本动漫理论片在线观看网站| 欧美调教femdomvk| 波多野结衣福利| 亚洲福利电影| 成人久久18免费网站漫画| 在线观看二区| 在线免费不卡电影| 熟女俱乐部一区二区| 亚洲激情不卡| 岛国视频一区| 丝袜在线观看| 日韩一区二区三区观看| 免费国产羞羞网站美图| 久久激情五月婷婷| 亚洲看片网站| 福利视频一区| 日韩亚洲精品视频| 91国偷自产中文字幕久久| 中文字幕av在线一区二区三区| 久久久久久久中文| 欧美亚洲大陆| 2019日本中文字幕| 免费人成在线观看网站| 欧美特黄级在线| 少妇真人直播免费视频| 蜜桃伊人久久| 日韩精品资源| 成人黄色在线| 久久激情视频免费观看| 国产日韩在线观看一区| 亚洲女性喷水在线观看一区| av噜噜在线观看| 国产一区观看| 精品视频在线观看| 成人日韩精品| 色小说视频一区| 99视频免费看| 亚洲成人在线免费| 国产又爽又黄无码无遮挡在线观看| 国产日韩欧美一区在线| 日韩一区二区三区高清| 欧美极品在线| 欧美激情奇米色| 亚洲欧洲综合在线| 欧美三级视频在线播放| 国产喷水在线观看| 高清shemale亚洲人妖| 亚洲熟妇国产熟妇肥婆| 欧美美乳视频| 国产一区欧美二区三区| 污污片在线免费视频| 亚洲国产精品免费| 中文字幕第31页| 亚洲精品成人悠悠色影视| 国产精品伦子伦| 免费在线观看日韩欧美| 成年在线观看视频| 一本久久青青| 成人激情综合网| av免费不卡| 中文字幕日韩精品在线观看| 国产女无套免费视频| 香蕉成人伊视频在线观看| 久久久久久久毛片| 国产成人精品一区二| 熟女少妇精品一区二区| 亚洲精品a级片| 久久资源亚洲| 国产免费区一区二区三视频免费| 国语自产偷拍精品视频偷| 国产日产精品久久久久久婷婷| 欧美一三区三区四区免费在线看 | 久久久久亚洲AV成人无码国产| 久久精品三级| 欧美在线观看黄| 欧美精品一区二区三区中文字幕| 成人亚洲综合色就1024| 欧美xx视频| 久久久中文字幕| 91最新在线| 精品视频久久久| 国产黄色小视频在线观看| 欧美综合欧美视频| www成人在线| 一区二区三区在线视频观看| 91视频免费在观看| 久久综合九色综合97_久久久 | 久久久精品免费观看| 天天爽夜夜爽视频| 麻豆专区一区二区三区四区五区| 国产深夜男女无套内射| 欧美久久一区| 性欧美18一19内谢| 日韩欧美视频在线播放| 欧美激情www| 精品福利网址导航| 国产成人精品自拍| 欧美h版在线观看| 国产日韩欧美综合| 欧美日一区二区三区| 日本精品久久久| 国产在线88av| 午夜免费在线观看精品视频| 亚洲色图美国十次| 欧美成人亚洲成人| 国产黄a三级三级三级av在线看| 在线观看欧美日韩国产| www.在线播放| 正在播放国产一区| 成人亚洲综合天堂| 中文精品99久久国产香蕉| 韩日在线视频| 在线精品视频视频中文字幕| 国产在线网站| 伊人伊人伊人久久| av网站在线播放| 中文字幕日韩欧美在线| av电影在线网| xxxxx成人.com| 岛国成人毛片| 欧美精品一区二区免费| 调教一区二区| 国内精品久久久| 天堂8中文在线最新版在线| 18性欧美xxxⅹ性满足| 美女的胸无遮挡在线观看 | 小明成人免费视频一区| 国产精品色视频| 亚洲综合资源| 国产成人女人毛片视频在线| 成人在线超碰| 欧美一区二区三区四区在线观看地址| 九九精品久久| 亚洲欧洲精品在线| 911久久香蕉国产线看观看| 国产免费内射又粗又爽密桃视频| 一区二区自拍| 黑森林福利视频导航| 免费日本视频一区| 青青草精品在线| 成人aaaa免费全部观看| 美女100%无挡| 国产精品成人在线观看| 破处女黄色一级片| 精品久久久久久久中文字幕| 欧美亚洲精品天堂| 欧美日韩视频一区二区| 亚洲AV无码精品国产| 亚洲美女视频网| 免费**毛片在线| 国语自产精品视频在线看抢先版图片 | 欧美激情一区二区三区四区| 我要看黄色一级片| 亚洲成av人片观看| 中文天堂在线资源| 日韩免费观看高清完整版| 色综合久久网女同蕾丝边| 日韩中文av在线| heyzo在线播放| 国产精品久久二区| 91大神精品| 亚洲精品日韩成人| 在线看片日韩| 国产又黄又猛的视频| 暴力调教一区二区三区| 老司机福利在线观看| 亚洲国产aⅴ天堂久久| 波多野结衣视频网址| 精品国产区一区| 最新国产在线观看| 91国产精品电影| 国产精品免费精品自在线观看| 久久99精品久久久久久水蜜桃| 天天做天天爱综合| 欧美三级午夜理伦三级| 粉嫩av一区二区三区在线播放 | 亚洲va中文字幕| 6—12呦国产精品| 亚洲毛片在线免费观看| 日本天码aⅴ片在线电影网站| 国产精品2018| 久久a爱视频| 成人午夜视频免费观看| 免费成人性网站| 麻豆av免费观看| 亚洲成人在线网站| 精品国自产在线观看| 中文字幕亚洲欧美一区二区三区| 筱崎爱全乳无删减在线观看| 成人做爰66片免费看网站| 国产精品福利在线观看播放| 日韩精品一区中文字幕| www.久久精品| 久草视频中文在线| 7777女厕盗摄久久久| 国产女人在线视频| 欧美在线一区二区视频| 精品国产导航| 激情小视频网站| 国产成人免费视频| 五月婷婷一区二区| 884aa四虎影成人精品一区| 中国日本在线视频中文字幕| 国产91在线视频| 红桃视频在线观看一区二区| www国产精品内射老熟女| 99这里只有久久精品视频| 久久免费在线观看视频| 日韩免费看网站| 免费污视频在线观看| 91黄在线观看| 欧美在线免费| 国产精品久久久久野外| 亚洲男人的天堂网| 国产高清视频免费| 九九九热精品免费视频观看网站| 国产精品美女久久久久| 色一情一乱一乱一区91| 国产在线一区观看| 少妇aaaaa| 欧美成人一区二区三区| 国产美女一区视频| 极品尤物一区二区三区| 日韩一级精品| 97超碰在线资源| 欧美视频自拍偷拍| 欧美猛烈性xbxbxbxb| 亚洲一区制服诱惑| 国内在线观看一区二区三区| 亚洲欧美日韩色| 黑人精品xxx一区| 免费在线观看污视频| 国产精品久久91| 天天超碰亚洲| 97中文字幕在线观看| 偷窥少妇高潮呻吟av久久免费| 性xxxxbbbb| 国产精品xxx视频| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 成人全视频高清免费观看| 国产精品久久久久aaaa九色| 999国产精品视频| 日本女人性视频| 欧美日韩国产在线| bbbbbbbbbbb在线视频| 亚洲aaa激情| 9久re热视频在线精品| 国产精品免费无码| 欧美一区二区在线不卡| 俺来俺也去www色在线观看| 欧美一区亚洲二区| 久久激情五月婷婷| 日韩三级视频在线| 这里精品视频免费| 国产乱人伦丫前精品视频| 欧美性猛交xxx乱久交| 亚洲情趣在线观看| 日本韩国一区| 91在线短视频| 日韩精品视频网| 久久久久97国产| 一区二区三区日韩在线| 538任你躁精品视频网免费| 亚洲中文字幕无码不卡电影| 亚洲视频在线观看一区| 欧美成人片在线| 成人自拍爱视频| 韩国成人福利片在线播放| 午夜精品免费观看| 性欧美亚洲xxxx乳在线观看| 99精品综合|