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

納秒級高性能日志系統 · ATC 2018

系統
本文要介紹的是 2018 年 ATC 期刊中的論文 —— NanoLog: A Nanosecond Scale Logging System[^1],該論文實現的 NanoLog 是高性能的日志系統,與 C++ 社區中的其他日志系統,例如:spdlog、glog 和 Boost Log 相比,它的性能可以高出 1 ~ 2 個數量級,我們在這篇文章中來簡要分析 NanoLog 的設計與實現原理。

[[379907]]

本文轉載自微信公眾號「真沒什么邏輯」,作者 Draveness 。轉載本文請聯系真沒什么邏輯公眾號。

『看看論文』是一系列分析計算機和軟件工程領域論文的文章,我們在這個系列的每一篇文章中都會閱讀一篇來自 OSDI、SOSP 等頂會中的論文,這里不會事無巨細地介紹所有的細節,而是會篩選論文中的關鍵內容,如果你對相關的論文非常感興趣,可以直接點擊鏈接閱讀原文。

本文要介紹的是 2018 年 ATC 期刊中的論文 —— NanoLog: A Nanosecond Scale Logging System[^1],該論文實現的 NanoLog 是高性能的日志系統,與 C++ 社區中的其他日志系統,例如:spdlog、glog 和 Boost Log 相比,它的性能可以高出 1 ~ 2 個數量級,我們在這篇文章中來簡要分析 NanoLog 的設計與實現原理。

日志是系統可觀測性的重要一環,相信很多工程師都有線上出問題臨時加日志查問題的經歷,作者剛剛又重新經歷了這一過程,稍有經驗的開發者都會在系統中加入很多日志方便生產環境的問題排查,更有經驗的開發者會謹慎地在系統中(尤其是低延遲的實時系統)添加日志,因為打印日志這件看起來簡單的事情實際上會帶來很大的額外開銷。

打印日志是一件簡單的事情,幾乎所有的工程師在踏上編程之路的第一天起就學會了如何使用 printf 等函數向標準輸出打印字符串,在 99% 的程序中使用這種做法都不會帶來性能問題,只是在生產環境中我們會使用結構化的、容易解析的格式替代 printf,例如:在日志中加入時間戳、文件名和行數等信息。

圖 1 - 常見的日志系統

但是剩下 1% 的程序要求超低延遲的系統,它們對響應時間的要求可能是微秒甚至納秒級別的。在這種場景下,如果仍然需要日志系統提供可觀測性,我們需要深入研究向標準輸出或者文件寫日志的細節,例如:使用緩沖區、異步寫入文件以及減少反射等動態特性的使用,除此之外,我們還要保證日志輸出的順序、避免消息丟失或者截斷。

spdlog、glog 和 Boost Log 已經能夠滿足絕大多數應用程序的需求,但是對于這些延遲機器敏感的應用程序,打印日志需要的幾微秒可能會顯著地增加請求的處理時間影響程序的性能,而今天分享的 NanoLog 是一個可以在納秒尺度打印日志的系統。

架構設計

NanoLog 能在毫秒尺度打印日志是因為它能夠在編譯期間提取靜態日志消息并在離線階段處理日志的格式化等問題。其核心優化都建立在以下兩個條件上:

  • 開發者可直接閱讀的格式化日志不一定要在應用程序運行時直接生成,我們可以在運行期間記錄日志的動態參數并在運行后按需生成;
  • 日志消息中的絕大部分信息都是靜態冗余的,只有少數參數會發生變化,我們可以在編譯期間獲取日志的靜態內容并僅在后處理器中打印一次;

正是因為大多數日志都遵循上述特性,所以 NanoLog 可以在它們的基礎上實現納秒尺度的日志打印。NanoLog 的不同設計方式決定了它與傳統日志模塊會在架構上有很大的差異,它由以下三個組件構成:

