久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

深入理解Linux异步I/O框架 io_uring

發(fā)布時間:2024/4/11 linux 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解Linux异步I/O框架 io_uring 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


來源:云原生實(shí)驗(yàn)室

hi,大家好,今天分享一篇Linux異步IO編程框架文章,對比IO復(fù)用的epoll框架,到底性能提高多少?讓我們看一看。

譯者序

?本文組合翻譯了以下兩篇文章的干貨部分,作為?io_uring?相關(guān)的入門參考:

  • How io_uring and eBPF Will Revolutionize Programming in Linux[1], ScyllaDB, 2020

  • An Introduction to the io_uring Asynchronous I/O Framework[2], Oracle, 2020

io_uring 是 2019 年 ?Linux 5.1 內(nèi)核首次引入的高性能異步 I/O 框架,能顯著加速 I/O 密集型應(yīng)用的性能。但如果你的應(yīng)用 已經(jīng)在使用 傳統(tǒng) Linux AIO 了, 并且使用方式恰當(dāng), 那 io_uring ?并不會帶來太大的性能提升 —— 根據(jù)原文測試(以及我們 自己的復(fù)現(xiàn)),即便打開高級特性,也只有 5%。除非你真的需要這 5% 的額外性能,否則切換成 io_uring ?代價可能也挺大,因?yàn)橐貙憫?yīng)用來適配 io_uring(或者讓依賴的平臺或框架去適配,總之需要改代碼)。

既然性能跟傳統(tǒng) AIO 差不多,那為什么還稱 io_uring 為革命性技術(shù)呢?

  • 它首先和最大的貢獻(xiàn)在于:統(tǒng)一了 Linux 異步 I/O 框架

    • Linux AIO ?只支持 direct I/O 模式的 存儲文件(storage file),而且主要用在 數(shù)據(jù)庫這一細(xì)分領(lǐng)域

    • io_uring 支持存儲文件和網(wǎng)絡(luò)文件(network sockets),也支持更多的異步系統(tǒng)調(diào)用 (accept/openat/stat/...),而非僅限于 read/write 系統(tǒng)調(diào)用。

    設(shè)計(jì)上是真正的異步 I/O,作為對比,Linux AIO 雖然也 是異步的,但仍然可能會阻塞,某些情況下的行為也無法預(yù)測;

    似乎之前 Windows 在這塊反而是領(lǐng)先的,更多參考:

    • 淺析開源項(xiàng)目之 io_uring[3],“分布式存儲”專欄,知乎

    • Is there really no asynchronous block I/O on Linux?[4],stackoverflow

    靈活性和可擴(kuò)展性非常好,甚至能基于 io_uring 重寫所有系統(tǒng)調(diào)用,而 Linux AIO 設(shè)計(jì)時就沒考慮擴(kuò)展性。

    eBPF 也算是異步框架(事件驅(qū)動),但與 io_uring 沒有本質(zhì)聯(lián)系,二者屬于不同子系統(tǒng), 并且在模型上有一個本質(zhì)區(qū)別:

  • eBPF 對用戶是透明的,只需升級內(nèi)核(到合適的版本), 應(yīng)用程序無需任何改造

  • io_uring 提供了 新的系統(tǒng)調(diào)用和用戶空間 API,因此 需要應(yīng)用程序做改造

  • eBPF 作為動態(tài)跟蹤工具,能夠更方便地排查和觀測 io_uring 等模塊在執(zhí)行層面的具體問題。

    本文介紹 Linux 異步 I/O 的發(fā)展歷史,io_uring 的原理和功能, 并給出了一些程序示例和性能壓測結(jié)果(我們在 5.10 內(nèi)核做了類似測試,結(jié)論與原文差不多)。

    由于譯者水平有限,本文不免存在遺漏或錯誤之處。如有疑問,請查閱原文。

    以下是譯文。


    很多人可能還沒意識到,Linux 內(nèi)核在過去幾年已經(jīng)發(fā)生了一場革命。這場革命源于兩個激動人心的新接口的引入:eBPF 和 io_uring。我們認(rèn)為,二者將會完全 改變應(yīng)用與內(nèi)核交互的方式,以及應(yīng)用開發(fā)者思考和看待內(nèi)核的方式

    本文介紹 io_uring(我們在 ScyllaDB 中有 io_uring 的深入使用經(jīng)驗(yàn)),并略微提及一下 eBPF。

    1 Linux I/O 系統(tǒng)調(diào)用演進(jìn)

    1.1 基于 fd 的阻塞式 I/O:read()/write()

    作為大家最熟悉的讀寫方式,Linux 內(nèi)核提供了 基于文件描述符的系統(tǒng)調(diào)用, 這些描述符指向的可能是 存儲文件(storage file),也可能是 ?network sockets

    ssize_t?read(int?fd,?void?*buf,?size_t?count); ssize_t?write(int?fd,?const?void?*buf,?size_t?count);

    二者稱為 阻塞式系統(tǒng)調(diào)用(blocking system calls),因?yàn)槌绦蛘{(diào)用 這些函數(shù)時會進(jìn)入 sleep 狀態(tài),然后被調(diào)度出去(讓出處理器),直到 I/O 操作完成:

    • 如果數(shù)據(jù)在文件中,并且文件內(nèi)容 已經(jīng)緩存在 page cache 中,調(diào)用會 立即返回

    • 如果數(shù)據(jù)在另一臺機(jī)器上,就需要通過網(wǎng)絡(luò)(例如 TCP)獲取,會阻塞一段時間;

    • 如果數(shù)據(jù)在硬盤上,也會阻塞一段時間。

    但很容易想到,隨著存儲 設(shè)備越來越快,程序越來越復(fù)雜, 阻塞式(blocking)已經(jīng)這種最簡單的方式已經(jīng)不適用了。

    1.2 非阻塞式 I/O:select()/poll()/epoll()

    阻塞式之后,出現(xiàn)了一些新的、非阻塞的系統(tǒng)調(diào)用,例如 select()、poll() 以及更新的 epoll()。應(yīng)用程序在調(diào)用這些函數(shù)讀寫時不會阻塞,而是 立即返回,返回的是一個已經(jīng) ready 的文件描述符列表

    但這種方式存在一個致命缺點(diǎn):只支持 network sockets 和 pipes ——epoll() 甚至連 storage files 都不支持。

    1.3 線程池方式

    對于 storage I/O,經(jīng)典的解決思路是 thread pool[5]:主線程將 I/O 分發(fā)給 worker 線程,后者代替主線程進(jìn)行阻塞式讀寫,主線程不會阻塞。

    這種方式的問題是 線程上下文切換開銷可能非常大,后面性能壓測會看到。

    1.4 Direct I/O(數(shù)據(jù)庫軟件):繞過 page cache

    隨后出現(xiàn)了更加靈活和強(qiáng)大的方式:數(shù)據(jù)庫軟件(database software) 有時 并不想使用操作系統(tǒng)的 page cache[6], 而是希望打開一個文件后, 直接從設(shè)備讀寫這個文件(direct access to the device)。這種方式稱為 直接訪問(direct access)或 直接 I/O(direct I/O),

    • 需要指定 ?O_DIRECT flag;

    • 需要 應(yīng)用自己管理自己的緩存 —— 這正是數(shù)據(jù)庫軟件所希望的;

    • 是 ?zero-copy I/O,因?yàn)閼?yīng)用的緩沖數(shù)據(jù)直接發(fā)送到設(shè)備,或者直接從設(shè)備讀取。

    1.5 異步 IO(AIO)

    前面提到,隨著存儲設(shè)備越來越快,主線程和 worker 線性之間的上下文切換開銷占比越來越高。現(xiàn)在市場上的一些設(shè)備,例如 Intel Optane[7]延遲已經(jīng)低到和上下文切換一個量級(微秒 us)。換個方式描述, 更能讓我們感受到這種開銷:上下文每切換一次,我們就少一次 dispatch I/O 的機(jī)會

    因此,Linux ?2.6 內(nèi)核引入了異步 I/O(asynchronous I/O)接口, 方便起見,本文簡寫為 linux-aio。AIO ?**原理**是很簡單的:

    • 用戶通過 io_submit() 提交 I/O 請求,

    • 過一會再調(diào)用 io_getevents() 來檢查哪些 events 已經(jīng) ready 了。

    • 使程序員 能編寫完全異步的代碼

    近期,Linux AIO 甚至支持了[8]epoll():也就是說 不僅能提交 storage I/O 請求,還能提交網(wǎng)絡(luò) I/O 請求。照這樣發(fā)展下去,linux-aio似乎能成為一個王者。但由于它糟糕的演進(jìn)之路,這個愿望幾乎不可能實(shí)現(xiàn)了。我們從 ?Linus 標(biāo)志性的激烈言辭中就能略窺一斑

    Reply to: to support opening files asynchronously[9]

    So I think this is ridiculously ugly.

    AIO is a horrible ad-hoc design, with the main excuse being “other, less gifted people, made that design, and we are implementing it for compatibility because database people — who seldom have any shred of taste — actually use it”.

    — Linus Torvalds (on lwn.net)

    首先,作為數(shù)據(jù)庫從業(yè)人員,我們想借此機(jī)會為我們的沒品(lack of taste)向 Linus 道歉。但更重要的是,我們要進(jìn)一步解釋一下 為什么 Linus 是對的:Linux AIO 確實(shí)問題纏身,

  • 只支持 O_DIRECT 文件,因此 對常規(guī)的非數(shù)據(jù)庫應(yīng)用(normal, non-database applications) 幾乎是無用的

  • 接口在 設(shè)計(jì)時并未考慮擴(kuò)展性。雖然可以擴(kuò)展 —— 我們也確實(shí)這么做了 —— 但每加一個東西都相當(dāng)復(fù)雜;

  • 雖然從 技術(shù)上說接口是非阻塞的,但實(shí)際上有很多可能的原因都會導(dǎo)致它阻塞[10],而且引發(fā)的方式難以預(yù)料。

  • 1.6 小結(jié)

    以上可以清晰地看出 Linux I/O 的演進(jìn):

    • 最開始是同步(阻塞式)系統(tǒng)調(diào)用;

    • 然后隨著 實(shí)際需求和具體場景,不斷加入新的異步接口,還要保持與老接口的兼容和協(xié)同工作。

    另外也看到,在非阻塞式讀寫的問題上 并沒有形成統(tǒng)一方案

  • Network socket 領(lǐng)域:添加一個異步接口,然后去輪詢(poll)請求是否完成(readiness);

  • Storage I/O 領(lǐng)域:只針對某一細(xì)分領(lǐng)域(數(shù)據(jù)庫)在某一特定時期的需求,添加了一個定制版的異步接口。

  • 這就是 Linux I/O 的演進(jìn)歷史 —— 只著眼當(dāng)前,出現(xiàn)一個問題就引入一種設(shè)計(jì),而并沒有多少前瞻性 —— 直到 io_uring 的出現(xiàn)。

    2 io_uring

    io_uring 來自資深內(nèi)核開發(fā)者 Jens Axboe 的想法,他在 Linux I/O stack 領(lǐng)域頗有研究。從最早的 patch aio: support for IO polling[11]可以看出,這項(xiàng)工作始于一個很簡單的觀察:隨著設(shè)備越來越快,中斷驅(qū)動(interrupt-driven)模式效率已經(jīng)低于輪詢模式(polling for completions) —— 這也是高性能領(lǐng)域最常見的主題之一。

    • io_uring 的 基本邏輯與 linux-aio 是類似的:提供兩個接口,一個將 I/O 請求提交到內(nèi)核,一個從內(nèi)核接收完成事件。

    • 但隨著開發(fā)深入,它逐漸變成了一個完全不同的接口:設(shè)計(jì)者開始從源頭思考如何支持完全異步的操作

    2.1 與 Linux AIO 的不同

    io_uring 與 linux-aio 有著本質(zhì)的不同:

  • 在設(shè)計(jì)上是真正異步的(truly asynchronous)。只要 設(shè)置了合適的 flag,它在 系統(tǒng)調(diào)用上下文中就只是將請求放入隊(duì)列, 不會做其他任何額外的事情, 保證了應(yīng)用永遠(yuǎn)不會阻塞

  • 支持任何類型的 I/O:cached files、direct-access files 甚至 blocking sockets。

    由于設(shè)計(jì)上就是異步的(async-by-design nature),因此 無需 poll+read/write 來處理 sockets。只需提交一個阻塞式讀(blocking read),請求完成之后,就會出現(xiàn)在 completion ring。

  • 靈活、可擴(kuò)展:基于 io_uring 甚至能重寫(re-implement)Linux 的每個系統(tǒng)調(diào)用。

  • 2.2 原理及核心數(shù)據(jù)結(jié)構(gòu):SQ/CQ/SQE/CQE

    每個 io_uring 實(shí)例都有 兩個環(huán)形隊(duì)列(ring),在內(nèi)核和應(yīng)用程序之間共享:

    • 提交隊(duì)列:submission queue (SQ)

    • 完成隊(duì)列:completion queue (CQ)

    這兩個隊(duì)列:

    • 都是 單生產(chǎn)者、單消費(fèi)者,size 是 2 的冪次;

    • 提供 無鎖接口(lock-less access interface),內(nèi)部使用 **內(nèi)存屏障**做同步(coordinated with memory barriers)。

    使用方式

    • 請求

      • 應(yīng)用創(chuàng)建 SQ entries (SQE),更新 SQ tail;

      • 內(nèi)核消費(fèi) SQE,更新 SQ head。

    • 完成

      • 內(nèi)核為完成的一個或多個請求創(chuàng)建 CQ entries (CQE),更新 CQ tail;

      • 應(yīng)用消費(fèi) CQE,更新 CQ head。

      • 完成事件(completion events)可能以任意順序到達(dá),到總是與特定的 SQE 相關(guān)聯(lián)的。

      • 消費(fèi) CQE 過程無需切換到內(nèi)核態(tài)。

    2.3 帶來的好處

    io_uring 這種請求方式還有一個好處是:原來需要多次系統(tǒng)調(diào)用(讀或?qū)?#xff09;,現(xiàn)在變成批處理一次提交。

    還記得 Meltdown 漏洞嗎?當(dāng)時我還寫了一篇文章[12]解釋為什么我們的 Scylla NoSQL 數(shù)據(jù)庫受影響很小:aio 已經(jīng)將我們的 I/O 系統(tǒng)調(diào)用批處理化了。

    io_uring ?將這種批處理能力帶給了 storage I/O 系統(tǒng)調(diào)用之外的其他一些系統(tǒng)調(diào)用,包括:

    • read

    • write

    • send

    • recv

    • accept

    • openat

    • stat

    • 專用的一些系統(tǒng)調(diào)用,例如 fallocate

    此外,io_uring 使異步 I/O 的使用場景也不再僅限于數(shù)據(jù)庫應(yīng)用, 普通的 非數(shù)據(jù)庫應(yīng)用也能用。這一點(diǎn)值得重復(fù)一遍:

    雖然 io_uring 與 aio 有一些相似之處,但它的 擴(kuò)展性和架構(gòu)是革命性的:它 將異步操作的強(qiáng)大能力帶給了所有應(yīng)用(及其開發(fā)者),而不再僅限于是數(shù)據(jù)庫應(yīng)用這一細(xì)分領(lǐng)域

    我們的 CTO Avi Kivity 在 the Core C++ 2019 event 上 有一次關(guān)于 async 的分享[13]。核心點(diǎn)包括:從延遲上來說

  • 現(xiàn)代多核、多 CPU 設(shè)備,其內(nèi)部本身就是一個基礎(chǔ)網(wǎng)絡(luò);

  • **CPU 之間**是另一個網(wǎng)絡(luò);

  • **CPU 和磁盤 I/O 之間**又是一個網(wǎng)絡(luò)。

  • 因此網(wǎng)絡(luò)編程采用異步是明智的,而現(xiàn)在開發(fā)自己的應(yīng)用也應(yīng)該考慮異步。這 從根本上改變了 Linux 應(yīng)用的設(shè)計(jì)方式

    • 之前都是一段順序代碼流,需要系統(tǒng)調(diào)用時才執(zhí)行系統(tǒng)調(diào)用,

    • 現(xiàn)在需要思考一個文件是否 ready,因而自然地引入 event-loop,不斷通過共享 buffer 提交請求和接收結(jié)果。

    2.4 三種工作模式

    io_uring 實(shí)例可工作在三種模式:

  • 中斷驅(qū)動模式(interrupt driven)

    默認(rèn)模式。可通過 io_uring_enter() 提交 I/O 請求,然后直接檢查 CQ 狀態(tài)判斷是否完成。

  • 輪詢模式(polled)

    Busy-waiting for an I/O completion,而不是通過異步 IRQ(Interrupt Request)接收通知。

    這種模式需要文件系統(tǒng)(如果有)和塊設(shè)備(block device)支持輪詢功能。相比中斷驅(qū)動方式,這種方式延遲更低(連系統(tǒng)調(diào)用都省了[14]), 但可能會消耗更多 CPU 資源。

    目前,只有指定了 O_DIRECT flag 打開的文件描述符,才能使用這種模式。當(dāng)一個讀 或?qū)懻埱筇峤唤o輪詢上下文(polled context)之后,應(yīng)用(application)必須調(diào)用io_uring_enter() 來輪詢 CQ 隊(duì)列,判斷請求是否已經(jīng)完成。

    對一個 io_uring 實(shí)例來說, 不支持混合使用輪詢和非輪詢模式

  • 內(nèi)核輪詢模式(kernel polled)

  • 這種模式中,會 ?創(chuàng)建一個內(nèi)核線程(kernel thread)來執(zhí)行 SQ 的輪詢工作。

    使用這種模式的 io_uring 實(shí)例, ?應(yīng)用無需切到到內(nèi)核態(tài) 就能觸發(fā)(issue)I/O 操作。通過 SQ 來提交 SQE,以及監(jiān)控 CQ 的完成狀態(tài),應(yīng)用無需任何系統(tǒng)調(diào)用,就能提交和收割 I/O(submit and reap I/Os)。

    如果內(nèi)核線程的空閑時間超過了用戶的配置值,它會通知應(yīng)用,然后進(jìn)入 idle 狀態(tài)。這種情況下,應(yīng)用必須調(diào)用 io_uring_enter() 來喚醒內(nèi)核線程。如果 I/O 一直很繁忙,內(nèi)核線性是不會 sleep 的。

    2.5 io_uring 系統(tǒng)調(diào)用 API

    有三個:

    • io_uring_setup(2)

    • io_uring_register(2)

    • io_uring_enter(2)

    下面展開介紹。完整文檔見 manpage[15]

    2.5.1 io_uring_setup()

    執(zhí)行異步 I/O 需要先 設(shè)置上下文

    int?io_uring_setup(u32?entries,?struct?io_uring_params?*p);

    這個系統(tǒng)調(diào)用

    • 創(chuàng)建一個 SQ 和一個 CQ

    • queue size 至少 entries 個元素,

    • 返回一個文件描述符,隨后用于在這個 io_uring 實(shí)例上執(zhí)行操作。

    SQ 和 CQ 在應(yīng)用和內(nèi)核之間共享,避免了在初始化和完成 I/O 時(initiating and completing I/O)拷貝數(shù)據(jù)。

    參數(shù) p:

    • 應(yīng)用用來配置 io_uring,

    • 內(nèi)核返回的 SQ/CQ 配置信息也通過它帶回來。

    io_uring_setup() 成功時返回一個文件描述符(fd)。應(yīng)用隨后可以將這個 fd 傳給 mmap(2) 系統(tǒng)調(diào)用,來 map the submission and completion queues 或者傳給 to the io_uring_register() or io_uring_enter() system calls.

    2.5.2 io_uring_register()

    注冊用于異步 I/O 的 文件或用戶緩沖區(qū)(files or user buffers):

    int?io_uring_register(unsigned?int?fd,?unsigned?int?opcode,?void?*arg,?unsigned?int?nr_args);

    注冊文件或用戶緩沖區(qū),使內(nèi)核能 長時間持有對該文件在內(nèi)核內(nèi)部的數(shù)據(jù)結(jié)構(gòu)引用(internal kernel data structures associated with the files), 或創(chuàng)建 應(yīng)用內(nèi)存的長期映射(long term mappings of application memory associated with the buffers), 這個操作只會在注冊時執(zhí)行一次,而不是每個 I/O 請求都會處理,因此減少了 per-I/O overhead。

    注冊的緩沖區(qū)(buffer)性質(zhì)
    • Registered buffers 將會 被鎖定在內(nèi)存中(be locked in memory),并 計(jì)入用戶的 RLIMIT_MEMLOCK 資源限制。

    • 此外,每個 buffer 有 ?1GB 的大小限制

    • 當(dāng)前,buffers 必須是 匿名、非文件后端的內(nèi)存(anonymous, non-file-backed memory),例如 malloc(3) or mmap(2) with the MAP_ANONYMOUS flag set 返回的內(nèi)存。

    • Huge pages 也是支持的。整個 huge page 都會被 pin 到內(nèi)核,即使只用到了其中一部分。

    • 已經(jīng)注冊的 buffer 無法調(diào)整大小,想調(diào)整只能先 unregister,再重新 register 一個新的。

    通過 eventfd() 訂閱 completion 事件

    可以用 eventfd(2) 訂閱 io_uring 實(shí)例的 completion events。將 eventfd 描述符通過這個系統(tǒng)調(diào)用注冊就行了。

    The credentials of the running application can be registered with io_uring which returns an id associated with those credentials. Applications wishing to share a ring between separate users/processes can pass in this credential id in the SQE personality field. If set, that particular SQE will be issued with these credentials.

    2.5.3 io_uring_enter()

    int?io_uring_enter(unsigned?int?fd,?unsigned?int?to_submit,?unsigned?int?min_complete,?unsigned?int?flags,?sigset_t?*sig);

    這個系統(tǒng)調(diào)用用于初始化和完成(initiate and complete)I/O,使用共享的 SQ 和 CQ。單次調(diào)用同時執(zhí)行:

  • 提交新的 I/O 請求

  • 等待 I/O 完成

  • 參數(shù):

  • fd 是 io_uring_setup() 返回的文件描述符;

  • to_submit 指定了 SQ 中提交的 I/O 數(shù)量;

  • 依據(jù)不同模式:

    • 默認(rèn)模式,如果指定了 min_complete,會等待這個數(shù)量的 I/O 事件完成再返回;

    • 如果 io_uring 是 polling 模式,這個參數(shù)表示:

  • 0:要求內(nèi)核返回當(dāng)前以及完成的所有 events,無阻塞;

  • 非零:如果有事件完成,內(nèi)核仍然立即返回;如果沒有完成事件,內(nèi)核會 poll,等待指定的次數(shù)完成,或者這個進(jìn)程的時間片用完。

  • 注意:對于 interrupt driven I/O, 應(yīng)用無需進(jìn)入內(nèi)核就能檢查 CQ 的 event completions

    io_uring_enter() 支持很多操作,包括:

    • Open, close, and stat files

    • Read and write into multiple buffers or pre-mapped buffers

    • Socket I/O operations

    • Synchronize file state

    • Asynchronously monitor a set of file descriptors

    • Create a timeout linked to a specific operation in the ring

    • Attempt to cancel an operation that is currently in flight

    • Create I/O chains

    • Ordered execution within a chain

    • Parallel execution of multiple chains

    當(dāng)這個系統(tǒng)調(diào)用返回時,表示一定數(shù)量的 SEQ 已經(jīng)被消費(fèi)和提交了,此時可以安全的重用隊(duì)列中的 SEQ。此時 IO 提交有可能還停留在異步上下文中,即實(shí)際上 SQE 可能還沒有被提交 —— 不過 用戶不用關(guān)心這些細(xì)節(jié) —— 當(dāng)隨后內(nèi)核需要使用某個特定的 SQE 時,它已經(jīng)復(fù)制了一份。

    2.6 高級特性

    io_uring 提供了一些用于特殊場景的高級特性:

  • File registration(文件注冊):每次發(fā)起一個指定文件描述的操 作,內(nèi)核都需要 花費(fèi)一些時鐘周期(cycles) 將文件描述符映射到內(nèi)部表示。對于那些 **針對同一文件進(jìn)行重復(fù)操作**的場景,io_uring 支持 提前注冊這些文件,后面直接查找就行了。

  • Buffer registration(緩沖區(qū)注冊):與 file registration 類 似,direct I/O 場景中,內(nèi)核需要 map/unmap memory areas。io_uring 支持提前 注冊這些緩沖區(qū)(buffers)。

  • Poll ring(輪詢環(huán)形緩沖區(qū)):對于非常快是設(shè)備,處理中斷的開 銷是比較大的。io_uring 允許用戶關(guān)閉中斷,使用輪詢模式。前面“三種工作模式”小節(jié) 也介紹到了這一點(diǎn)。

  • Linked operations(鏈接操作):允許用戶發(fā)送串聯(lián)的請求。這兩 個請求同時提交,但后面的會等前面的處理完才開始執(zhí)行。

  • 2.7 用戶空間庫 liburing

    `liburing`[16] 提供了一個簡單的高層 API, 可用于一些基本場景,應(yīng)用程序避免了直接使用更底層的系統(tǒng)調(diào)用。此外,這個 API 還避免了一些重復(fù)操作的代碼,如設(shè)置 io_uring 實(shí)例。

    舉個例子,在 io_uring_setup() 的 manpage 描述中,調(diào)用這個系統(tǒng)調(diào)用獲得一個 ring 文 件描述符之后,應(yīng)用必須調(diào)用 mmap() 來這樣的邏輯需要一段略長的代碼,而用liburing 的話,下面的函數(shù)已經(jīng)將上述流程封裝好了:

    int?io_uring_queue_init(unsigned?entries,?struct?io_uring?*ring,?unsigned?flags);

    下一節(jié)來看兩個例子基于 liburing 的例子。

    3 基于 liburing 的示例應(yīng)用

    編譯:

    $?git?clone?https://github.com/axboe/liburing.git $?git?co?-b?liburing-2.0?tags/liburing-2.0$?cd?liburing $?ls?examples/ io_uring-cp??io_uring-cp.c??io_uring-test??io_uring-test.c??link-cp??link-cp.c??Makefile??ucontext-cp??ucontext-cp.c$?make?-j4$?./examples/io_uring-test?<file> Submitted=4,?completed=4,?bytes=16384$?./examples/link-cp?<in-file>?<out-file>

    3.1 io_uring-test

    這個程序使用 4 個 SQE,從輸入文件中 讀取最多 16KB 數(shù)據(jù)

    源碼及注釋

    為方便看清主要邏輯,忽略了一些錯誤處理代碼,完整代碼見io_uring-test.c[17]

    /*?SPDX-License-Identifier:?MIT?*/ /**?Simple?app?that?demonstrates?how?to?setup?an?io_uring?interface,*?submit?and?complete?IO?against?it,?and?then?tear?it?down.**?gcc?-Wall?-O2?-D_GNU_SOURCE?-o?io_uring-test?io_uring-test.c?-luring*/ #include?"liburing.h"#define?QD????4?//?io_uring?隊(duì)列長度int?main(int?argc,?char?*argv[])?{int?i,?fd,?pending,?done;void?*buf;//?1.?初始化一個?io_uring?實(shí)例struct?io_uring?ring;ret?=?io_uring_queue_init(QD,????//?隊(duì)列長度&ring,?//?io_uring?實(shí)例0);????//?flags,0?表示默認(rèn)配置,例如使用中斷驅(qū)動模式//?2.?打開輸入文件,注意這里指定了?O_DIRECT?flag,內(nèi)核輪詢模式需要這個?flag,見前面介紹fd?=?open(argv[1],?O_RDONLY?|?O_DIRECT);struct?stat?sb;fstat(fd,?&sb);?//?獲取文件信息,例如文件長度,后面會用到//?3.?初始化?4?個讀緩沖區(qū)ssize_t?fsize?=?0;?????????????//?程序的最大讀取長度struct?iovec?*iovecs?=?calloc(QD,?sizeof(struct?iovec));for?(i?=?0;?i?<?QD;?i++)?{if?(posix_memalign(&buf,?4096,?4096))return?1;iovecs[i].iov_base?=?buf;??//?起始地址iovecs[i].iov_len?=?4096;??//?緩沖區(qū)大小fsize?+=?4096;}//?4.?依次準(zhǔn)備?4?個?SQE?讀請求,指定將隨后讀入的數(shù)據(jù)寫入?iovecs?struct?io_uring_sqe?*sqe;offset?=?0;i?=?0;do?{sqe?=?io_uring_get_sqe(&ring);??//?獲取可用?SQEio_uring_prep_readv(sqe,????????//?用這個?SQE?準(zhǔn)備一個待提交的?read?操作fd,?????????//?從?fd?打開的文件中讀取數(shù)據(jù)&iovecs[i],?//?iovec?地址,讀到的數(shù)據(jù)寫入?iovec?緩沖區(qū)1,??????????//?iovec?數(shù)量offset);????//?讀取操作的起始地址偏移量offset?+=?iovecs[i].iov_len;????//?更新偏移量,下次使用i++;if?(offset?>?sb.st_size)????????//?如果超出了文件大小,停止準(zhǔn)備后面的?SQEbreak;}?while?(1);//?5.?提交?SQE?讀請求ret?=?io_uring_submit(&ring);???????//?4?個?SQE?一次提交,返回提交成功的?SQE?數(shù)量if?(ret?<?0)?{fprintf(stderr,?"io_uring_submit:?%s\n",?strerror(-ret));return?1;}?else?if?(ret?!=?i)?{fprintf(stderr,?"io_uring_submit?submitted?less?%d\n",?ret);return?1;}//?6.?等待讀請求完成(CQE)struct?io_uring_cqe?*cqe;done?=?0;pending?=?ret;fsize?=?0;for?(i?=?0;?i?<?pending;?i++)?{io_uring_wait_cqe(&ring,?&cqe);??//?等待系統(tǒng)返回一個讀完成事件done++;if?(cqe->res?!=?4096?&&?cqe->res?+?fsize?!=?sb.st_size)?{fprintf(stderr,?"ret=%d,?wanted?4096\n",?cqe->res);}fsize?+=?cqe->res;io_uring_cqe_seen(&ring,?cqe);???//?更新?io_uring?實(shí)例的完成隊(duì)列}//?7.?打印統(tǒng)計(jì)信息printf("Submitted=%d,?completed=%d,?bytes=%lu\n",?pending,?done,?(unsigned?long)?fsize);//?8.?清理工作close(fd);io_uring_queue_exit(&ring);return?0; }

    其他說明

    代碼中已經(jīng)添加了注釋,這里再解釋幾點(diǎn):

    • 每個 SQE 都執(zhí)行一個 allocated buffer,后者是用 iovec 結(jié)構(gòu)描述的;

    • 第 3 & 4 步:初始化所有 SQE,用于接下來的 IORING_OP_READV 操作,后者提供了 readv(2) 系統(tǒng)調(diào)用的異步接口

    • 操作完成之后,這個 SQE iovec buffer 中存放的是相關(guān) readv 操作的結(jié)果;

    • 接下來調(diào)用 io_uring_wait_cqe() 來 reap CQE,并通過 cqe->res 字段驗(yàn)證讀取的字節(jié)數(shù);

    • io_uring_cqe_seen() 通知內(nèi)核這個 CQE 已經(jīng)被消費(fèi)了。

    3.2 link-cp

    link-cp 使用 io_uring 高級特性 SQE chaining 特性來復(fù)制文件。

    I/O chain

    io_uring 支持創(chuàng)建 I/O chain。一個 chain 內(nèi)的 I/O 是順序執(zhí)行的,多個 I/O chain 可以并行執(zhí)行。

    io_uring_enter() manpage 中對 IOSQE_IO_LINK 有 詳細(xì)解釋[18]

    When this flag is specified, it forms a link with the next SQE in the submission ring. That next SQE will not be started before this one completes. This, in effect, forms a chain of SQEs, which can be arbitrarily long. The tail of the chain is denoted by the first SQE that does not have this flag set. This flag has no effect on previous SQE submissions, nor does it impact SQEs that are outside of the chain tail. This means that multiple chains can be executing in parallel, or chains and individual SQEs. Only members inside the chain are serialized. A chain of SQEs will be broken, if any request in that chain ends in error. io_uring considers any unexpected result an error. This means that, eg, a short read will also terminate the remainder of the chain. If a chain of SQE links is broken, the remaining unstarted part of the chain will be terminated and completed with -ECANCELED as the error code. Available since 5.3.

    為實(shí)現(xiàn)復(fù)制文件功能,link-cp 創(chuàng)建一個長度為 2 的 SQE chain。

    • 第一個 SQE 是一個讀請求,將數(shù)據(jù)從輸入文件讀到 buffer;

    • 第二個請求,與第一個請求是 linked,是一個寫請求,將數(shù)據(jù)從 buffer 寫入輸出文件。

    源碼及注釋

    /*?SPDX-License-Identifier:?MIT?*/ /**?Very?basic?proof-of-concept?for?doing?a?copy?with?linked?SQEs.?Needs?a*?bit?of?error?handling?and?short?read?love.*/ #include?"liburing.h"#define?QD????64?????????//?io_uring?隊(duì)列長度 #define?BS????(32*1024)struct?io_data?{size_t?offset;int?index;struct?iovec?iov; };static?int?infd,?outfd; static?unsigned?inflight;//?創(chuàng)建一個?read->write?SQE?chain static?void?queue_rw_pair(struct?io_uring?*ring,?off_t?size,?off_t?offset)?{struct?io_uring_sqe?*sqe;struct?io_data?*data;void?*ptr;ptr?=?malloc(size?+?sizeof(*data));data?=?ptr?+?size;data->index?=?0;data->offset?=?offset;data->iov.iov_base?=?ptr;data->iov.iov_len?=?size;sqe?=?io_uring_get_sqe(ring);????????????????????????????//?獲取可用?SQEio_uring_prep_readv(sqe,?infd,?&data->iov,?1,?offset);???//?準(zhǔn)備?read?請求sqe->flags?|=?IOSQE_IO_LINK;?????????????????????????????//?設(shè)置為?LINK?模式io_uring_sqe_set_data(sqe,?data);????????????????????????//?設(shè)置?datasqe?=?io_uring_get_sqe(ring);????????????????????????????//?獲取另一個可用?SQEio_uring_prep_writev(sqe,?outfd,?&data->iov,?1,?offset);?//?準(zhǔn)備?write?請求io_uring_sqe_set_data(sqe,?data);????????????????????????//?設(shè)置?data }//?處理完成(completion)事件:釋放 SQE 的內(nèi)存緩沖區(qū),通知內(nèi)核已經(jīng)消費(fèi)了 CQE。 static?int?handle_cqe(struct?io_uring?*ring,?struct?io_uring_cqe?*cqe)?{struct?io_data?*data?=?io_uring_cqe_get_data(cqe);???????//?獲取?CQEdata->index++;if?(cqe->res?<?0)?{if?(cqe->res?==?-ECANCELED)?{queue_rw_pair(ring,?BS,?data->offset);inflight?+=?2;}?else?{printf("cqe?error:?%s\n",?strerror(cqe->res));ret?=?1;}}if?(data->index?==?2)?{????????//?read->write?chain?完成,釋放緩沖區(qū)內(nèi)存void?*ptr?=?(void?*)?data?-?data->iov.iov_len;free(ptr);}io_uring_cqe_seen(ring,?cqe);??//?通知內(nèi)核已經(jīng)消費(fèi)了?CQE?事件return?ret; }static?int?copy_file(struct?io_uring?*ring,?off_t?insize)?{struct?io_uring_cqe?*cqe;size_t?this_size;off_t?offset;offset?=?0;while?(insize)?{??????????????????????//?數(shù)據(jù)還沒處理完int?has_inflight?=?inflight;??????//?當(dāng)前正在進(jìn)行中的?SQE?數(shù)量int?depth;??//?SQE?閾值,當(dāng)前進(jìn)行中的?SQE?數(shù)量(inflight)超過這個值之后,需要阻塞等待?CQE?完成while?(insize?&&?inflight?<?QD)?{?//?數(shù)據(jù)還沒處理完,io_uring?隊(duì)列也還沒用完this_size?=?BS;if?(this_size?>?insize)???????//?最后一段數(shù)據(jù)不足?BS?大小this_size?=?insize;queue_rw_pair(ring,?this_size,?offset);?//?創(chuàng)建一個?read->write?chain,占用兩個?SQEoffset?+=?this_size;insize?-=?this_size;inflight?+=?2;????????????????//?正在進(jìn)行中的?SQE?數(shù)量?+2}if?(has_inflight?!=?inflight)?????//?如果有新創(chuàng)建的?SQE,io_uring_submit(ring);????????//?就提交給內(nèi)核if?(insize)???????????????????????//?如果還有?data?等待處理,depth?=?QD;???????????????????//?閾值設(shè)置 SQ 的隊(duì)列長度,即 SQ 隊(duì)列用完才開始阻塞等待 CQE;else??????????????????????????????//?data?處理已經(jīng)全部提交,depth?=?1;????????????????????//?閾值設(shè)置為?1,即只要還有?SQE?未完成,就阻塞等待?CQE//?下面這個?while?只有?SQ?隊(duì)列用完或?data?全部提交之后才會執(zhí)行到while?(inflight?>=?depth)?{???????//?如果所有?SQE?都已經(jīng)用完,或者所有?data?read->write?請求都已經(jīng)提交io_uring_wait_cqe(ring,?&cqe);//?等待內(nèi)核?completion?事件handle_cqe(ring,?cqe);????????//?處理 completion 事件:釋放 SQE 內(nèi)存緩沖區(qū),通知內(nèi)核 CQE 已消費(fèi)inflight--;???????????????????//?正在進(jìn)行中的?SQE?數(shù)量?-1}}return?0; }static?int?setup_context(unsigned?entries,?struct?io_uring?*ring)?{io_uring_queue_init(entries,?ring,?0);return?0; }static?int?get_file_size(int?fd,?off_t?*size)?{struct?stat?st;if?(fstat(fd,?&st)?<?0)return?-1;if?(S_ISREG(st.st_mode))?{*size?=?st.st_size;return?0;}?else?if?(S_ISBLK(st.st_mode))?{unsigned?long?long?bytes;if?(ioctl(fd,?BLKGETSIZE64,?&bytes)?!=?0)return?-1;*size?=?bytes;return?0;}return?-1; }int?main(int?argc,?char?*argv[])?{struct?io_uring?ring;off_t?insize;int?ret;infd?=?open(argv[1],?O_RDONLY);outfd?=?open(argv[2],?O_WRONLY?|?O_CREAT?|?O_TRUNC,?0644);if?(setup_context(QD,?&ring))return?1;if?(get_file_size(infd,?&insize))return?1;ret?=?copy_file(&ring,?insize);close(infd);close(outfd);io_uring_queue_exit(&ring);return?ret; }

    其他說明

    代碼中實(shí)現(xiàn)了三個函數(shù):

  • copy_file():高層復(fù)制循環(huán)邏輯;它會調(diào)用 queue_rw_pair(ring, this_size, offset) 來構(gòu)造 SQE pair;并通過一次 io_uring_submit() 調(diào)用將所有構(gòu)建的 SQE pair 提交。

    這個函數(shù)維護(hù)了一個最大 DQ 數(shù)量的 inflight SQE,只要數(shù)據(jù) copy 還在進(jìn)行中;否則,即數(shù)據(jù)已經(jīng)全部讀取完成,就開始等待和收割所有的 CQE。

  • queue_rw_pair() 構(gòu)造一個 read-write SQE pair.

    read SQE 的 IOSQE_IO_LINK flag 表示開始一個 chain,write SQE 不用設(shè)置這個 flag,標(biāo)志著這個 chain 的結(jié)束。用戶 data 字段設(shè)置為同一個 data 描述符,并且在隨后的 completion 處理中會用到。

  • handle_cqe() 從 CQE 中提取之前由 ?queue_rw_pair() 保存的 data 描述符,并在描述符中記錄處理進(jìn)展(index)。

    如果之前請求被取消,它還會重新提交 read-write pair。

    一個 CQE pair 的兩個 member 都處理完成之后(index==2),釋放共享的 data descriptor。最后通知內(nèi)核這個 CQE 已經(jīng)被消費(fèi)。

  • 4 io_uring 性能壓測(基于 fio)

    對于已經(jīng)在使用 linux-aio 的應(yīng)用,例如 ScyllaDB,不要期望換成 io_uring 之后能獲得大幅的性能提升,這是因?yàn)?#xff1a;io_uring 性能相關(guān)的底層機(jī)制與 linux-aio 并無本質(zhì)不同(都是異步提交,輪詢結(jié)果)。

    在此,本文也希望使讀者明白:io_uring ?首先和最重要的貢獻(xiàn)在于:將 linux-aio 的所有優(yōu)良特性帶給了普羅大眾(而非局限于數(shù)據(jù)庫這樣的細(xì)分領(lǐng)域)。

    4.1 測試環(huán)境

    本節(jié)使用 fio 測試 4 種模式:

  • synchronous reads

  • posix-aio (implemented as a thread pool)

  • linux-aio

  • io_uring

  • 硬件:

    • NVMe 存儲設(shè)備,物理極限能打到 ?3.5M IOPS

    • 8 核處理器

    4.2 場景一:direct I/O 1KB 隨機(jī)讀(繞過 page cache)

    第一組測試中,我們希望所有的讀請求都能 命中存儲設(shè)備(all reads to hit the storage), 完全繞開操作系統(tǒng)的頁緩存(page cache)。

    測試配置:

    • 8 個 CPU 執(zhí)行 72 fio job,

    • 每個 job 隨機(jī)讀取 4 個文件,

    • iodepth=8(number of I/O units to keep in flight against the file.)。

    這種配置 保證了 CPU 處于飽和狀態(tài),便于觀察 I/O 性能。如果 CPU 數(shù)量足夠多,那每組測試都可能會打滿設(shè)備帶寬,結(jié)果對 I/O 壓測就沒意義了。

    表 1. Direct I/O(繞過系統(tǒng)頁緩存):1KB 隨機(jī)讀,CPU 100% 下的 I/O 性能

    backendIOPScontext switchesIOPS ±% vs io_uring
    sync814,00027,625,004-42.6%
    posix-aio (thread pool)433,00064,112,335-69.4%
    linux-aio1,322,00010,114,149-6.7%
    io_uring (basic)1,417,00011,309,574
    io_uring (enhanced)1,486,00011,483,4684.9%

    幾點(diǎn)分析:

  • io_uring 相比 linux-aio 確實(shí)有一定提升,但并非革命性的。

  • 開啟高級特性,例如 buffer & file registration 之后性能有進(jìn)一步提升 —— 但也還 沒有到為了這些性能而重寫整個應(yīng)用的地步,除非你是搞數(shù)據(jù)庫研發(fā),想榨取硬件的最后一分性能。

  • io_uring and linux-aio ?都比同步 read 接口快 2 倍,而后者又比 posix-aio 快 2 倍 —— 初看有點(diǎn)差異。但看看 上下文切換次數(shù),就不難理解為什么 posix-aio 這么慢了。

    • 同步 read 性能差是因?yàn)?#xff1a;在這種沒有 page cache 的情況下,每次 read 系統(tǒng)調(diào)用都會阻塞,因此就會涉及一次上下文切換

    • posix-aio 性能更差是因?yàn)?#xff1a;不僅內(nèi)核和應(yīng)用程序之間要頻繁上下文切換,線程池的 多個線程之間也在頻繁切換

    4.2 場景二:buffered I/O 1KB 隨機(jī)讀(數(shù)據(jù)提前加載到內(nèi)存,100% hot cache)

    第二組測試 buffered I/O:

  • 將文件數(shù)據(jù)提前加載到內(nèi)存,然后再測隨機(jī)讀。

    • 由于 數(shù)據(jù)全部在 page cache,因此 同步 read 永遠(yuǎn)不會阻塞

    • 這種場景下,我們預(yù)期 同步讀和 io_uring 的性能差距不大(都是最好的)

    其他測試條件不變。

    表 2. Buffered I/O(數(shù)據(jù)全部來自 page cache,100% hot cache):1KB 隨機(jī)讀,100% CPU 下的 I/O 性能

    BackendIOPScontext switchesIOPS ±% vs io_uring
    sync4,906,000105,797-2.3%
    posix-aio (thread pool)1,070,000114,791,187-78.7%
    linux-aio4,127,000105,052-17.9%
    io_uring5,024,000106,683

    結(jié)果分析:

  • 同步讀和 io_uring 性能差距確實(shí)很小,二者都是最好的。

    但注意, **實(shí)際的應(yīng)用**不可能一直 100% 時間執(zhí)行 IO 操作,因此 基于同步讀的真實(shí)應(yīng)用性能 還是要比基于 io_uring 要差的,因?yàn)?io_uring 會將多個系統(tǒng)調(diào)用批處理化。

  • posix-aio 性能最差,直接原因是 上下文切換次數(shù)太多,這也和場景相關(guān):在這種 ?CPU 飽和的情況下,它的線程池反而是累贅,會完全拖慢性能。

  • linux-aio 并 不是針對 buffered I/O 設(shè)計(jì)的,在這種 page cache 直接返回的場景, 它的 異步接口反而會造成性能損失 —— 將操作分 為 dispatch 和 consume 兩步不但沒有性能收益,反而有額外開銷。

  • 4.3 性能測試小結(jié)

    最后再次提醒,本節(jié)是極端應(yīng)用/場景( 100% CPU + 100% cache miss/hit)測試, 真實(shí)應(yīng)用的行為通常處于同步讀和異步讀之間:時而一些阻塞操作,時而一些非阻塞操作。但不管怎么說,用了 io_uring 之后,用戶就無需擔(dān)心同步和異步各占多少比例了,因?yàn)樗?在任何場景下都表現(xiàn)良好

  • 如果操作是非阻塞的,io_uring 不會有額外開銷;

  • 如果操作是阻塞式的,也沒關(guān)系,io_uring 是完全異步的,并且不依賴線程池或昂貴的上下文切換來實(shí)現(xiàn)這種異步能力;

  • 本文測試的都是隨機(jī)讀,但對 其他類型的操作,io_uring 表現(xiàn)也是非常良好的。例如:

  • 打開/關(guān)閉文件

  • 設(shè)置定時器

  • 通過 network sockets 傳輸數(shù)據(jù)

  • 而且 使用的是同一套 io_uring 接口

    4.4 ScyllaDB 與 io_uring

    Scylla 重度依賴 direct I/O,從一開始就使用 linux-aio。在我們轉(zhuǎn)向 io_uring 的過程中,最開始測試顯示對某些 workloads,能取得 50% 以上的性能提升。但 深入研究之后發(fā)現(xiàn),這是因?yàn)槲覀?之前的 linux-aio 用的不夠好。這也揭示了一個 經(jīng)常被忽視的事實(shí):獲得高性能沒有那么難(前提是你得弄對了)。在對比 io_uring 和 linux-aio 應(yīng)用之后,我們 很快改進(jìn)了一版,二者的性能差距就消失了。但坦率地說,解決這個問題 需要一些工作量,因?yàn)橐膭右粋€已經(jīng)使用 了很多年的基于 linux-aio 的接口。而對 io_uring 應(yīng)用來說,做類似的改動是輕而 易舉的。

    以上只是一個場景,io_uring 相比 linux-aio 的 **優(yōu)勢**是能應(yīng)用于 file I/O 之外的場景。此外,它還自帶了特殊的 高性能[19] 接口,例如 buffer registration、file registration、輪詢模式等等。

    啟用 io_uring 高級特性之后,我們看到性能確實(shí)有提升:Intel Optane 設(shè)備,單個 CPU ?讀取 512 字節(jié),觀察到 5% 的性能提升。與 表 1 & 2 對得上。雖然 5% 的提升 看上去不是太大,但對于希望壓榨出硬件所有性能的數(shù)據(jù)庫來說,還是非常寶貴的。

    linux-aio:

    Throughput ? ? ? ? : ? ? ?330 MB/s
    ? ? Lat average ? ? ? ?: ? ? 1549 usec
    ? ? Lat quantile= ?0.5 : ? ? 1547 usec
    ? ? Lat quantile= 0.95 : ? ? 1694 usec
    ? ? Lat quantile= 0.99 : ? ? 1703 usec
    ? ? Lat quantile=0.999 : ? ? 1950 usec
    ? ? Lat max ? ? ? ? ? ?: ? ? 2177 usec

    io_uring, with buffer and file registration and poll:

    Throughput ? ? ? ? : ? ? ?346 MB/s
    Lat average ? ? ? ?: ? ? 1470 usec
    Lat quantile= 0.5 ?: ? ? 1468 usec
    Lat quantile= 0.95 : ? ? 1558 usec
    Lat quantile= 0.99 : ? ? 1613 usec
    Lat quantile=0.999 : ? ? 1674 usec
    Lat max ? ? ? ? ? ?: ? ? 1829 usec

    使用 1 個 CPU 從 Intel Optane 設(shè)備讀取 512 字節(jié)。1000 并發(fā)請求。linux-aio 和 io_uring basic interface 性能差異很小。? 但啟用 io_uring 高級特性后,有 5% 的性能差距。

    5 eBPF

    eBPF 也是一個 事件驅(qū)動框架(因此也是異步的),允許用戶空間程序動態(tài)向內(nèi)核注入字節(jié)碼,主要有兩個使用場景:

  • Networking:本站[20] 已經(jīng)有相當(dāng)多的文章

  • Tracing & Observability:例如 bcc[21] 等工具

  • eBPF 在內(nèi)核 ?4.9 首次引入,4.19 以后功能已經(jīng)很強(qiáng)大。更多關(guān)于 eBPF 的演進(jìn)信息,可參考:(譯)大規(guī)模微服務(wù)利器:eBPF + Kubernetes(KubeCon, 2020)。

    談到與 io_uring 的結(jié)合,就是用 bcc 之類的工具跟蹤一些 I/O 相關(guān)的內(nèi)核函數(shù),例如:

  • Trace how much time an application spends sleeping, and what led to those sleeps. (wakeuptime)

  • Find all programs in the system that reached a particular place in the code (trace)

  • Analyze network TCP throughput aggregated by subnet (tcpsubnet)

  • Measure how much time the kernel spent processing softirqs (softirqs)

  • Capture information about all short-lived files, where they come from, and for how long they were opened (filelife)

  • 6 結(jié)束語

    io_uring 和 eBPF 這兩大特性 將給 Linux 編程帶來革命性的變化。有了這兩個特性的加持,開發(fā)者就能更充分地利用 Amazon i3en meganode systems[22]之類的多核/多處理器系統(tǒng),以及 Intel Optane 持久存儲[23]之類的 us 級延遲存儲設(shè)備。

    參考資料

    • Efficient IO with io_uring[24], pdf

    • Ringing in a new asynchronous I/O API[25], lwn.net

    • The rapid growth of io_uring[26], lwn.net

    • System call API[27], manpage

    引用鏈接

    [1]

    How io_uring and eBPF Will Revolutionize Programming in Linux: https://thenewstack.io/how-io_uring-and-ebpf-will-revolutionize-programming-in-linux

    [2]

    An Introduction to the io_uring Asynchronous I/O Framework: https://medium.com/oracledevs/an-introduction-to-the-io-uring-asynchronous-i-o-framework-fad002d7dfc1

    [3]

    淺析開源項(xiàng)目之 io_uring: https://zhuanlan.zhihu.com/p/361955546

    [4]

    Is there really no asynchronous block I/O on Linux?: https://stackoverflow.com/questions/13407542/is-there-really-no-asynchronous-block-i-o-on-linux

    [5]

    thread pool: https://en.wikipedia.org/wiki/Thread_pool

    [6]

    并不想使用操作系統(tǒng)的 page cache: https://www.scylladb.com/2018/07/26/how-scylla-data-cache-works

    [7]

    Intel Optane: https://pcper.com/2018/12/intels-optane-dc-persistent-memory-dimms-push-latency-closer-to-dram

    [8]

    Linux AIO 甚至支持了: https://lwn.net/Articles/742978/

    [9]

    to support opening files asynchronously: https://lwn.net/Articles/671657/

    [10]

    很多可能的原因都會導(dǎo)致它阻塞: https://lwn.net/Articles/724198

    [11]

    aio: support for IO polling: https://lwn.net/ml/linux-fsdevel/20181221192236.12866-9-axboe@kernel.dk

    [12]

    一篇文章: https://www.scylladb.com/2018/01/07/cost-of-avoiding-a-meltdown/

    [13]

    有一次關(guān)于 async 的分享: https://www.scylladb.com/2020/03/26/avi-kivity-at-core-c-2019

    [14]

    連系統(tǒng)調(diào)用都省了: https://www.phoronix.com/scan.php?page=news_item&px=Linux-io_uring-Fast-Efficient

    [15]

    manpage: https://github.com/axboe/liburing/tree/master/man

    [16]

    liburing: https://github.com/axboe/liburing/

    [17]

    io_uring-test.c: https://github.com/axboe/liburing/blob/liburing-2.0/examples/io_uring-test.c

    [18]

    詳細(xì)解釋: https://www.mankier.com/2/io_uring_enter#Description-IOSQE_IO_LINK

    [19]

    高性能: https://www.p99conf.io/

    [20]

    本站: https://arthurchiao.art

    [21]

    bcc: https://github.com/iovisor/bcc

    [22]

    Amazon i3en meganode systems: https://www.scylladb.com/2019/05/28/aws-new-i3en-meganode

    [23]

    Intel Optane 持久存儲: https://www.scylladb.com/2017/09/27/intel-optane-scylla-providing-speed-memory-database-persistency

    [24]

    Efficient IO with io_uring: https://kernel.dk/io_uring.pdf

    [25]

    Ringing in a new asynchronous I/O API: https://lwn.net/Articles/776703/

    [26]

    The rapid growth of io_uring: https://lwn.net/Articles/810414/

    [27]

    System call API: https://github.com/axboe/liburing/tree/master/man

    原文鏈接:https://arthurchiao.art/blog/intro-to-io-uring-zh/

    - END -


    看完一鍵三連在看轉(zhuǎn)發(fā),點(diǎn)贊

    是對文章最大的贊賞,極客重生感謝你

    推薦閱讀

    滴水石穿非一日之功


    深入理解 Linux的 I/O 系統(tǒng)


    實(shí)戰(zhàn)|QUIC協(xié)議助力騰訊業(yè)務(wù)提速30%


    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 求點(diǎn)贊,在看,分享三連

    總結(jié)

    以上是生活随笔為你收集整理的深入理解Linux异步I/O框架 io_uring的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    国产香蕉尹人综合在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美肥老太牲交大战 | 国产亚洲美女精品久久久2020 | 少妇被粗大的猛进出69影院 | 日韩欧美中文字幕在线三区 | 成人精品视频一区二区 | 樱花草在线社区www | 超碰97人人做人人爱少妇 | 免费无码av一区二区 | 久久97精品久久久久久久不卡 | 精品国产aⅴ无码一区二区 | 97色伦图片97综合影院 | 性生交大片免费看女人按摩摩 | 黑人粗大猛烈进出高潮视频 | 亚洲精品www久久久 | 国内综合精品午夜久久资源 | 2020最新国产自产精品 | 在线播放亚洲第一字幕 | 国产特级毛片aaaaaa高潮流水 | 国产人妖乱国产精品人妖 | 一二三四在线观看免费视频 | 国产精品99久久精品爆乳 | 少妇无码av无码专区在线观看 | 东京热无码av男人的天堂 | 亚洲日韩av一区二区三区四区 | 熟妇人妻中文av无码 | 国产小呦泬泬99精品 | 天海翼激烈高潮到腰振不止 | 国产精品人人妻人人爽 | 中文字幕无码免费久久9一区9 | 97久久超碰中文字幕 | 午夜福利一区二区三区在线观看 | 日日摸天天摸爽爽狠狠97 | 十八禁真人啪啪免费网站 | 国产又粗又硬又大爽黄老大爷视 | 国产av剧情md精品麻豆 | 99国产精品白浆在线观看免费 | 亚洲中文无码av永久不收费 | 无遮无挡爽爽免费视频 | 亚洲区欧美区综合区自拍区 | 国产精品va在线播放 | 97人妻精品一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 久精品国产欧美亚洲色aⅴ大片 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲s码欧洲m码国产av | 大胆欧美熟妇xx | 人妻与老人中文字幕 | 中国女人内谢69xxxxxa片 | 四虎影视成人永久免费观看视频 | 亚洲精品国产a久久久久久 | 久久久久99精品国产片 | 无码精品人妻一区二区三区av | 久久精品国产一区二区三区肥胖 | 成人精品一区二区三区中文字幕 | 国产一区二区三区影院 | 亚洲国产精品久久久久久 | av在线亚洲欧洲日产一区二区 | 双乳奶水饱满少妇呻吟 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲成a人片在线观看日本 | 精品久久久中文字幕人妻 | 亚洲第一网站男人都懂 | 免费乱码人妻系列无码专区 | 人妻少妇精品视频专区 | 久久婷婷五月综合色国产香蕉 | 永久免费观看国产裸体美女 | 国产成人精品视频ⅴa片软件竹菊 | 纯爱无遮挡h肉动漫在线播放 | 国产精品18久久久久久麻辣 | 国产无av码在线观看 | 又紧又大又爽精品一区二区 | 日本熟妇人妻xxxxx人hd | 亚洲精品中文字幕 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 波多野结衣高清一区二区三区 | 日日夜夜撸啊撸 | 久久精品无码一区二区三区 | 国产成人综合美国十次 | 国产 浪潮av性色四虎 | 亚洲 日韩 欧美 成人 在线观看 | 伊人久久大香线蕉av一区二区 | 日本一卡2卡3卡四卡精品网站 | 国产午夜视频在线观看 | 亚洲乱码中文字幕在线 | 国内精品人妻无码久久久影院 | 久久精品国产一区二区三区肥胖 | 午夜成人1000部免费视频 | 少妇性l交大片欧洲热妇乱xxx | 纯爱无遮挡h肉动漫在线播放 | 任你躁在线精品免费 | 久久 国产 尿 小便 嘘嘘 | 国产在线精品一区二区高清不卡 | 丰满岳乱妇在线观看中字无码 | 香蕉久久久久久av成人 | 久久精品国产一区二区三区 | 久久久久亚洲精品中文字幕 | 亚洲中文字幕在线无码一区二区 | 色欲综合久久中文字幕网 | 日日碰狠狠躁久久躁蜜桃 | 99久久精品无码一区二区毛片 | 日韩欧美中文字幕公布 | 国产成人无码av片在线观看不卡 | 国产成人人人97超碰超爽8 | 午夜精品久久久内射近拍高清 | 曰韩无码二三区中文字幕 | 少妇被粗大的猛进出69影院 | 色婷婷综合激情综在线播放 | 国产亚洲精品久久久久久大师 | 精品无码成人片一区二区98 | 成年美女黄网站色大免费全看 | 国産精品久久久久久久 | 国产亚洲精品精品国产亚洲综合 | 国产明星裸体无码xxxx视频 | 精品国产av色一区二区深夜久久 | aⅴ在线视频男人的天堂 | 一本精品99久久精品77 | 狠狠色丁香久久婷婷综合五月 | 无码精品人妻一区二区三区av | 黄网在线观看免费网站 | 久久国内精品自在自线 | 熟妇人妻无码xxx视频 | 国产乱人无码伦av在线a | 免费无码肉片在线观看 | 中文精品久久久久人妻不卡 | 亚洲人成影院在线观看 | 三上悠亚人妻中文字幕在线 | 乱人伦人妻中文字幕无码 | 日本乱偷人妻中文字幕 | 国产特级毛片aaaaaaa高清 | 亚洲欧美日韩国产精品一区二区 | 久久精品女人的天堂av | 大乳丰满人妻中文字幕日本 | 女人被爽到呻吟gif动态图视看 | 玩弄人妻少妇500系列视频 | 99国产欧美久久久精品 | 久久综合久久自在自线精品自 | 亚洲国产欧美国产综合一区 | 国产av无码专区亚洲awww | 免费看少妇作爱视频 | 国产成人人人97超碰超爽8 | 77777熟女视频在线观看 а天堂中文在线官网 | 无码国产乱人伦偷精品视频 | 两性色午夜免费视频 | 免费国产成人高清在线观看网站 | 激情内射日本一区二区三区 | 久久精品一区二区三区四区 | 亚洲精品午夜无码电影网 | 日本精品少妇一区二区三区 | 中文字幕乱码中文乱码51精品 | 中文字幕人成乱码熟女app | 狠狠色噜噜狠狠狠7777奇米 | 欧美丰满少妇xxxx性 | 国产精品成人av在线观看 | 娇妻被黑人粗大高潮白浆 | 中文字幕日产无线码一区 | 动漫av网站免费观看 | 色五月丁香五月综合五月 | 51国偷自产一区二区三区 | 高清不卡一区二区三区 | 人妻少妇精品视频专区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 少妇的肉体aa片免费 | 偷窥村妇洗澡毛毛多 | 精品国产av色一区二区深夜久久 | 国产亚洲精品久久久ai换 | 国产av剧情md精品麻豆 | av无码不卡在线观看免费 | 又大又硬又爽免费视频 | 国产成人精品无码播放 | 天干天干啦夜天干天2017 | 秋霞成人午夜鲁丝一区二区三区 | 久久97精品久久久久久久不卡 | 国产三级精品三级男人的天堂 | 日韩人妻无码一区二区三区久久99 | 色婷婷欧美在线播放内射 | 性色av无码免费一区二区三区 | 亚洲综合在线一区二区三区 | 性色欲情网站iwww九文堂 | 亚洲精品欧美二区三区中文字幕 | 女高中生第一次破苞av | 波多野结衣一区二区三区av免费 | 女人被爽到呻吟gif动态图视看 | 国産精品久久久久久久 | 好屌草这里只有精品 | 小泽玛莉亚一区二区视频在线 | 性色欲情网站iwww九文堂 | 精品国精品国产自在久国产87 | 国产精品99爱免费视频 | 水蜜桃色314在线观看 | 红桃av一区二区三区在线无码av | 激情人妻另类人妻伦 | 成人亚洲精品久久久久 | 亚洲成a人片在线观看日本 | 老熟妇乱子伦牲交视频 | 免费人成网站视频在线观看 | 国产精品久久久久久亚洲毛片 | 精品无码成人片一区二区98 | 人人妻人人澡人人爽欧美精品 | 精品国产成人一区二区三区 | 久久精品中文字幕一区 | 亚洲成在人网站无码天堂 | 宝宝好涨水快流出来免费视频 | 亚洲日韩中文字幕在线播放 | 久久97精品久久久久久久不卡 | 亚洲午夜福利在线观看 | 国内精品一区二区三区不卡 | 久久99精品久久久久婷婷 | 成在人线av无码免观看麻豆 | 女人被爽到呻吟gif动态图视看 | 精品人妻中文字幕有码在线 | 国产无套内射久久久国产 | 日本一本二本三区免费 | 乌克兰少妇性做爰 | 99久久无码一区人妻 | 亚洲最大成人网站 | 激情综合激情五月俺也去 | 少妇人妻大乳在线视频 | 性欧美疯狂xxxxbbbb | 无码人妻精品一区二区三区不卡 | 中文字幕无码av波多野吉衣 | 日本丰满熟妇videos | 乱人伦人妻中文字幕无码久久网 | 无码一区二区三区在线观看 | 国产成人亚洲综合无码 | 久久久久久久人妻无码中文字幕爆 | 国产明星裸体无码xxxx视频 | 亚洲国产欧美日韩精品一区二区三区 | 欧美人与牲动交xxxx | 理论片87福利理论电影 | 久久aⅴ免费观看 | 日本熟妇乱子伦xxxx | 丰满肥臀大屁股熟妇激情视频 | 国产人妻精品一区二区三区 | 亚洲欧美国产精品久久 | 亚洲大尺度无码无码专区 | 中文字幕无码av波多野吉衣 | 色噜噜亚洲男人的天堂 | 中文字幕无线码 | 初尝人妻少妇中文字幕 | 国产精品无码成人午夜电影 | 久久天天躁狠狠躁夜夜免费观看 | 又色又爽又黄的美女裸体网站 | 成人欧美一区二区三区黑人免费 | 午夜熟女插插xx免费视频 | 成年女人永久免费看片 | 成人av无码一区二区三区 | 捆绑白丝粉色jk震动捧喷白浆 | 久久97精品久久久久久久不卡 | 亚洲色偷偷男人的天堂 | 亚洲自偷自拍另类第1页 | 红桃av一区二区三区在线无码av | 人人妻人人澡人人爽欧美一区九九 | 伊在人天堂亚洲香蕉精品区 | 粗大的内捧猛烈进出视频 | 少妇厨房愉情理9仑片视频 | 国产精品香蕉在线观看 | 日韩 欧美 动漫 国产 制服 | 国产免费久久久久久无码 | 亚洲狠狠色丁香婷婷综合 | 午夜精品久久久久久久久 | 国产精品久久久午夜夜伦鲁鲁 | 特级做a爰片毛片免费69 | 国产人成高清在线视频99最全资源 | 中国女人内谢69xxxx | 久久综合九色综合97网 | 少妇人妻大乳在线视频 | 成人综合网亚洲伊人 | 无码免费一区二区三区 | 久久精品99久久香蕉国产色戒 | 色综合视频一区二区三区 | 亚洲小说春色综合另类 | 欧美猛少妇色xxxxx | 搡女人真爽免费视频大全 | 亚洲中文无码av永久不收费 | 女人被男人躁得好爽免费视频 | 久久精品国产一区二区三区肥胖 | 欧美 丝袜 自拍 制服 另类 | 亚洲大尺度无码无码专区 | 日韩精品无码一本二本三本色 | 欧美老妇交乱视频在线观看 | 久久国产精品_国产精品 | 久久成人a毛片免费观看网站 | 性生交大片免费看女人按摩摩 | 久久久久se色偷偷亚洲精品av | 亚洲熟妇色xxxxx亚洲 | 亚洲第一无码av无码专区 | 高潮毛片无遮挡高清免费 | 18禁黄网站男男禁片免费观看 | 国产精品无码一区二区桃花视频 | 久9re热视频这里只有精品 | 97精品人妻一区二区三区香蕉 | 18精品久久久无码午夜福利 | 久久久久99精品成人片 | 欧美性色19p | 亚洲国产精华液网站w | 日本va欧美va欧美va精品 | 亚洲国产成人a精品不卡在线 | 国产精品18久久久久久麻辣 | 国内精品久久毛片一区二区 | 纯爱无遮挡h肉动漫在线播放 | 久久综合狠狠综合久久综合88 | 精品一区二区三区无码免费视频 | 野外少妇愉情中文字幕 | 国产无遮挡又黄又爽又色 | 国产精品久久久久久久影院 | 亚洲乱亚洲乱妇50p | 成人免费无码大片a毛片 | 99久久婷婷国产综合精品青草免费 | 动漫av一区二区在线观看 | 性欧美牲交xxxxx视频 | 中文字幕无码av波多野吉衣 | 久久久久久九九精品久 | 久久午夜无码鲁丝片秋霞 | 亚洲国产精品无码久久久久高潮 | 无码人妻出轨黑人中文字幕 | 丰满诱人的人妻3 | 国产人妻精品午夜福利免费 | 无遮挡啪啪摇乳动态图 | 天天躁夜夜躁狠狠是什么心态 | 性生交片免费无码看人 | 亚洲性无码av中文字幕 | 乱码av麻豆丝袜熟女系列 | 亚洲日韩av一区二区三区中文 | 国内精品久久久久久中文字幕 | 无码人妻av免费一区二区三区 | 午夜福利不卡在线视频 | 18精品久久久无码午夜福利 | 亚洲aⅴ无码成人网站国产app | 性生交大片免费看女人按摩摩 | √天堂资源地址中文在线 | 日韩精品成人一区二区三区 | √天堂资源地址中文在线 | 亚洲中文字幕va福利 | 欧美人与善在线com | 久久综合久久自在自线精品自 | 午夜精品久久久久久久久 | 亚洲色欲久久久综合网东京热 | 亚洲а∨天堂久久精品2021 | 色情久久久av熟女人妻网站 | 亚洲aⅴ无码成人网站国产app | 最近的中文字幕在线看视频 | 国产精品亚洲lv粉色 | 国内揄拍国内精品人妻 | 帮老师解开蕾丝奶罩吸乳网站 | 乱码av麻豆丝袜熟女系列 | 欧美日本免费一区二区三区 | 玩弄少妇高潮ⅹxxxyw | 亚洲色www成人永久网址 | 亚洲成av人片在线观看无码不卡 | 人人爽人人澡人人人妻 | 欧美日韩人成综合在线播放 | 亚洲成a人片在线观看无码 | 人妻熟女一区 | 欧美怡红院免费全部视频 | 无码国产激情在线观看 | 国产办公室秘书无码精品99 | 性欧美疯狂xxxxbbbb | 亚洲理论电影在线观看 | 亚洲综合无码久久精品综合 | 少妇人妻av毛片在线看 | 欧洲熟妇色 欧美 | 欧美日韩综合一区二区三区 | 婷婷色婷婷开心五月四房播播 | 久久久精品欧美一区二区免费 | 99久久精品国产一区二区蜜芽 | 日日噜噜噜噜夜夜爽亚洲精品 | 宝宝好涨水快流出来免费视频 | 在线观看国产一区二区三区 | 无套内谢老熟女 | 无码纯肉视频在线观看 | 55夜色66夜色国产精品视频 | аⅴ资源天堂资源库在线 | 久久久精品人妻久久影视 | 国产精品内射视频免费 | 欧美 日韩 亚洲 在线 | 久久久久成人精品免费播放动漫 | 亚洲精品综合五月久久小说 | 人人妻人人藻人人爽欧美一区 | 中文字幕人成乱码熟女app | 日韩av无码中文无码电影 | 奇米影视7777久久精品人人爽 | 国产乱人无码伦av在线a | 亚洲国产高清在线观看视频 | 日本熟妇乱子伦xxxx | 好屌草这里只有精品 | 一本大道久久东京热无码av | 久久天天躁夜夜躁狠狠 | 亚洲色偷偷偷综合网 | 久久久久久av无码免费看大片 | 成年美女黄网站色大免费视频 | 亚洲熟熟妇xxxx | 国产亚av手机在线观看 | 国产精品无码久久av | 国产深夜福利视频在线 | 精品熟女少妇av免费观看 | 国产免费久久精品国产传媒 | 国产精品对白交换视频 | 国产精品亚洲专区无码不卡 | 99er热精品视频 | 一本色道婷婷久久欧美 | 夫妻免费无码v看片 | 人妻无码久久精品人妻 | 欧美人与动性行为视频 | 国产综合在线观看 | 亚洲男女内射在线播放 | 欧美zoozzooz性欧美 | 99久久婷婷国产综合精品青草免费 | 欧美乱妇无乱码大黄a片 | 亚洲の无码国产の无码影院 | 成人一区二区免费视频 | 娇妻被黑人粗大高潮白浆 | 黑人大群体交免费视频 | 中文字幕久久久久人妻 | 天天躁日日躁狠狠躁免费麻豆 | a片免费视频在线观看 | 欧洲vodafone精品性 | 国产亚洲精品久久久ai换 | 亚洲の无码国产の无码步美 | 成 人影片 免费观看 | 综合网日日天干夜夜久久 | 国产欧美熟妇另类久久久 | 国产精品第一区揄拍无码 | 国产精品毛片一区二区 | 色爱情人网站 | 亚洲精品美女久久久久久久 | 少妇被黑人到高潮喷出白浆 | 国产精品爱久久久久久久 | 国产情侣作爱视频免费观看 | 一本色道久久综合狠狠躁 | а√天堂www在线天堂小说 | 老头边吃奶边弄进去呻吟 | 国产精品久久久午夜夜伦鲁鲁 | 国产做国产爱免费视频 | 欧美xxxx黑人又粗又长 | 国产熟妇另类久久久久 | 99久久人妻精品免费二区 | 亚拍精品一区二区三区探花 | 亚洲爆乳精品无码一区二区三区 | 人妻体内射精一区二区三四 | 国产卡一卡二卡三 | 思思久久99热只有频精品66 | 色综合久久久久综合一本到桃花网 | 人人爽人人爽人人片av亚洲 | 曰韩无码二三区中文字幕 | 强伦人妻一区二区三区视频18 | 国产精品亚洲综合色区韩国 | 久久无码中文字幕免费影院蜜桃 | 国产精品无套呻吟在线 | 日韩亚洲欧美中文高清在线 | 久久精品中文闷骚内射 | 狠狠亚洲超碰狼人久久 | 18精品久久久无码午夜福利 | 国产偷抇久久精品a片69 | 97se亚洲精品一区 | 真人与拘做受免费视频 | 波多野结衣乳巨码无在线观看 | 丰满肥臀大屁股熟妇激情视频 | 国产精品自产拍在线观看 | 国产偷国产偷精品高清尤物 | 99久久精品日本一区二区免费 | 亚洲午夜福利在线观看 | 久久久av男人的天堂 | 久久精品国产精品国产精品污 | 国产亚av手机在线观看 | 97夜夜澡人人爽人人喊中国片 | 久久99久久99精品中文字幕 | 亚洲熟悉妇女xxx妇女av | 国产成人无码一二三区视频 | 久久综合给久久狠狠97色 | www一区二区www免费 | 国产精品久久久午夜夜伦鲁鲁 | 成人aaa片一区国产精品 | 99久久精品国产一区二区蜜芽 | 久久精品国产精品国产精品污 | 亚洲第一网站男人都懂 | 丰满少妇弄高潮了www | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 香蕉久久久久久av成人 | 欧美一区二区三区视频在线观看 | 又粗又大又硬又长又爽 | 国产黄在线观看免费观看不卡 | 好屌草这里只有精品 | 精品国产国产综合精品 | 精品国产av色一区二区深夜久久 | 牛和人交xxxx欧美 | 又大又硬又黄的免费视频 | 麻豆av传媒蜜桃天美传媒 | 成人影院yy111111在线观看 | 男人扒开女人内裤强吻桶进去 | 女高中生第一次破苞av | 又大又硬又黄的免费视频 | 久久亚洲精品成人无码 | 国产成人人人97超碰超爽8 | 亚洲の无码国产の无码步美 | 国产成人精品一区二区在线小狼 | 亚洲 a v无 码免 费 成 人 a v | 高清国产亚洲精品自在久久 | 国产成人无码a区在线观看视频app | 久久国产精品偷任你爽任你 | 亚洲日韩av一区二区三区四区 | 国产无遮挡又黄又爽又色 | 久久精品视频在线看15 | www国产亚洲精品久久网站 | 国色天香社区在线视频 | 成人综合网亚洲伊人 | 人妻少妇精品无码专区二区 | 人人妻人人澡人人爽人人精品 | 又大又紧又粉嫩18p少妇 | 丰满护士巨好爽好大乳 | 久久婷婷五月综合色国产香蕉 | 欧美乱妇无乱码大黄a片 | 久久国内精品自在自线 | 老司机亚洲精品影院无码 | 2019nv天堂香蕉在线观看 | 日日摸夜夜摸狠狠摸婷婷 | 女人和拘做爰正片视频 | 欧美 丝袜 自拍 制服 另类 | 丰满护士巨好爽好大乳 | 亚洲人亚洲人成电影网站色 | 国产精品久久久午夜夜伦鲁鲁 | 天天拍夜夜添久久精品大 | 无遮无挡爽爽免费视频 | 精品午夜福利在线观看 | 精品国产成人一区二区三区 | 国产97色在线 | 免 | 亚洲成色在线综合网站 | 精品人妻人人做人人爽夜夜爽 | 在线观看免费人成视频 | 少妇一晚三次一区二区三区 | 国产综合久久久久鬼色 | 美女毛片一区二区三区四区 | 亚洲精品国偷拍自产在线麻豆 | 日韩精品无码免费一区二区三区 | 亚洲中文字幕久久无码 | 亚洲日韩av一区二区三区四区 | 中文字幕无线码 | 日本爽爽爽爽爽爽在线观看免 | 国产偷国产偷精品高清尤物 | 波多野结衣av在线观看 | 18禁黄网站男男禁片免费观看 | 99久久无码一区人妻 | 激情爆乳一区二区三区 | 亚洲精品成人福利网站 | 国产福利视频一区二区 | 极品尤物被啪到呻吟喷水 | 日本一本二本三区免费 | 日本高清一区免费中文视频 | 国产高清av在线播放 | 国产乡下妇女做爰 | 四十如虎的丰满熟妇啪啪 | 欧美真人作爱免费视频 | 亚洲春色在线视频 | 一二三四在线观看免费视频 | 夜夜高潮次次欢爽av女 | 久久99精品国产麻豆蜜芽 | 国精产品一品二品国精品69xx | 亚洲人成人无码网www国产 | 中文字幕久久久久人妻 | 国产精品鲁鲁鲁 | 亚洲精品国产精品乱码视色 | 成人综合网亚洲伊人 | 久久精品女人天堂av免费观看 | 中文字幕乱码人妻二区三区 | 丁香啪啪综合成人亚洲 | 无码成人精品区在线观看 | 国产午夜福利100集发布 | 成熟妇人a片免费看网站 | 中文字幕人妻丝袜二区 | 扒开双腿吃奶呻吟做受视频 | 国产精品国产三级国产专播 | 日日麻批免费40分钟无码 | 国产亲子乱弄免费视频 | 精品水蜜桃久久久久久久 | 欧美丰满熟妇xxxx性ppx人交 | 色欲久久久天天天综合网精品 | 亚洲 激情 小说 另类 欧美 | 精品久久久久久亚洲精品 | 日韩欧美中文字幕在线三区 | 久久人人爽人人爽人人片av高清 | 精品国产国产综合精品 | 欧美国产日韩亚洲中文 | 一二三四在线观看免费视频 | 乱人伦人妻中文字幕无码久久网 | 国产精品无码一区二区桃花视频 | 国产色视频一区二区三区 | 国产口爆吞精在线视频 | 精品人妻av区 | 天天摸天天碰天天添 | 婷婷丁香五月天综合东京热 | 欧美丰满熟妇xxxx性ppx人交 | 久久成人a毛片免费观看网站 | 中文精品久久久久人妻不卡 | 久久国产精品偷任你爽任你 | 中文字幕 亚洲精品 第1页 | 初尝人妻少妇中文字幕 | 亚洲 欧美 激情 小说 另类 | 欧美大屁股xxxxhd黑色 | 无码乱肉视频免费大全合集 | 精品少妇爆乳无码av无码专区 | 国产av无码专区亚洲a∨毛片 | 国产一区二区三区四区五区加勒比 | 漂亮人妻洗澡被公强 日日躁 | 国产高清av在线播放 | 在线视频网站www色 | 亚洲国产av精品一区二区蜜芽 | 国产黄在线观看免费观看不卡 | 日韩精品久久久肉伦网站 | 黄网在线观看免费网站 | 亲嘴扒胸摸屁股激烈网站 | 亚洲成av人综合在线观看 | 丰满少妇高潮惨叫视频 | 国产免费无码一区二区视频 | 少妇被黑人到高潮喷出白浆 | 日本熟妇浓毛 | 欧美老妇与禽交 | 亚洲色www成人永久网址 | 亚洲综合无码一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 色欲久久久天天天综合网精品 | 1000部啪啪未满十八勿入下载 | 久久综合久久自在自线精品自 | 网友自拍区视频精品 | 国产成人精品三级麻豆 | 国产在线aaa片一区二区99 | 国产手机在线αⅴ片无码观看 | 性欧美疯狂xxxxbbbb | 一个人看的视频www在线 | 荫蒂被男人添的好舒服爽免费视频 | 67194成是人免费无码 | 国精产品一品二品国精品69xx | 国产一区二区三区精品视频 | 久久aⅴ免费观看 | 中文字幕精品av一区二区五区 | 青春草在线视频免费观看 | 午夜精品一区二区三区的区别 | 又紧又大又爽精品一区二区 | 激情内射日本一区二区三区 | 日韩欧美群交p片內射中文 | 无码成人精品区在线观看 | аⅴ资源天堂资源库在线 | 国产午夜亚洲精品不卡 | 国产va免费精品观看 | 中文字幕av伊人av无码av | 国产高清av在线播放 | 一本色道久久综合亚洲精品不卡 | 色妞www精品免费视频 | 国产真实伦对白全集 | 亚洲成熟女人毛毛耸耸多 | 欧美人与禽zoz0性伦交 | 少妇人妻大乳在线视频 | 岛国片人妻三上悠亚 | 少妇无码一区二区二三区 | 最近的中文字幕在线看视频 | 久久国产精品_国产精品 | 中文字幕无码日韩欧毛 | 在线看片无码永久免费视频 | 天天躁日日躁狠狠躁免费麻豆 | 俺去俺来也在线www色官网 | 人人超人人超碰超国产 | 国内精品久久久久久中文字幕 | 国产色在线 | 国产 | 国产精品亚洲五月天高清 | 97久久国产亚洲精品超碰热 | 国产女主播喷水视频在线观看 | 免费国产成人高清在线观看网站 | 国产无遮挡吃胸膜奶免费看 | 亚洲综合无码一区二区三区 | 亚洲精品久久久久久一区二区 | 亚洲s色大片在线观看 | 99国产精品白浆在线观看免费 | 国产成人精品三级麻豆 | 久久伊人色av天堂九九小黄鸭 | 精品一区二区三区无码免费视频 | 丁香啪啪综合成人亚洲 | 久久午夜无码鲁丝片 | 国产办公室秘书无码精品99 | 伊人久久大香线蕉av一区二区 | 国精产品一区二区三区 | 久久久久国色av免费观看性色 | 日本护士xxxxhd少妇 | 国产精品毛多多水多 | 精品国偷自产在线 | 国产人妻精品一区二区三区不卡 | 西西人体www44rt大胆高清 | 日韩精品一区二区av在线 | 无码纯肉视频在线观看 | 国产另类ts人妖一区二区 | 无码人妻丰满熟妇区五十路百度 | 成人三级无码视频在线观看 | www国产亚洲精品久久久日本 | 狂野欧美激情性xxxx | 青青青手机频在线观看 | 美女扒开屁股让男人桶 | 鲁大师影院在线观看 | 久久国产精品萌白酱免费 | 图片小说视频一区二区 | 久久国语露脸国产精品电影 | 特黄特色大片免费播放器图片 | 未满小14洗澡无码视频网站 | 丰满少妇熟乱xxxxx视频 | 久久久无码中文字幕久... | 少妇性俱乐部纵欲狂欢电影 | 国产人妻久久精品二区三区老狼 | 国产亚洲精品久久久久久久久动漫 | 乌克兰少妇性做爰 | 久久久中文字幕日本无吗 | 亚洲区欧美区综合区自拍区 | 亚洲欧洲日本综合aⅴ在线 | 又大又硬又爽免费视频 | 免费观看的无遮挡av | 成人精品视频一区二区 | 无码精品人妻一区二区三区av | 丝袜 中出 制服 人妻 美腿 | 无码国模国产在线观看 | 久久www免费人成人片 | 亚洲啪av永久无码精品放毛片 | 亚洲国产精品无码久久久久高潮 | 亚洲性无码av中文字幕 | 玩弄人妻少妇500系列视频 | 欧美变态另类xxxx | 久久人妻内射无码一区三区 | 欧美日韩人成综合在线播放 | 久久人人爽人人人人片 | 国产乱人伦av在线无码 | 曰韩少妇内射免费播放 | 东京无码熟妇人妻av在线网址 | 欧美阿v高清资源不卡在线播放 | 亚洲成在人网站无码天堂 | 伊人久久大香线蕉av一区二区 | 国产高清av在线播放 | 亚洲国产精品一区二区第一页 | 狠狠色欧美亚洲狠狠色www | 欧美黑人巨大xxxxx | а√天堂www在线天堂小说 | 亚洲无人区一区二区三区 | 男女爱爱好爽视频免费看 | 国产精品怡红院永久免费 | 国产偷抇久久精品a片69 | 中文字幕无码免费久久99 | 亚洲国产精品无码一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 午夜成人1000部免费视频 | 真人与拘做受免费视频 | 日本一卡2卡3卡四卡精品网站 | 中文字幕人成乱码熟女app | 麻豆av传媒蜜桃天美传媒 | 久久久久99精品成人片 | 亚洲人成网站色7799 | 成人免费视频视频在线观看 免费 | 欧美性生交活xxxxxdddd | 国产成人午夜福利在线播放 | 欧美 日韩 亚洲 在线 | 天天拍夜夜添久久精品 | 国产午夜亚洲精品不卡下载 | 日日麻批免费40分钟无码 | 久久成人a毛片免费观看网站 | 亚洲人成网站色7799 | 成人精品天堂一区二区三区 | 色偷偷人人澡人人爽人人模 | 亚洲国产精品久久久久久 | 亚洲国产午夜精品理论片 | 久久天天躁狠狠躁夜夜免费观看 | 精品久久久久久亚洲精品 | 国产无套内射久久久国产 | 国产亚洲日韩欧美另类第八页 | 无码帝国www无码专区色综合 | av无码不卡在线观看免费 | 女人被男人躁得好爽免费视频 | 18禁黄网站男男禁片免费观看 | 日本饥渴人妻欲求不满 | 精品aⅴ一区二区三区 | 樱花草在线社区www | 老头边吃奶边弄进去呻吟 | 麻豆国产丝袜白领秘书在线观看 | a在线亚洲男人的天堂 | 国产麻豆精品一区二区三区v视界 | 精品一区二区不卡无码av | 亚洲 日韩 欧美 成人 在线观看 | 国产精品igao视频网 | 激情亚洲一区国产精品 | 国产精品视频免费播放 | аⅴ资源天堂资源库在线 | 国产精品鲁鲁鲁 | 婷婷六月久久综合丁香 | 亚洲s色大片在线观看 | 亚洲色大成网站www国产 | 亚洲欧美精品伊人久久 | 人妻少妇精品久久 | 日本精品人妻无码免费大全 | 丰满护士巨好爽好大乳 | 国产97人人超碰caoprom | yw尤物av无码国产在线观看 | 国产高清av在线播放 | 在线成人www免费观看视频 | 国产精品办公室沙发 | 又紧又大又爽精品一区二区 | 窝窝午夜理论片影院 | 久久久久se色偷偷亚洲精品av | 永久免费观看美女裸体的网站 | 国产做国产爱免费视频 | 久久97精品久久久久久久不卡 | 亚洲s码欧洲m码国产av | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲七七久久桃花影院 | 日本熟妇大屁股人妻 | 精品水蜜桃久久久久久久 | 人妻插b视频一区二区三区 | 午夜男女很黄的视频 | 亚洲日韩av片在线观看 | 精品国精品国产自在久国产87 | 国产真实伦对白全集 | 国产成人无码午夜视频在线观看 | 亚洲精品欧美二区三区中文字幕 | 夜先锋av资源网站 | 女人色极品影院 | 国产亚洲tv在线观看 | 大地资源网第二页免费观看 | 亚洲乱码中文字幕在线 | 欧美成人高清在线播放 | 日本va欧美va欧美va精品 | 丝袜美腿亚洲一区二区 | 久久伊人色av天堂九九小黄鸭 | 蜜桃无码一区二区三区 | 国内精品久久久久久中文字幕 | 一二三四社区在线中文视频 | 成人三级无码视频在线观看 | 久久国语露脸国产精品电影 | 欧美日韩在线亚洲综合国产人 | 亚洲男人av香蕉爽爽爽爽 | 日本一卡2卡3卡四卡精品网站 | 亚洲中文字幕无码中字 | 樱花草在线社区www | 亚洲人成网站免费播放 | 亚洲午夜久久久影院 | 又大又黄又粗又爽的免费视频 | 国产精品亚洲一区二区三区喷水 | 少妇无套内谢久久久久 | 超碰97人人做人人爱少妇 | 伊人久久大香线焦av综合影院 | 国产精品人人爽人人做我的可爱 | 国产精品对白交换视频 | 中文字幕 人妻熟女 | 色婷婷香蕉在线一区二区 | 日韩av无码中文无码电影 | 久久久久久久久蜜桃 | 国产疯狂伦交大片 | 精品国产一区二区三区av 性色 | 青青久在线视频免费观看 | 色综合久久久无码中文字幕 | 黑森林福利视频导航 | 牲欲强的熟妇农村老妇女 | 日本又色又爽又黄的a片18禁 | 久久aⅴ免费观看 | 色综合久久88色综合天天 | 无码一区二区三区在线 | 午夜男女很黄的视频 | 麻豆人妻少妇精品无码专区 | 狠狠色噜噜狠狠狠7777奇米 | 免费人成在线视频无码 | 亚洲成a人片在线观看无码 | 日日摸天天摸爽爽狠狠97 | 久久久久se色偷偷亚洲精品av | 88国产精品欧美一区二区三区 | 99久久精品日本一区二区免费 | 真人与拘做受免费视频一 | 日本高清一区免费中文视频 | 中国大陆精品视频xxxx | 久久久久久国产精品无码下载 | 99久久人妻精品免费二区 | 丝袜 中出 制服 人妻 美腿 | 国精产品一区二区三区 | 少妇激情av一区二区 | 黑人大群体交免费视频 | 人妻无码αv中文字幕久久琪琪布 | 蜜臀av无码人妻精品 | 99久久99久久免费精品蜜桃 | 国产成人一区二区三区在线观看 | 亚洲人成网站在线播放942 | 鲁一鲁av2019在线 | 日本一卡二卡不卡视频查询 | 亚洲国精产品一二二线 | 久久99精品久久久久久动态图 | 国产亚洲精品久久久久久国模美 | 波多野结衣一区二区三区av免费 | 狠狠综合久久久久综合网 | 性生交片免费无码看人 | 国产极品视觉盛宴 | 精品久久8x国产免费观看 | 亚洲中文字幕va福利 | 又大又紧又粉嫩18p少妇 | 精品午夜福利在线观看 | 伦伦影院午夜理论片 | 中文亚洲成a人片在线观看 | 永久免费观看美女裸体的网站 | 日本欧美一区二区三区乱码 | 丰满少妇女裸体bbw | 4hu四虎永久在线观看 | 在线观看免费人成视频 | 18禁黄网站男男禁片免费观看 | 中文字幕人成乱码熟女app | 国产精品久久国产精品99 | 综合激情五月综合激情五月激情1 | 夜夜夜高潮夜夜爽夜夜爰爰 | 中文字幕av无码一区二区三区电影 | 麻豆av传媒蜜桃天美传媒 | 亚洲精品国产第一综合99久久 | 日日碰狠狠躁久久躁蜜桃 | 黑人大群体交免费视频 | 秋霞特色aa大片 | 少妇人妻偷人精品无码视频 | 女高中生第一次破苞av | 台湾无码一区二区 | 51国偷自产一区二区三区 | 色一情一乱一伦一视频免费看 | 国产精品18久久久久久麻辣 | 亚洲欧美日韩国产精品一区二区 | 精品日本一区二区三区在线观看 | aa片在线观看视频在线播放 | 中文字幕无线码免费人妻 | 亚洲精品成a人在线观看 | 亚洲春色在线视频 | 中文字幕乱码中文乱码51精品 | 永久免费观看国产裸体美女 | 狠狠亚洲超碰狼人久久 | 无码毛片视频一区二区本码 | 人人爽人人爽人人片av亚洲 | 婷婷丁香六月激情综合啪 | 无码人妻精品一区二区三区下载 | 国产亚洲精品久久久久久 | 国产精品亚洲综合色区韩国 | 亚洲国产精品一区二区第一页 | 麻豆果冻传媒2021精品传媒一区下载 | 色综合久久网 | 成熟女人特级毛片www免费 | 精品乱子伦一区二区三区 | 麻豆人妻少妇精品无码专区 | 乱中年女人伦av三区 | 久久成人a毛片免费观看网站 | 亚洲精品久久久久久久久久久 | 色老头在线一区二区三区 | 中文字幕无码av激情不卡 | 亚洲精品久久久久avwww潮水 | 国产suv精品一区二区五 | 人人妻人人澡人人爽精品欧美 | 国产成人无码a区在线观看视频app | 蜜桃视频韩日免费播放 | 在线欧美精品一区二区三区 | 成人欧美一区二区三区黑人 | 亚洲熟女一区二区三区 | 日本熟妇浓毛 | 水蜜桃av无码 | 国产精品多人p群无码 | 午夜福利试看120秒体验区 | 老子影院午夜伦不卡 | 日韩欧美中文字幕在线三区 | 国产成人无码一二三区视频 | 国产成人无码av一区二区 | 水蜜桃色314在线观看 | 国产精品久久久久7777 | 双乳奶水饱满少妇呻吟 | 国产乱人无码伦av在线a | 成在人线av无码免费 | 国产精品多人p群无码 | 对白脏话肉麻粗话av | 伊人久久大香线蕉午夜 | 亚洲欧美色中文字幕在线 | 日本精品高清一区二区 | 99久久婷婷国产综合精品青草免费 | 综合网日日天干夜夜久久 | 欧美激情一区二区三区成人 | 久久亚洲国产成人精品性色 | 精品人妻人人做人人爽夜夜爽 | 丰满妇女强制高潮18xxxx | 日韩精品无码一本二本三本色 | 99久久精品日本一区二区免费 | 给我免费的视频在线观看 | 久久综合久久自在自线精品自 | 日本护士xxxxhd少妇 | 中文无码成人免费视频在线观看 | 嫩b人妻精品一区二区三区 | 67194成是人免费无码 | 国产人妻大战黑人第1集 | 亚洲乱码国产乱码精品精 | 精品久久久久久人妻无码中文字幕 | 一二三四社区在线中文视频 | 沈阳熟女露脸对白视频 | 欧美老熟妇乱xxxxx | 国产亚洲精品久久久久久久久动漫 | 亚洲乱码日产精品bd | 中文字幕 人妻熟女 | 性色av无码免费一区二区三区 | 少妇的肉体aa片免费 | 日韩精品无码一区二区中文字幕 | 亚洲综合另类小说色区 | 欧美日韩在线亚洲综合国产人 | 爽爽影院免费观看 | 欧美丰满少妇xxxx性 | 草草网站影院白丝内射 | 午夜福利不卡在线视频 | 一二三四社区在线中文视频 | 亚洲国产精品美女久久久久 | 精品亚洲韩国一区二区三区 | 国产内射爽爽大片视频社区在线 | 思思久久99热只有频精品66 | 欧美性猛交xxxx富婆 | 国产激情精品一区二区三区 | 国产一区二区三区四区五区加勒比 | 国产成人精品必看 | 久久久久久久人妻无码中文字幕爆 | 国产性生大片免费观看性 | 精品国偷自产在线 | 一本色道婷婷久久欧美 | 奇米影视7777久久精品人人爽 | www国产亚洲精品久久久日本 | 疯狂三人交性欧美 | 亚洲人成人无码网www国产 | 377p欧洲日本亚洲大胆 | 人人澡人摸人人添 | 天堂亚洲2017在线观看 | 国产精品无码一区二区桃花视频 | 亚洲男人av香蕉爽爽爽爽 | 亚洲 高清 成人 动漫 | 成人片黄网站色大片免费观看 | 99视频精品全部免费免费观看 | 欧美怡红院免费全部视频 | 免费播放一区二区三区 | 狠狠色噜噜狠狠狠7777奇米 | 少妇高潮喷潮久久久影院 | 久久99久久99精品中文字幕 | 国产熟妇高潮叫床视频播放 | 成人精品视频一区二区三区尤物 | 日韩精品无码免费一区二区三区 | 小sao货水好多真紧h无码视频 | 中文字幕人妻丝袜二区 | 在线a亚洲视频播放在线观看 | 在线 国产 欧美 亚洲 天堂 | 精品无码一区二区三区爱欲 | 学生妹亚洲一区二区 | 俄罗斯老熟妇色xxxx | 丰满人妻翻云覆雨呻吟视频 | 国产精品嫩草久久久久 | 精品久久久中文字幕人妻 | 婷婷丁香五月天综合东京热 | 精品人妻中文字幕有码在线 | 中文字幕+乱码+中文字幕一区 | 高潮毛片无遮挡高清免费 | 一个人看的视频www在线 | 国产亚洲精品久久久久久 | 99久久精品国产一区二区蜜芽 | 欧美国产日韩亚洲中文 | 亚洲精品综合五月久久小说 | 亚洲乱亚洲乱妇50p | 波多野结衣av一区二区全免费观看 | 亚洲熟妇色xxxxx欧美老妇 | 青青青爽视频在线观看 | 精品国偷自产在线视频 | 久久久久免费看成人影片 | 亚洲日韩av一区二区三区中文 | 99视频精品全部免费免费观看 | 波多野结衣乳巨码无在线观看 | 成人综合网亚洲伊人 | 99精品无人区乱码1区2区3区 | 熟妇人妻无码xxx视频 | 亚洲乱亚洲乱妇50p | 少妇一晚三次一区二区三区 | 久久久久久久女国产乱让韩 | 老太婆性杂交欧美肥老太 | 精品久久久无码中文字幕 | 欧美精品国产综合久久 | 97无码免费人妻超级碰碰夜夜 | 亚洲精品国偷拍自产在线麻豆 | 全球成人中文在线 | 久久天天躁夜夜躁狠狠 | 97精品国产97久久久久久免费 | 麻豆国产97在线 | 欧洲 | 精品成人av一区二区三区 | aa片在线观看视频在线播放 | 无码人妻精品一区二区三区下载 | 欧美zoozzooz性欧美 | 图片区 小说区 区 亚洲五月 | 国产精品多人p群无码 | 搡女人真爽免费视频大全 | 久久久久成人片免费观看蜜芽 | 夫妻免费无码v看片 | 国产精品国产三级国产专播 | 无码国模国产在线观看 | 精品欧洲av无码一区二区三区 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲国产精品无码久久久久高潮 | 亚洲一区二区观看播放 | 奇米影视888欧美在线观看 | 日韩 欧美 动漫 国产 制服 | 性开放的女人aaa片 | 色 综合 欧美 亚洲 国产 | 无码国产乱人伦偷精品视频 | 四十如虎的丰满熟妇啪啪 | 日韩av无码中文无码电影 | 色欲久久久天天天综合网精品 | 偷窥日本少妇撒尿chinese | 色情久久久av熟女人妻网站 | 天堂а√在线地址中文在线 | 国产九九九九九九九a片 | 亚洲码国产精品高潮在线 | 性色欲网站人妻丰满中文久久不卡 | 国产精品香蕉在线观看 | 亚洲 另类 在线 欧美 制服 | 亚洲精品中文字幕乱码 | 婷婷丁香六月激情综合啪 | 中文精品无码中文字幕无码专区 | 久久久av男人的天堂 | 久久午夜无码鲁丝片 | 成人亚洲精品久久久久软件 | 激情国产av做激情国产爱 | 四虎永久在线精品免费网址 | 女高中生第一次破苞av | 色欲人妻aaaaaaa无码 | 福利一区二区三区视频在线观看 | 久久久精品国产sm最大网站 | 国产亚洲欧美在线专区 | 大乳丰满人妻中文字幕日本 | 欧美性生交活xxxxxdddd | 国产成人无码av一区二区 | 男女猛烈xx00免费视频试看 | 国产精华av午夜在线观看 | 国产精品无套呻吟在线 | 久久久久亚洲精品中文字幕 | 人妻插b视频一区二区三区 | 欧美国产日韩亚洲中文 | 中文亚洲成a人片在线观看 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲国产精品无码一区二区三区 | 久久熟妇人妻午夜寂寞影院 | 爆乳一区二区三区无码 | 蜜桃视频插满18在线观看 | 亚洲精品美女久久久久久久 | av无码电影一区二区三区 | 成人免费无码大片a毛片 | 精品欧美一区二区三区久久久 | 国产午夜无码精品免费看 | www国产精品内射老师 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产精品久久久久9999小说 | 精品国产aⅴ无码一区二区 | 丁香啪啪综合成人亚洲 | 男女猛烈xx00免费视频试看 | 国产亚洲视频中文字幕97精品 | 国产成人综合色在线观看网站 | 亚洲gv猛男gv无码男同 | 国产成人综合美国十次 | 国产又爽又猛又粗的视频a片 | 国产综合色产在线精品 | 无码人妻丰满熟妇区五十路百度 | 国产熟女一区二区三区四区五区 | 少妇性l交大片欧洲热妇乱xxx | 男人和女人高潮免费网站 | 永久免费观看国产裸体美女 | 久久精品国产99精品亚洲 | 激情五月综合色婷婷一区二区 | 精品国产精品久久一区免费式 | 伊人色综合久久天天小片 | 粗大的内捧猛烈进出视频 | 久久久久av无码免费网 | 亚洲精品成人av在线 | ass日本丰满熟妇pics | 午夜精品久久久内射近拍高清 | 无遮挡啪啪摇乳动态图 | 中文字幕色婷婷在线视频 | 国产国产精品人在线视 | 精品人妻人人做人人爽夜夜爽 | 国产激情艳情在线看视频 | 免费人成在线观看网站 | 亚洲 欧美 激情 小说 另类 | 窝窝午夜理论片影院 | 午夜福利试看120秒体验区 | 午夜福利不卡在线视频 | 香蕉久久久久久av成人 | 无遮挡啪啪摇乳动态图 | av在线亚洲欧洲日产一区二区 | 亚洲男女内射在线播放 | 天堂久久天堂av色综合 | 久久人妻内射无码一区三区 | 国产精品无套呻吟在线 | av人摸人人人澡人人超碰下载 | 亚洲人成网站免费播放 | 樱花草在线播放免费中文 | 日韩人妻无码一区二区三区久久99 | 蜜桃av抽搐高潮一区二区 | 久久久久se色偷偷亚洲精品av | 免费观看激色视频网站 | 国产在线aaa片一区二区99 | a在线亚洲男人的天堂 | 一个人看的视频www在线 | 人人爽人人澡人人高潮 | 精品国产一区av天美传媒 | 国产av一区二区三区最新精品 | 99麻豆久久久国产精品免费 | 久久久久免费看成人影片 | 免费男性肉肉影院 | 免费无码一区二区三区蜜桃大 | 亚洲区小说区激情区图片区 | 国色天香社区在线视频 | 人人澡人人透人人爽 | 国产亚洲日韩欧美另类第八页 | 女人被男人爽到呻吟的视频 | 久久人人爽人人爽人人片ⅴ | 无码人妻丰满熟妇区五十路百度 | 天天做天天爱天天爽综合网 | 奇米影视7777久久精品 | 欧美兽交xxxx×视频 | 国产精品办公室沙发 | 夜先锋av资源网站 | 对白脏话肉麻粗话av | 麻豆人妻少妇精品无码专区 | 一本久久a久久精品亚洲 | 丰满肥臀大屁股熟妇激情视频 | 性欧美牲交在线视频 | 国产激情精品一区二区三区 | 免费国产黄网站在线观看 | 国产9 9在线 | 中文 | 俄罗斯老熟妇色xxxx | 一本无码人妻在中文字幕免费 | 久久99久久99精品中文字幕 | 久久久久免费精品国产 | a在线亚洲男人的天堂 | 亚洲爆乳大丰满无码专区 | 亚洲爆乳大丰满无码专区 | 国产乱人伦av在线无码 | 亚洲一区二区三区四区 | 国内揄拍国内精品少妇国语 | 四虎4hu永久免费 | 人人妻人人澡人人爽精品欧美 | 国产片av国语在线观看 | 极品尤物被啪到呻吟喷水 | 精品无码av一区二区三区 | 日韩欧美中文字幕在线三区 | 天堂无码人妻精品一区二区三区 | 欧美日韩一区二区三区自拍 | 女人被男人躁得好爽免费视频 | 一二三四社区在线中文视频 | 国内揄拍国内精品少妇国语 | 国产精品亚洲综合色区韩国 | 国产肉丝袜在线观看 | 日韩精品久久久肉伦网站 | 中文字幕无线码免费人妻 | 亚洲精品久久久久avwww潮水 | 久久久无码中文字幕久... | 国产无套内射久久久国产 | 99久久人妻精品免费二区 | 免费男性肉肉影院 | 午夜成人1000部免费视频 | 国产乱人伦偷精品视频 | 国产精品久久久久久久9999 | 亚洲一区二区三区香蕉 | 国产精品久久久av久久久 | 国产无套粉嫩白浆在线 | 成人无码精品1区2区3区免费看 | 日本熟妇乱子伦xxxx | 亚洲精品一区二区三区四区五区 | 女人和拘做爰正片视频 | 亚洲一区二区三区国产精华液 | 国产乱人伦av在线无码 | 国产成人一区二区三区在线观看 | 色综合久久中文娱乐网 | 狂野欧美性猛xxxx乱大交 | 久久国产精品二国产精品 | 日日天日日夜日日摸 | 欧美丰满老熟妇xxxxx性 | 4hu四虎永久在线观看 | 成人av无码一区二区三区 | 国产特级毛片aaaaaaa高清 | 亚洲自偷精品视频自拍 | 精品夜夜澡人妻无码av蜜桃 | 国产九九九九九九九a片 | 福利一区二区三区视频在线观看 | 久久久久久久久888 | 久青草影院在线观看国产 | 中文无码精品a∨在线观看不卡 | 午夜精品久久久久久久久 | 亚洲人亚洲人成电影网站色 | 亚洲综合无码一区二区三区 | 牲欲强的熟妇农村老妇女 | 夜精品a片一区二区三区无码白浆 | 俺去俺来也在线www色官网 | 大屁股大乳丰满人妻 | 亚洲日韩av一区二区三区中文 | 荫蒂添的好舒服视频囗交 | 少妇无套内谢久久久久 | 国产午夜无码精品免费看 | 成人免费视频在线观看 | 兔费看少妇性l交大片免费 | 99久久精品午夜一区二区 | 国产亚洲精品久久久久久 | 国内综合精品午夜久久资源 | 强开小婷嫩苞又嫩又紧视频 | 成 人 免费观看网站 | 成人无码影片精品久久久 | 日本在线高清不卡免费播放 | 毛片内射-百度 | 欧美黑人性暴力猛交喷水 | 国产高清不卡无码视频 | 久久人人爽人人爽人人片av高清 | 亚洲人成人无码网www国产 | 亚洲日本va午夜在线电影 | 无码乱肉视频免费大全合集 | 无遮挡国产高潮视频免费观看 | 一二三四在线观看免费视频 | 最近中文2019字幕第二页 | 青青青手机频在线观看 | 中文字幕日产无线码一区 | 夜夜影院未满十八勿进 | 扒开双腿疯狂进出爽爽爽视频 | 国产卡一卡二卡三 | 日韩人妻无码一区二区三区久久99 | 性生交片免费无码看人 | √8天堂资源地址中文在线 | 扒开双腿疯狂进出爽爽爽视频 | 永久免费观看国产裸体美女 | 青青久在线视频免费观看 | 中文字幕无码热在线视频 | 国产成人综合在线女婷五月99播放 | 亚洲の无码国产の无码步美 | 5858s亚洲色大成网站www | 免费观看的无遮挡av | 真人与拘做受免费视频一 | 大地资源网第二页免费观看 | 欧美国产日韩久久mv | 中文字幕人妻无码一夲道 | 高清不卡一区二区三区 | 亚洲成av人片在线观看无码不卡 | 男女超爽视频免费播放 | 国产莉萝无码av在线播放 | 亚洲综合无码久久精品综合 | 亚洲熟悉妇女xxx妇女av | 蜜桃臀无码内射一区二区三区 | 国产人妻人伦精品1国产丝袜 | 国产精品久久久av久久久 | 天堂亚洲2017在线观看 | 激情亚洲一区国产精品 | 扒开双腿吃奶呻吟做受视频 | 亚洲中文无码av永久不收费 | 内射巨臀欧美在线视频 | 久久综合激激的五月天 | 人妻无码αv中文字幕久久琪琪布 | 亚洲中文字幕久久无码 | 国产无遮挡吃胸膜奶免费看 | 国产色精品久久人妻 | 国产免费久久久久久无码 | 粉嫩少妇内射浓精videos | 波多野结衣一区二区三区av免费 | 国产成人无码区免费内射一片色欲 | 国产一区二区不卡老阿姨 | 国产人成高清在线视频99最全资源 | 精品一区二区三区波多野结衣 | 97色伦图片97综合影院 | 亚洲一区二区三区四区 | 亚洲欧洲日本综合aⅴ在线 | 国产精品亚洲专区无码不卡 | 日韩视频 中文字幕 视频一区 | 国产一精品一av一免费 | 国产午夜精品一区二区三区嫩草 | 草草网站影院白丝内射 | 国产又爽又猛又粗的视频a片 | 激情国产av做激情国产爱 | 无码一区二区三区在线 | 国产成人无码av片在线观看不卡 | 玩弄少妇高潮ⅹxxxyw | 天天综合网天天综合色 | 亚洲精品国产精品乱码视色 | 无码国产激情在线观看 | 欧美一区二区三区视频在线观看 | 日日摸日日碰夜夜爽av | 国产成人久久精品流白浆 | 乱码午夜-极国产极内射 | 大肉大捧一进一出视频出来呀 | 99视频精品全部免费免费观看 | 曰本女人与公拘交酡免费视频 | 国产成人午夜福利在线播放 | 性欧美熟妇videofreesex | 国产人成高清在线视频99最全资源 | 国产麻豆精品精东影业av网站 | 亚洲国产精品美女久久久久 | 欧美丰满少妇xxxx性 | 一个人看的视频www在线 | 成人欧美一区二区三区黑人免费 | 亚洲无人区一区二区三区 | 国产午夜视频在线观看 | 国产精品高潮呻吟av久久 | 中文字幕无码日韩专区 | 色一情一乱一伦一区二区三欧美 | 欧美刺激性大交 | 97夜夜澡人人爽人人喊中国片 | 国产明星裸体无码xxxx视频 | 日本一区二区更新不卡 | 精品欧美一区二区三区久久久 | 久久久久久久人妻无码中文字幕爆 | 亚洲精品综合五月久久小说 | 99国产欧美久久久精品 | 成人欧美一区二区三区黑人免费 | 中文字幕中文有码在线 | 天海翼激烈高潮到腰振不止 | 精品乱子伦一区二区三区 | 欧美色就是色 | 少妇一晚三次一区二区三区 | 久久亚洲日韩精品一区二区三区 | 台湾无码一区二区 | 亚洲人交乣女bbw | 性色av无码免费一区二区三区 | 伊人久久大香线焦av综合影院 | 高清无码午夜福利视频 | 日本爽爽爽爽爽爽在线观看免 | 乱人伦人妻中文字幕无码 | 牛和人交xxxx欧美 | 曰韩少妇内射免费播放 | 国产综合色产在线精品 | 最新版天堂资源中文官网 | av无码久久久久不卡免费网站 | 学生妹亚洲一区二区 | 日本精品久久久久中文字幕 | 国产精品高潮呻吟av久久 | 国产xxx69麻豆国语对白 | 5858s亚洲色大成网站www | 色欲人妻aaaaaaa无码 | 在线a亚洲视频播放在线观看 | 清纯唯美经典一区二区 | 亚洲欧美精品aaaaaa片 | 成人毛片一区二区 | 色噜噜亚洲男人的天堂 | 久久精品国产一区二区三区肥胖 | 国产成人精品视频ⅴa片软件竹菊 | 曰本女人与公拘交酡免费视频 | 国产内射爽爽大片视频社区在线 | 狠狠色欧美亚洲狠狠色www | 伊人久久婷婷五月综合97色 | 亚洲一区二区三区含羞草 | 少妇人妻大乳在线视频 | 欧美阿v高清资源不卡在线播放 | 国产亚洲精品久久久久久大师 | 国产在线aaa片一区二区99 | 国内少妇偷人精品视频 | 国产人妻精品一区二区三区不卡 | 国产免费久久精品国产传媒 | 少妇人妻av毛片在线看 | 麻豆国产丝袜白领秘书在线观看 | 久久97精品久久久久久久不卡 | 欧美性色19p | 色五月五月丁香亚洲综合网 | 婷婷综合久久中文字幕蜜桃三电影 | 国产区女主播在线观看 | 纯爱无遮挡h肉动漫在线播放 | 久久国产自偷自偷免费一区调 | 99re在线播放 | 国产特级毛片aaaaaaa高清 | 国产明星裸体无码xxxx视频 | 色五月五月丁香亚洲综合网 | 四十如虎的丰满熟妇啪啪 | 久久久国产精品无码免费专区 | 国产精品18久久久久久麻辣 | 久久视频在线观看精品 | 狠狠色色综合网站 | 午夜性刺激在线视频免费 | 永久黄网站色视频免费直播 | 久久99精品国产麻豆蜜芽 | 国产内射老熟女aaaa | 蜜臀av在线播放 久久综合激激的五月天 | 国产成人亚洲综合无码 | 国产精品丝袜黑色高跟鞋 | 国产9 9在线 | 中文 | 蜜桃臀无码内射一区二区三区 | 欧美野外疯狂做受xxxx高潮 | 欧美精品免费观看二区 | 日日干夜夜干 | 性欧美牲交xxxxx视频 | 精品少妇爆乳无码av无码专区 | 久久精品一区二区三区四区 | 精品久久8x国产免费观看 | 日韩av无码中文无码电影 | 在线а√天堂中文官网 | 天下第一社区视频www日本 | 成人影院yy111111在线观看 | 中文精品久久久久人妻不卡 | 久久国产劲爆∧v内射 | 国产精品无套呻吟在线 | 亚洲日本一区二区三区在线 | 天堂久久天堂av色综合 | 中文字幕无码免费久久99 | 熟女少妇人妻中文字幕 | 亚洲色在线无码国产精品不卡 | 亚洲日韩av一区二区三区四区 | 丰满人妻翻云覆雨呻吟视频 | 国内精品一区二区三区不卡 | 国产成人一区二区三区在线观看 | 国产精品国产三级国产专播 | 成人片黄网站色大片免费观看 | 国产精品久久久久久亚洲影视内衣 | 亚洲男人av天堂午夜在 | 成人无码精品一区二区三区 | 女人和拘做爰正片视频 | 国产精品福利视频导航 | 久久国产精品精品国产色婷婷 | 熟女俱乐部五十路六十路av | 久久精品视频在线看15 | 一本久久a久久精品亚洲 | 成人欧美一区二区三区黑人 | 欧美人妻一区二区三区 | 国产精品久久久久久亚洲影视内衣 | 国产成人无码区免费内射一片色欲 | 女人被男人爽到呻吟的视频 | 国产免费久久精品国产传媒 | 精品无码国产一区二区三区av | 久久婷婷五月综合色国产香蕉 | 熟妇人妻中文av无码 | 人妻人人添人妻人人爱 | 欧美xxxxx精品 | 人人爽人人澡人人高潮 | 我要看www免费看插插视频 | av香港经典三级级 在线 | 天天躁日日躁狠狠躁免费麻豆 | 美女扒开屁股让男人桶 | 性欧美牲交xxxxx视频 | 清纯唯美经典一区二区 | 性欧美熟妇videofreesex | 日韩av无码中文无码电影 | 国产熟女一区二区三区四区五区 | 国产精品无码永久免费888 | av人摸人人人澡人人超碰下载 | 亚洲中文无码av永久不收费 | 在线观看免费人成视频 | 亚洲国产精品美女久久久久 | 牲交欧美兽交欧美 | 国产成人无码av片在线观看不卡 | 精品久久久久久人妻无码中文字幕 | 国产97人人超碰caoprom | 老头边吃奶边弄进去呻吟 | 啦啦啦www在线观看免费视频 | 蜜桃视频插满18在线观看 | 欧美日韩久久久精品a片 | 男人扒开女人内裤强吻桶进去 | 狠狠cao日日穞夜夜穞av | 成人一区二区免费视频 | 中文字幕乱妇无码av在线 | 日本丰满熟妇videos | 国产激情艳情在线看视频 | 国产极品视觉盛宴 | 波多野结衣aⅴ在线 | 亚洲日韩精品欧美一区二区 | 国产精华av午夜在线观看 | 欧美丰满熟妇xxxx性ppx人交 | 精品欧洲av无码一区二区三区 | 亚洲中文字幕久久无码 | 亚洲日韩av一区二区三区中文 | 国产真人无遮挡作爱免费视频 | 377p欧洲日本亚洲大胆 | 色窝窝无码一区二区三区色欲 | 久久国产精品精品国产色婷婷 | 久久综合激激的五月天 | 久久天天躁狠狠躁夜夜免费观看 | 青青久在线视频免费观看 | 亚洲成av人片在线观看无码不卡 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲人交乣女bbw | 中文字幕乱码人妻二区三区 | 一本一道久久综合久久 | 亚洲理论电影在线观看 | 中文字幕无线码 | 奇米影视888欧美在线观看 | 一区二区传媒有限公司 | 国产一区二区三区日韩精品 | 亚洲欧美国产精品久久 | 无码av免费一区二区三区试看 | 风流少妇按摩来高潮 | 天天摸天天碰天天添 | 精品久久久无码人妻字幂 | 欧美熟妇另类久久久久久不卡 | 国产午夜福利100集发布 | 东京热一精品无码av | 精品国产精品久久一区免费式 | 国产成人无码一二三区视频 | 131美女爱做视频 | 欧美黑人巨大xxxxx | 人人超人人超碰超国产 | 成人试看120秒体验区 | 亚洲成av人片在线观看无码不卡 | 日本xxxx色视频在线观看免费 | 国产成人无码专区 | 欧美性黑人极品hd | 东京无码熟妇人妻av在线网址 | av在线亚洲欧洲日产一区二区 | 日韩av无码一区二区三区 | 亚洲国产精品成人久久蜜臀 | 免费乱码人妻系列无码专区 | 国产激情无码一区二区 | 丰满诱人的人妻3 | 中文字幕人成乱码熟女app | 免费无码的av片在线观看 | 久久精品女人天堂av免费观看 | 亚洲成av人片在线观看无码不卡 | 无码精品国产va在线观看dvd | 一本色道婷婷久久欧美 | 免费人成在线视频无码 | 妺妺窝人体色www婷婷 | 精品久久久无码人妻字幂 | 国产人妻人伦精品1国产丝袜 | 高清不卡一区二区三区 | 性欧美熟妇videofreesex | 日本va欧美va欧美va精品 | 国产精品对白交换视频 | 色综合久久久无码网中文 | 亚洲一区二区三区国产精华液 | 福利一区二区三区视频在线观看 | 国产口爆吞精在线视频 | 久久精品国产日本波多野结衣 | 波多野结衣一区二区三区av免费 | 精品国产aⅴ无码一区二区 | 精品久久久中文字幕人妻 | 欧美黑人巨大xxxxx | 亚洲中文字幕乱码av波多ji | 国产成人无码av在线影院 | 亚洲综合无码久久精品综合 | 亚洲中文字幕乱码av波多ji | 久久久久成人精品免费播放动漫 | 无码av免费一区二区三区试看 | 国内少妇偷人精品视频免费 | 狠狠色噜噜狠狠狠狠7777米奇 | 久久久久久av无码免费看大片 | 久久熟妇人妻午夜寂寞影院 | 精品乱码久久久久久久 | 99久久精品日本一区二区免费 | 亚洲成色在线综合网站 | 国产免费观看黄av片 | 精品欧美一区二区三区久久久 | 强奷人妻日本中文字幕 | 无码播放一区二区三区 | 人妻无码久久精品人妻 | 美女黄网站人色视频免费国产 | 狠狠躁日日躁夜夜躁2020 | 乱码av麻豆丝袜熟女系列 | 无码人妻丰满熟妇区五十路百度 | 久久精品中文字幕一区 | 亚洲色欲久久久综合网东京热 | 水蜜桃av无码 | 色综合久久久无码网中文 | 欧美阿v高清资源不卡在线播放 | 亚洲乱码中文字幕在线 | 欧美日韩人成综合在线播放 | 噜噜噜亚洲色成人网站 | 18无码粉嫩小泬无套在线观看 | 免费人成网站视频在线观看 | 沈阳熟女露脸对白视频 | 久久国产36精品色熟妇 | 精品夜夜澡人妻无码av蜜桃 | 国产亚洲精品久久久久久大师 | 久久国产36精品色熟妇 | 无码国模国产在线观看 | 麻豆国产人妻欲求不满谁演的 | 日产国产精品亚洲系列 | 最近的中文字幕在线看视频 | 成人毛片一区二区 | 国产熟妇另类久久久久 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲日韩中文字幕在线播放 | 乱码av麻豆丝袜熟女系列 | 波多野结衣av在线观看 | 日韩欧美中文字幕公布 | 国产特级毛片aaaaaa高潮流水 | 亚洲 日韩 欧美 成人 在线观看 | 亚洲の无码国产の无码步美 | 日韩少妇白浆无码系列 | 激情综合激情五月俺也去 | 青春草在线视频免费观看 | 欧美人与禽猛交狂配 | 国产综合色产在线精品 | 欧美精品免费观看二区 | 亚洲综合无码久久精品综合 | 婷婷色婷婷开心五月四房播播 |