圖 2 - NanoLog 系統架構

  • 預處理器:在編譯期間從源代碼提取日志消息、將原始日志語句替換成優化過的代碼并為每條日志消息生成壓縮、字典輔助函數;
  • 運行時庫:在緩沖區中緩存多個線程打印的日志并使用預處理階段生成的輔助函數輸出壓縮后的二進制日志;
  • 解碼器:利用預處理階段生成的包含靜態信息的字典解碼日志,獲取可以被人類閱讀的日志;

傳統的日志系統都僅包含運行時,我們只需要在開發時引入頭文件、鏈接靜態庫或者動態庫并在代碼中指定的位置輸出日志,日志系統會程序運行期間將日志打印到標準輸出或者指定文件。

但是 NanoLog 打破了上述這種傳統的設計,為了減少運行時的開銷,我們將一部分操作遷移到了編譯期間和運行后,這也遵循工作質量守恒定律:工作不會憑空消失,它只會從運行時轉移到程序生命周期的其他階段,NanoLog 就使用了下面的操作降低了日志系統的開銷:

  • 在編譯時重寫了日志語句移除靜態信息并將昂貴的格式化操作推遲到代碼運行后的階段,這能夠在運行時減少大量的計算和 I/O 帶寬需求;
  • 為每個日志消息編譯了特定代碼,能夠高效地處理動態參數,避免在運行時解析日志消息并編碼參數類型;
  • 使用輕量級的壓縮算法以及不保序的日志減少運行時的 I/O 和處理時間;
  • 使用后處理組合壓縮的日志數據和編譯時提取的靜態信息生成可讀的日志;

實現原理

這一節我們將簡要分析 NanoLog 系統中三大組件,即預處理、運行時和后處理的具體實現原理。

預處理

NanoLog 使用 Python 來實現預處理器,程序的入口在 processor/parser 中,它會掃描用戶的源文件、生成元數據文件和修改后的源代碼,接下來會將這些修改后的代碼編譯到 .so 或者 .a 文件中,而不是編譯初始的代碼。除此之外,預處理器還會讀取生成的所有元數據文件、生成 C++ 源代碼并編譯到 NanoLog 的運行時庫和最后的用戶程序中:

圖 3 - 預處理器

它會為源代碼中的每個 NANO_LOG 生成兩條語句,即 record 和 compress,其中前者記錄日志中的動態參數,后者壓縮記錄的數據減少程序的 I/O 時間。下面是預處理器生成的 record 函數:

  1. inline void __syang0__fl__E32374s3237424642lf__s46cc__100__(NanoLog::LogLevel level, const char* fmtStr , const char* arg0, int arg1, int arg2, double arg3) { 
  2.     extern const uint32_t __fmtId__E32374s3237424642lf__s46cc__100__; 
  3.  
  4.     if (level > NanoLog::getLogLevel()) 
  5.         return
  6.  
  7.     uint64_t timestamp = PerfUtils::Cycles::rdtsc(); 
  8.     size_t str0Len = 1 + strlen(arg0);; 
  9.     size_t allocSize = sizeof(arg1) + sizeof(arg2) + sizeof(arg3) +  str0Len +  sizeof(NanoLogInternal::Log::UncompressedEntry); 
  10.     NanoLogInternal::Log::UncompressedEntry *re = reinterpret_cast<NanoLogInternal::Log::UncompressedEntry*>(NanoLogInternal::RuntimeLogger::reserveAlloc(allocSize)); 
  11.  
  12.     re->fmtId = __fmtId__E32374s3237424642lf__s46cc__100__; 
  13.     re->timestamp = timestamp
  14.     re->entrySize = static_cast<uint32_t>(allocSize); 
  15.  
  16.     char *buffer = re->argData; 
  17.  
  18.     // Record the non-string arguments 
  19.     NanoLogInternal::Log::recordPrimitive(buffer, arg1); 
  20.  NanoLogInternal::Log::recordPrimitive(buffer, arg2); 
  21.  NanoLogInternal::Log::recordPrimitive(buffer, arg3); 
  22.  
  23.     // Record the strings (if anyat the end of the entry 
  24.     memcpy(buffer, arg0, str0Len); buffer += str0Len;*(reinterpret_cast<std::remove_const<typename std::remove_pointer<decltype(arg0)>::type>::type*>(buffer) - 1) = L'\0'
  25.  
  26.     // Make the entry visible 
  27.     NanoLogInternal::RuntimeLogger::finishAlloc(allocSize); 

每個函數都包含特定的 fmtId,日志的壓縮和解壓也都會用到這里生成的標識符,上述函數還會為參數分配內存空間并按照順序調用 recordPrimitive 將所有參數記錄到緩沖區中。壓縮使用的 compress 也遵循類似的邏輯:

  1. inline ssize_t 
  2. compressArgs__E32374s3237424642lf__s46cc__100__(NanoLogInternal::Log::UncompressedEntry *re, charout) { 
  3.     char *originalOutPtr = out
  4.  
  5.     // Allocate nibbles 
  6.     BufferUtils::TwoNibbles *nib = reinterpret_cast<BufferUtils::TwoNibbles*>(out); 
  7.     out += 2; 
  8.  
  9.     char *args = re->argData; 
  10.  
  11.     // Read back all the primitives 
  12.     int arg1; std::memcpy(&arg1, args, sizeof(int)); args +=sizeof(int); 
  13.  int arg2; std::memcpy(&arg2, args, sizeof(int)); args +=sizeof(int); 
  14.  double arg3; std::memcpy(&arg3, args, sizeof(double)); args +=sizeof(double); 
  15.  
  16.     // Pack all the primitives 
  17.     nib[0].first = 0x0f & static_cast<uint8_t>(BufferUtils::pack(&out, arg1)); 
  18.  nib[0].second = 0x0f & static_cast<uint8_t>(BufferUtils::pack(&out, arg2)); 
  19.  nib[1].first = 0x0f & static_cast<uint8_t>(BufferUtils::pack(&out, arg3)); 
  20.  
  21.     if (true) { 
  22.         // memcpy all the strings without compression 
  23.         size_t stringBytes = re->entrySize - (sizeof(arg1) + sizeof(arg2) + sizeof(arg3) +  0) 
  24.                                             - sizeof(NanoLogInternal::Log::UncompressedEntry); 
  25.         if (stringBytes > 0) { 
  26.             memcpy(out, args, stringBytes); 
  27.             out += stringBytes; 
  28.         } 
  29.     } 
  30.  
  31.     return out - originalOutPtr; 

日志的記錄和壓縮函數都是 Python 的預處理器分析源代碼生成的,工程師在開始時使用的 NANO_LOG 會被預處理器展開成新的代碼,該預處理器與 C++ 的預處理器有非常相似的功能,只是這里需要展開的代碼過于復雜,我們很難在 C++ 中使用預處理器實現。

運行時

應用程序靜態鏈接的 NanoLog 運行時會通過線程上的緩沖區解耦記錄動態參數的低延時 record 操作和磁盤 I/O 等高延遲操作。線程上的緩沖區會存儲 record 方法調用的結果,這些數據對后臺的壓縮線程也是可見的:

圖 4 - 運行時

線程上用于暫存數據的緩沖區是程序提升性能的關鍵,我們要盡可能滿足避免鎖競爭和緩存一致性帶來的額外開銷,暫存緩沖區使用環形隊列和單生產者的消費者模型降低數據的同步開銷。

圖 5 - 環形隊列

環形隊列是一個連續的、使用固定大小緩存的數據結構,它的頭尾是相連的,非常適合緩存數據流,Linux 內核就使用這種數據結構作為 Socket 的讀寫緩沖區[^2],而音視頻也會使用環形隊列暫存剛剛收到還沒有被解碼的數據。

  1. struct __kfifo { 
  2.  unsigned int in
  3.  unsigned int out
  4.  unsigned int mask; 
  5.  unsigned int esize; 
  6.  void  *data; 
  7. }; 

運行時不僅通過無鎖環形隊列提升性能,還需要解決環形隊列中的日志消費問題。為了提高后臺線程的處理能力,運行時會將日志的組裝推遲到后處理并壓縮日志數據減少 I/O 高延遲帶來的影響。

后處理

后處理器的實現相對比較簡單,因為每條日志都包含特定的標識符,后處理器會根據該標識符在壓縮后的日志頭中找到編譯時生成的相關信息,并根據這些信息展開和解壓日志。

需要注意的是,因為在運行期間每個線程都有自己的暫存緩沖區存儲日志,所以 NanoLog 最終打印的日志不能嚴格保證時間順序,它只能保證日志輸出的順序在大體上是有序的。

總結

NanoLog 是設計非常有趣、值得學習的日志系統,但是它并不適合所有的項目,它將原本運行時需要完成的工作轉移到了編譯期間和后處理階段,減輕了程序運行時的負擔,但是其輸出的二進制日志是無法直接閱讀的,這也增加了開發者處理日志的工作量。

雖然論文中提到,日志分析引擎基本都會收集、解析并分析工程師可以直接閱讀的日志,而大多數的時間都花費在了日志的讀取和解析上,使用二進制的日志不僅能夠減少讀取和解析的時間,還能減少昂貴的 I/O 和使用的帶寬,但是這點在我們的系統中是否是優點就見仁見智了。

日志使用二進制的輸出格式確實能夠降低多方面的成本,但是它不僅需要日志收集和解析系統的支持,還犧牲了開發者本地調試的體驗,而如果沒有自動收集并解壓日志的模塊,手動解壓線上日志排查問題是非常糟糕的體驗,不過在極端的性能場景下我們可能也沒有太多的選擇,哪怕犧牲體驗可能也要上。

 

責任編輯:武曉燕 來源: 真沒什么邏輯
相關推薦

2024-11-20 19:56:36

2022-05-12 14:34:14

京東數據

2025-01-06 00:00:10

2024-10-15 16:31:30

2009-06-03 14:24:12

ibmdwWebSphere

2024-09-02 18:10:20

2016-07-07 11:00:54

聯想

2023-08-23 10:16:47

日志系統

2013-03-22 09:53:46

固態硬盤IOPSFusion-io

2020-01-13 08:43:20

Elasticsear分布式搜索

2014-12-01 09:51:44

Radware應用交付

2012-05-23 14:10:33

深信服應用交付

2020-02-06 13:40:35

編程緩存優化

2024-08-14 08:18:18

2020-01-17 11:00:23

流量系統架構

2016-10-21 10:07:01

曙光

2019-01-02 16:47:46

Golang彈幕

2019-01-02 16:38:37

Golang彈幕

2024-03-15 10:15:30

高性能系統SSD

2025-06-03 08:15:00

微服務架構異步任務隊列
點贊
收藏

51CTO技術棧公眾號

国产在线观看精品一区二区三区| 亚洲视频在线免费看| 日本国产中文字幕| 青青草视频在线观看| 日本不卡在线视频| 萌白酱国产一区二区| 国产又黄又粗又猛又爽的视频| 成人免费直播| 亚洲男人天堂av| 欧美日韩电影一区二区三区| 国产深喉视频一区二区| 国产精品三上| 九九视频这里只有精品| 四虎永久免费在线观看| 精品视频在线观看网站| 一本在线高清不卡dvd| av中文字幕av| 波多野结衣在线影院| 成人免费毛片高清视频| 国产日韩欧美电影在线观看| 羞羞影院体验区| 91精品福利| 亚洲石原莉奈一区二区在线观看| 午夜影院免费观看视频| 日本免费一区二区六区| 亚洲欧洲色图综合| 欧美在线播放一区| 日韩在线观看视频网站| 国内精品第一页| 国产国语刺激对白av不卡| 精品少妇久久久| 91精品天堂福利在线观看| 亚洲精品一区二区网址| 少妇丰满尤物大尺度写真| 精品久久在线| 欧美亚洲动漫制服丝袜| 1024av视频| 另类视频在线| 一区2区3区在线看| 国产在线无码精品| fc2ppv国产精品久久| 中文字幕亚洲成人| 宅男一区二区三区| 在线a人片免费观看视频| 久久久99久久| 欧美精品成人一区二区在线观看| 深夜福利视频网站| 国产.欧美.日韩| 69堂成人精品视频免费| 国产熟女一区二区三区五月婷| 欧美aⅴ一区二区三区视频| 国产激情999| 正在播放木下凛凛xv99| 日本不卡在线视频| 国产有码在线一区二区视频| 国产女优在线播放| 麻豆久久久久久久| 国产区精品在线观看| 国产精品高潮呻吟av| 韩国三级中文字幕hd久久精品| 国产精品一区二区三| 一级爱爱免费视频| 国内成人精品2018免费看| 成人在线播放av| 国产美女精品视频国产| 国产精品123区| 国产一区二区不卡视频| 日本私人网站在线观看| 国产女主播一区| 正在播放国产精品| 日本在线观看大片免费视频| 亚洲国产日韩a在线播放 | 日韩av有码| 精品国产一区久久久| 久久久久亚洲AV成人| 国产综合色产| 欧美孕妇与黑人孕交| 国产寡妇亲子伦一区二区三区四区| 久久精品中文| 国产色视频一区| 亚洲老妇色熟女老太| 91视频在线看| 一区二区三区四区不卡| 尤物视频在线看| 精品久久久久久中文字幕大豆网| 亚洲熟妇av一区二区三区| 97人人做人人爽香蕉精品| 欧美老年两性高潮| 69xxx免费视频| 精品国产一区二区三区久久久蜜臀 | 国产精品久久久久一区二区三区| www亚洲国产| 538在线视频| 欧美系列亚洲系列| 91人妻一区二区| 第四色成人网| 韩国精品美女www爽爽爽视频| 久久精品视频7| 国产精品亚洲视频| 免费中文日韩| 天天色天天射天天综合网| 日韩欧美在线一区| 免费高清视频在线观看| 国产成人短视频在线观看| 美女福利视频一区| 日韩 国产 欧美| 国产成人自拍在线| 亚洲精品欧洲精品| 在线毛片观看| 日韩美女视频在线| 青青青视频在线播放| 国产午夜久久| 91在线免费看网站| 成人高清免费在线播放| 亚洲国产中文字幕在线视频综合 | 国产一区二区精品久久99| 久久99精品国产99久久| av网站导航在线观看免费| 91成人网在线| 艳妇乳肉亭妇荡乳av| 欧美一区亚洲| 国产精品日韩一区| 欧美日韩激情视频一区二区三区| 一区二区三区 在线观看视频| av五月天在线| 蜜桃精品噜噜噜成人av| 欧美激情一区二区三区成人 | 日韩av中文字幕一区二区三区| 国产精品v欧美精品v日韩精品| 在线观看免费黄视频| 色综合天天综合色综合av| 星空大象在线观看免费播放| 欧美色图首页| 97操在线视频| a篇片在线观看网站| 欧美日韩成人一区| x88av在线| 久久中文欧美| 欧美一区二区三区电影在线观看| 国产盗摄——sm在线视频| 欧美成人bangbros| 免费一级肉体全黄毛片| 国产精品一区二区在线播放 | 五月婷婷综合在线观看| 中日韩视频在线观看| 国产欧美日韩视频一区二区三区| 中文av资源在线| 91精品国产综合久久香蕉的特点 | 国产精品免费小视频| 国产二区在线播放| 欧美性受xxxx黑人xyx性爽| 亚洲精品成人无码| 日本最新不卡在线| 亚洲高清在线观看一区| 国产精品蜜月aⅴ在线| 中文字幕欧美精品在线| 中文字幕在线2019| **性色生活片久久毛片| 国产xxxxhd| 国产精品jizz在线观看美国| 国产精品久久国产三级国电话系列 | 国产精品怡红院| 亚洲视频小说图片| 久久精品人人做人人爽97| 国产96在线 | 亚洲| 日韩美女毛片| 国产成人+综合亚洲+天堂| 黄色片在线播放| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 成人午夜伦理影院| 777久久久精品一区二区三区| 九色精品91| 国产精品中文字幕久久久| 日本高清中文字幕在线| 日韩三级av在线播放| 日本特黄一级片| 久久精品视频网| 在线看免费毛片| 激情六月综合| 欧美一区二区三区精美影视 | 日韩一级黄色片| 亚洲一区欧美在线| 亚洲国产精品二十页| 伦伦影院午夜理论片| 国产欧美短视频| 亚洲午夜精品一区二区三区| 欧美a级大片在线| 26uuu亚洲国产精品| 1pondo在线播放免费| 欧美精品一区二区三区蜜桃| www.日韩一区| 亚洲亚洲精品在线观看| 亚洲精品色午夜无码专区日韩| 韩国一区二区三区| 国产日韩一区二区在线| 欧美va天堂在线| 日本一区不卡| gogo久久日韩裸体艺术| 国产精品老女人精品视频| 女子免费在线观看视频www| 亚洲视频在线免费观看| 亚洲欧美黄色片| 欧美体内she精视频| 久久中文字幕无码| 国产精品久久久久久久裸模| 欧美肉大捧一进一出免费视频| 免费人成黄页网站在线一区二区 | 石原莉奈一区二区三区在线观看| 国产日韩欧美大片| 秋霞欧美视频| 鲁片一区二区三区| 日韩在线成人| 国产色婷婷国产综合在线理论片a| a在线视频观看| 中文字幕日本一区| 欧美在线观看网址综合| 特级毛片在线| 菠萝蜜影院一区二区免费| 欧美扣逼视频| 亚洲精品久久久久久下一站| av官网在线观看| 欧美军同video69gay| 一级做a爰片久久毛片| 亚洲 欧美综合在线网络| 欧美人禽zoz0强交| 国产精品国产三级国产aⅴ无密码| 一区二区三区四区免费| av中文一区二区三区| 亚洲AV成人精品| 国产在线精品一区二区夜色| 色悠悠久久综合网| 久热re这里精品视频在线6| 免费av手机在线观看| 国内精品亚洲| 欧美日韩午夜爽爽| 欧美精品色网| 国产精品久久久影院| 一区二区三区午夜探花| 国产精品12p| 亚洲精品在线观看91| a级黄色片网站| 久久精品国内一区二区三区水蜜桃 | 国产高清视频免费| 欧美一级夜夜爽| 国产成人精品无码高潮| 日韩欧美中文字幕一区| 精品人妻一区二区三区麻豆91| 欧美一级日韩免费不卡| 97人妻精品一区二区三区动漫| 51久久夜色精品国产麻豆| 亚洲在线视频播放| 91精品国产色综合久久ai换脸| 国产精品久久久久久69| 日韩一卡二卡三卡国产欧美| 性色av蜜臀av| 亚洲精品国产美女| 国产亚洲依依| 丝袜美腿精品国产二区| www.久久久久.com| 97免费在线视频| 第84页国产精品| 国产精品爽爽ⅴa在线观看| 青草综合视频| 91九色蝌蚪成人| 精品亚洲自拍| 日韩免费毛片| 亚洲色图二区| 国产一区二区视频播放| 三级欧美韩日大片在线看| 亚洲精品一二三四五区| 极品美女销魂一区二区三区| 26uuu国产| 久久综合资源网| 91人妻一区二区三区蜜臀| 亚洲一区二区偷拍精品| 日本一区二区三区精品| 欧美三级视频在线| 黑人乱码一区二区三区av| 亚洲人成电影网站色xx| 日韩免费网站| 97精品在线视频| 久久亚洲人体| 国产伦精品一区二区三区高清版| 国产免费av一区二区三区| 欧美精三区欧美精三区| 精品少妇一区二区三区密爱| 亚洲免费观看在线观看| 日韩av一二三区| 欧美在线观看你懂的| av资源免费看| 亚洲日本成人网| 在线看三级电影| 国产成人在线播放| 日韩欧洲国产| 天堂一区二区三区 | 国产乱色精品成人免费视频| 精品福利av导航| 91在线不卡| 97在线看福利| 免费观看性欧美大片无片| 鲁丝一区鲁丝二区鲁丝三区| 91精品国产91久久综合| 国产xxxxx在线观看| 国产精品亚洲一区二区三区妖精| 丰满少妇高潮一区二区| 一区二区三区日韩| 这里只有精品国产| 日韩av综合网| 欧美wwww| 亚洲精品日韩激情在线电影| 国产欧美高清视频在线| 奇米影视亚洲色图| 精品亚洲aⅴ乱码一区二区三区| 国产福利短视频| 亚洲资源在线观看| 6—12呦国产精品| 亚洲一区999| 麻豆网站免费在线观看| αv一区二区三区| 97精品97| 色乱码一区二区三区在线| 99re66热这里只有精品3直播| 国语对白在线播放| 欧美日韩久久不卡| 成人18在线| 日韩免费中文字幕| 亚洲另类av| 欧美国产激情视频| 成人av电影免费在线播放| 538精品在线观看| 538prom精品视频线放| 日本暖暖在线视频| 国产精品视频白浆免费视频| 一区二区三区视频免费观看| 六月丁香婷婷激情| 99视频有精品| 精品欧美一区二区三区免费观看| 亚洲大胆人体在线| 国产伦理精品| 国产综合色一区二区三区| 精品动漫3d一区二区三区免费| 无码人妻少妇色欲av一区二区| 综合久久一区二区三区| 国产一区二区三区三州| 久久久久99精品久久久久| 国产精品日本一区二区三区在线| 在线视频福利一区| 极品少妇xxxx精品少妇| 疯狂试爱三2浴室激情视频| 欧美一级日韩一级| 菠萝蜜视频在线观看www入口| 亚洲综合一区在线| 国产精品国产精品88| 欧美一区二区三区在线看| 污污在线观看| 高清国产在线一区| 亚洲人成人一区二区三区| 国产精品久久无码| 色婷婷综合激情| 调教视频免费在线观看| 成人在线国产精品| 欧美日本一区二区高清播放视频| 国产精品91av| 欧美日韩激情小视频| 国产粉嫩一区二区三区在线观看| 国产欧美日韩精品专区| 影音先锋日韩在线| 亚洲成年人av| 91成人免费电影| sm国产在线调教视频| 国产伦精品一区二区三区四区免费 | 日韩三级精品| 国产a级片网站| 国产三级一区二区| 国产伦精品一区二区三区免.费| 久久91精品国产91久久跳| 嫩草国产精品入口| 污视频网站观看| 亚洲图片自拍偷拍| av中文字幕在线| av电影成人| 日韩精品三区四区| 欧美激情国产精品免费| 亚洲精品中文字幕有码专区| 日日夜夜亚洲精品| 免费观看国产精品视频| 中日韩av电影| 欧美自拍第一页| 国产精品爽爽爽爽爽爽在线观看| 狠狠综合久久| 黄色激情小视频| 亚洲国产精品va在线看黑人| jizz欧美| 五十路熟女丰满大屁股| 国产精品福利电影一区二区三区四区| 亚洲va天堂va欧美ⅴa在线| 国产精品99蜜臀久久不卡二区| 欧美 亚欧 日韩视频在线 | 天天做综合网| av黄色免费网站|