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

Linux 內(nèi)核靜態(tài)追蹤技術(shù)的實現(xiàn)

系統(tǒng) Linux
本文簡單分享一下內(nèi)核的靜態(tài)追蹤技術(shù)的實現(xiàn)。追蹤,其實就是收集代碼在執(zhí)行時的一些信息,以便協(xié)助排查問題。

[[434855]]

前言:最近在探索 Node.js 調(diào)試和診斷方向的內(nèi)容,因為 Node.js 提供的能力有時候可能無法解決問題,比如堆內(nèi)存沒有變化,但是 rss 一直上漲。所以需要深入一點去了解更多的排查問題方式。而這些方向往往都涉及到底層的東西,所以就自然需要去了解內(nèi)核提供的一些技術(shù),內(nèi)核提供的能力,經(jīng)過多年的發(fā)展,可謂是百花齊放,而且非常復雜。本文簡單分享一下內(nèi)核的靜態(tài)追蹤技術(shù)的實現(xiàn)。追蹤,其實就是收集代碼在執(zhí)行時的一些信息,以便協(xié)助排查問題。

1 Tracepoint

Tracepoints 是一種靜態(tài)插樁的技術(shù),實現(xiàn)雖然復雜,但是概念上比較簡單。比如我們打日志的時候,就類似這種情況,我們在業(yè)務(wù)代碼里,寫了很多 log 用來記錄進程在運行時的信息。Tracepoints 則是內(nèi)核提供的一種基于鉤子的插樁技術(shù)。不過和打日志不一樣的是,我們想在哪里打就在哪里加對應(yīng)的代碼,而 Tracepoints 則幾乎是依賴于內(nèi)核決定哪里可以插樁,說幾乎是因為我們也可以寫內(nèi)核模塊注冊到內(nèi)核來通知插樁點。下面來通過一個例子看一下 Tracepoint 的使用和實現(xiàn)(例子來自內(nèi)核文檔 tracepoints.rst)。分析之前先看一下兩個非常重要的宏。第一個是 DECLARE_TRACE。

  1. #define DECLARE_TRACE(name, proto, args)                \ 
  2.     __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),      \ 
  3.             cpu_online(raw_smp_processor_id()),     \ 
  4.             PARAMS(void *__data, proto),            \ 
  5.             PARAMS(__data, args)) 

我們只需要關(guān)注主體的實現(xiàn),而不需要關(guān)注參數(shù),繼續(xù)展開。

  1. #define __DECLARE_TRACE(name, proto, args, cond, data_proto, data_args) \ 
  2.     extern struct tracepoint __tracepoint_##name;           \ 
  3.     // 執(zhí)行鉤子函數(shù) 
  4.     static inline void trace_##name(proto)              \ 
  5.     {                               \ 
  6.         if (static_key_false(&__tracepoint_##name.key))     \ 
  7.             __DO_TRACE(&__tracepoint_##name,        \ 
  8.                 TP_PROTO(data_proto),           \ 
  9.                 TP_ARGS(data_args),         \ 
  10.                 TP_CONDITION(cond), 0);         \ 
  11.     }                               \ 
  12.     // 注冊鉤子函數(shù) 
  13.     static inline int                       \ 
  14.     register_trace_##name(void (*probe)(data_proto), void *data)    \ 
  15.     {                               \ 
  16.         return tracepoint_probe_register(&__tracepoint_##name,  \ 
  17.                         (void *)probe, data);   \ 
  18.     }                               \    
  19.     // 注銷鉤子函數(shù)                    
  20.     static inline int                       \ 
  21.     unregister_trace_##name(void (*probe)(data_proto), void *data)  \ 
  22.     {                               \ 
  23.         return tracepoint_probe_unregister(&__tracepoint_##name,\ 
  24.                         (void *)probe, data);   \ 
  25.     }                               \ 
  26.     static inline bool                      \ 
  27.     trace_##name##_enabled(void)                    \ 
  28.     {                               \ 
  29.         return static_key_false(&__tracepoint_##name.key);  \ 
  30.     } 

__DECLARE_TRACE 主要是實現(xiàn)了幾個函數(shù),我們只需要關(guān)注注冊鉤子和執(zhí)行鉤子函數(shù)(格式是 register_trace_${yourname} 和 trace_${yourame})。接下來看第二個宏 DEFINE_TRACE。

  1. #define DEFINE_TRACE_FN(name, reg, unreg)                \ 
  2.     struct tracepoint __tracepoint_##name#define DEFINE_TRACE(name)                      \ 
  3.     DEFINE_TRACE_FN(nameNULLNULL); 

我省略了一些代碼,DEFINE_TRACE 主要是定義了一個 tracepoint 結(jié)構(gòu)體。了解了兩個宏之后,來看一下如何使用 Tracepoint。

1.1 使用

include/trace/events/subsys.h

  1. #include <linux/tracepoint.h>DECLARE_TRACE(subsys_eventname, 
  2.     TP_PROTO(int firstarg, struct task_struct *p), 
  3.     TP_ARGS(firstarg, p)); 

首先在頭文件里通過 DECLARE_TRACE 宏定義了一系列函數(shù)。subsys/file.c

  1. #include <trace/events/subsys.h> 
  2.  
  3.  
  4.  
  5. DEFINE_TRACE(subsys_eventname);void somefct(void){ 
  6.  
  7.     ... 
  8.     trace_subsys_eventname(arg, task); 
  9.     ... 
  10.  
  11.  
  12.  
  13.  
  14. // 實現(xiàn)自己的鉤子函數(shù)并注冊到內(nèi)核 
  15.  
  16. void callback(...) {} 
  17.  
  18. register_trace_subsys_eventname(callback); 

然后在實現(xiàn)文件里通過 DEFINE_TRACE 定義一個 tracepoint 結(jié)構(gòu)體。接著調(diào)用 register_trace_subsys_eventname 函數(shù)把自定義的鉤子函數(shù)注冊到內(nèi)核,然后在需要收集信息的地方調(diào)用處理鉤子的函數(shù) trace_subsys_eventname。

1.2 實現(xiàn)

了解了使用之后,接下來看看實現(xiàn)。首先看一下注冊鉤子函數(shù)。

  1. int tracepoint_probe_register(struct tracepoint *tp, void *probe, void *data){ 
  2.     return tracepoint_probe_register_prio(tp, probe, data, TRACEPOINT_DEFAULT_PRIO); 
  3.  
  4.  
  5.  
  6.  
  7. int tracepoint_probe_register_prio(struct tracepoint *tp, void *probe, 
  8.  
  9.                    void *data, int prio){ 
  10.     struct tracepoint_func tp_func; 
  11.     int ret; 
  12.  
  13.     mutex_lock(&tracepoints_mutex); 
  14.     tp_func.func = probe; 
  15.     tp_func.data = data; 
  16.     tp_func.prio = prio; 
  17.     ret = tracepoint_add_func(tp, &tp_func, prio); 
  18.     mutex_unlock(&tracepoints_mutex); 
  19.     return ret; 
  20.  

tracepoint_probe_register_prio 中定義了一個 tracepoint_func 結(jié)構(gòu)體用于表示鉤子信息,然后調(diào)用 tracepoint_add_func,其中 tp 就剛才自定義的 tracepoint 結(jié)構(gòu)體。

  1. static int tracepoint_add_func(struct tracepoint *tp, struct tracepoint_func *func, int prio){ 
  2.     struct tracepoint_func *old, *tp_funcs; 
  3.     int ret; 
  4.     // 拿到鉤子列表 
  5.     tp_funcs = rcu_dereference_protected(tp->funcs, lockdep_is_held(&tracepoints_mutex)); 
  6.     // 插入新的鉤子到列表 
  7.     old = func_add(&tp_funcs, func, prio); 
  8.     rcu_assign_pointer(tp->funcs, tp_funcs); 
  9.     return 0;}static struct tracepoint_func * func_add(struct tracepoint_func **funcs, struct tracepoint_func *tp_func, 
  10.      int prio){ 
  11.     struct tracepoint_func *new; 
  12.     int nr_probes = 0; 
  13.     int pos = -1; 
  14.     /* + 2 : one for new probe, one for NULL func */ 
  15.     new = allocate_probes(nr_probes + 2); 
  16.     pos = 0; 
  17.     new[pos] = *tp_func; 
  18.     new[nr_probes + 1].func = NULL
  19.     *funcs = new; 
  20.  

注冊函數(shù)的邏輯其實就是往自定義的結(jié)構(gòu)體的隊列里插入一個新的節(jié)點。接下來再看一下處理鉤子的邏輯。

  1. #define __DO_TRACE(tp, proto, args, cond, rcuidle)          \ 
  2.     do {                                \ 
  3.         struct tracepoint_func *it_func_ptr;            \ 
  4.         void *it_func;                      \ 
  5.         void *__data;                       \ 
  6.         int __maybe_unused __idx = 0;               \ 
  7.         // 拿到隊列 
  8.         it_func_ptr = rcu_dereference_raw((tp)->funcs);     \ 
  9.         // 非空則執(zhí)行里面的節(jié)點的回調(diào) 
  10.         if (it_func_ptr) {                  \ 
  11.             do {                        \ 
  12.                 it_func = (it_func_ptr)->func;      \ 
  13.                 __data = (it_func_ptr)->data;       \ 
  14.                 ((void(*)(proto))(it_func))(args);  \ 
  15.             } while ((++it_func_ptr)->func);        \ 
  16.         }                           \ 
  17.     } while (0) 

邏輯上和我們在應(yīng)用層的類似。在執(zhí)行鉤子,也就是我們的回調(diào)時,我們可以通過內(nèi)核接口把信息寫到 ring buffer,然后應(yīng)用層可以通過 debugfs 獲取到這個信息。

2 trace event

有了 Tracepoint 機制后,我們就可以寫模塊加載到內(nèi)核中實現(xiàn)自己的插樁點。但是內(nèi)核也為我們內(nèi)置提供了非常多的插樁點。具體是通過 trace event 來實現(xiàn)的。下面看一個例子。

  1. #define TRACE_EVENT(name, proto, args, struct, assign, print)   \ 
  2.     DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))TRACE_EVENT(consume_skb, 
  3.  
  4.     TP_PROTO(struct sk_buff *skb), 
  5.  
  6.     TP_ARGS(skb), 
  7.  
  8.     TP_STRUCT__entry( 
  9.         __field(    void *, skbaddr ) 
  10.     ), 
  11.  
  12.     TP_fast_assign( 
  13.         __entry->skbaddr = skb; 
  14.     ), 
  15.  
  16.     TP_printk("skbaddr=%p", __entry->skbaddr)); 

上面定義了一個宏 TRACE_EVENT,它本質(zhì)上是對 DECLARE_TRACE 的封裝,所以這里是定義了一系列的函數(shù)(注冊鉤子、處理鉤子)。然后在 consume_skb 函數(shù)中處理了注冊的鉤子。

  1. void consume_skb(struct sk_buff *skb){ 
  2.     trace_consume_skb(skb); 
  3.     __kfree_skb(skb); 
  4.  

3. 總結(jié)

內(nèi)核提供了非常豐富但是也非常復雜的機制,從而用戶可以通過內(nèi)核的能力獲取到更底層的數(shù)據(jù),用以排查問題和做性能優(yōu)化。我們可以看到插樁的這種機制是一種靜態(tài)的機制,我們通常需要依賴當前版本的內(nèi)核所支持的樁,從而獲得對應(yīng)的信息,但其實內(nèi)核也提供了動態(tài)追蹤的能力,可以實現(xiàn)熱插拔獲取信息的能力。總的來說,Linux 下的追蹤技術(shù)多種多樣,雖然非常復雜,但是上層也提供了各種更方便的工具,這些能力是我們深入排查問題的利器。

 

責任編輯:姜華 來源: 編程雜技
相關(guān)推薦

2021-11-15 04:00:07

Linux 內(nèi)核動態(tài)

2025-04-02 00:33:00

2025-04-01 02:00:22

2016-12-08 09:57:09

LinuxDTrace技術(shù)

2022-03-03 18:18:53

BPF解釋器系統(tǒng)

2021-07-11 06:45:18

Linux內(nèi)核靜態(tài)

2021-10-06 09:46:17

trace-cmd追蹤內(nèi)核Linux

2025-05-15 09:12:27

2025-03-07 08:30:00

pwruLinux網(wǎng)絡(luò)包追蹤

2025-01-02 11:06:22

2023-03-10 14:56:37

Linuxconnect系統(tǒng)

2023-03-01 23:53:30

Linuxshutdown進程

2023-03-01 23:56:11

2023-02-28 09:47:42

2024-04-15 11:24:32

庫存跟蹤技術(shù)NFC藍牙

2021-09-30 09:43:11

Linux內(nèi)核Zstd補丁

2023-11-24 11:24:16

Linux系統(tǒng)

2022-05-24 12:34:32

Docker容器Linux容器進程

2017-01-12 19:15:03

Linux內(nèi)核調(diào)試自構(gòu)proc

2013-09-24 10:48:32

Google追蹤技術(shù)Cookies
點贊
收藏

51CTO技術(shù)棧公眾號

91免费版黄色| 亚洲色图27p| 欧美成人在线免费| 麻豆精品视频在线观看视频| 亚洲精品理论片| 9色视频在线观看| 久久久久黄色片| 日韩av网站在线免费观看| 国产日韩欧美不卡在线| 欧美国产日产韩国视频| 91女神在线观看| 中文字幕在线观看播放| 日韩高清一区在线| 欧美日韩成人免费| 国产真人做爰视频免费| 成人性生交大片免费网站 | 亚洲热线99精品视频| 国产一级片91| 成a人v在线播放| 福利一区二区在线观看| 久久天天躁狠狠躁夜夜av| 激情婷婷综合网| 男男gaygays亚洲| 伊人久久一区二区| av在线播放网| 成人黄色a**站在线观看| 国产亚洲精品激情久久| av动漫在线看| 国产婷婷视频在线| 欧美理论在线观看| 任你弄精品视频免费观看| 国产亚洲人成网站| 成人av播放| 国产一区二区三区在线观看| 成人免费在线播放| 亚洲国产精品久久久久秋霞蜜臀 | 国产精品福利小视频| 免费在线观看你懂的| 欧美xo影院| 亚洲一二三四区| 中文一区一区三区免费| 精品人妻一区二区三区麻豆91 | 国产玉足脚交久久欧美| 欧美一区二区三区黄片| 亚洲资源av| 欧美精品第一页在线播放| 国产老熟女伦老熟妇露脸| 久九九久频精品短视频| 欧美国产成人在线| 青青影院一区二区三区四区| 中文字幕资源网| 日本成人在线视频网站| 337p日本欧洲亚洲大胆色噜噜| 午夜啪啪福利视频| 成人av一区| 国产精品色哟哟| 欧美综合激情| 成人高潮成人免费观看| 国产精品77777| 亚洲最大福利网| 精品国产区一区二| 国产自产高清不卡| 亚洲一区二区三区毛片| 国产一卡二卡在线播放| 国产成人黄色| 国产亚洲精品久久| 国产精品成人在线视频| 欧美中文高清| 精品久久久久一区| 亚洲av成人片无码| 欧美aaaaaaaa牛牛影院| 欧美日韩黄色一区二区| 日韩国产一级片| √最新版天堂资源网在线| 国产精品天天摸av网| 成人免费视频视频在| 波多野结衣在线观看视频| 欧美va亚洲va日韩∨a综合色| 精品久久久久久最新网址| 亚洲老女人av| 国产精品视频一区视频二区 | 视频一区视频二区欧美| 色系网站成人免费| 九热视频在线观看| 99视频这里有精品| 精品欧美乱码久久久久久1区2区| 国产成人久久777777| 91亚洲天堂| 欧美日韩国产精品专区| 成人污网站在线观看| 在线看免费av| 一二三区精品视频| 欧美伦理片在线看| 伊人久久大香线蕉av超碰| 欧美丰满高潮xxxx喷水动漫 | 久久性天堂网| 国产欧美婷婷中文| 欧美 日韩 国产 精品| 国产乱子伦视频一区二区三区 | 一区二区三区四区精品| 日本黄色免费观看| 日韩综合精品| 午夜免费久久久久| 一级特黄aaaaaa大片| 日本成人中文字幕| 国产另类自拍| аⅴ资源新版在线天堂| 国产片一区二区| 少妇大叫太大太粗太爽了a片小说| yjizz视频网站在线播放| 99久久精品免费精品国产| 成人区精品一区二区| www.97av| 欧美国产激情一区二区三区蜜月| 国内精品国语自产拍在线观看| 99热这里只有精品66| 精品一区二区三区免费播放| 国产精品免费在线免费| 无码视频一区二区三区| 性高湖久久久久久久久| 国模私拍视频一区| 国产精品久久久久久久成人午夜| 天堂va蜜桃一区二区三区漫画版| 久久人人爽人人爽人人片亚洲 | 日本少妇高潮喷水xxxxxxx| 丁香综合av| 精品偷拍各种wc美女嘘嘘| 欧美双性人妖o0| 亚洲精品888| 欧洲成人午夜免费大片| 可以免费看的av毛片| 中文在线日韩| 国产欧美日韩丝袜精品一区| 中文字幕你懂的| 久久亚洲精精品中文字幕早川悠里| 国产激情一区二区三区在线观看 | 日韩av高清在线| 亚洲另类在线视频| 精品久久久噜噜噜噜久久图片 | 精品国产一区二区三区小蝌蚪| 日韩av在线网站| 99久久99久久精品国产| 欧美+日本+国产+在线a∨观看| 一道本无吗dⅴd在线播放一区| 亚洲成人福利视频| 91欧美在线| 国产精品自拍网| 精品999视频| 在线观看视频一区二区欧美日韩| 狠狠97人人婷婷五月| 欧美亚洲大片| 日韩精品在线视频美女| 性久久久久久久久久| 美女少妇全过程你懂的久久| 国产视频精品自拍| 日本在线视频中文字幕| 国产精品日韩| 成人av男人的天堂| av电影在线地址| 亚洲精品白浆高清久久久久久| 欧美性生交xxxxx| 影音先锋中文在线视频| 国产在线1区| 亚洲精品乱码久久久久久久久 | 亚欧日韩另类中文欧美| 日韩成人在线观看| 国产精品6666| 91免费版在线看| 国产午夜伦鲁鲁| 免费一区二区| 国产精品夫妻激情| 北岛玲一区二区三区| 亚洲一区二区三区三| 欧美国产激情视频| 欧美视频网址| 91精品久久久久久久久久| 青青草手机在线| 色av综合在线| 中文字幕手机在线观看| 国产一区成人| 翔田千里亚洲一二三区| 亚洲性图自拍| 亚洲国产精品va| 久久精品五月天| 中文字幕乱码久久午夜不卡| 日韩精品xxxx| 国产一区二区三区网| 亚洲欧洲日韩| 亚洲经典一区| 国产高清欧美| 欧美三级电影网址| 免费看一区二区三区| 亚洲一区 中文字幕| 中日韩av在线播放| 真实国产乱子伦对白视频| 日韩av电影在线网| 欧洲s码亚洲m码精品一区| 日韩电影在线观看中文字幕| 国产精品无码永久免费888| 欧美aaaaaaaaaaaa| 秋霞影院一区| 91成人app| 欧美久久精品| 欧美欧美天天天天操| 国产精品亚洲综合色区韩国| 久久精品国产一区| www.久久精品.com| 欧洲视频一区二区| 真实国产乱子伦对白在线| 久久99精品久久久久久动态图| 丁香五月网久久综合| 91在线中字| 亚洲欧洲国产伦综合| 三级视频在线观看| 国产精品久久久久影院| 99视频在线视频| 亚洲午夜精品一区二区国产| 91精品国产综合久久男男| yiren22综合网成人| 欧美日韩成人综合天天影院| 免费啪视频在线观看| 欧美午夜国产| 韩日午夜在线资源一区二区| 超碰资源在线| 欧美成年人网站| 国产福利在线看| 精品无人区乱码1区2区3区在线| 精品无码一区二区三区蜜臀| 韩国三级电影一区二区| 自拍另类欧美| 日韩一区电影| 色综合久久av| 亚洲宅男一区| 久久久福利视频| 51亚洲精品| 成人区精品一区二区| 国产高清视频色在线www| 亚洲欧美制服丝袜| 中国老头性行为xxxx| 17c精品麻豆一区二区免费| 91丨porny丨九色| 免费成人小视频| 密臀av一区二区三区| 国产精品国产一区| 亚洲天堂电影网| 国产一区二区在线| 亚洲乱码国产乱码精品天美传媒| 韩国精品视频在线观看| 久久国内精品一国内精品| 国产激情视频在线播放| 亚洲电影中文字幕在线观看| 国产 中文 字幕 日韩 在线| 美女精品一区| 国产美女三级视频| 久久狠狠一本精品综合网| 在线看成人av电影| 日韩欧美自拍| 美女在线免费视频| 一区二区三区在线电影| 久久精品女人的天堂av| 亚洲人成网站在线在线观看| 欧美激情在线观看视频| 啊v视频在线| 最近2019年手机中文字幕| 无码国精品一区二区免费蜜桃| 色先锋aa成人| 国产精品久久久久久免费| 亚洲精品免费电影| 国产亚洲欧美久久久久| 国产精品日韩精品欧美在线| 久久久久国产免费| 97久久超碰精品国产| 色免费在线视频| 国产麻豆视频精品| 一级国产黄色片| 国产人久久人人人人爽| aa片在线观看视频在线播放| 美美哒免费高清在线观看视频一区二区| 久久精品网站视频| 久久亚洲不卡| 五月天av在线播放| 高清av一区二区| 人妻体内射精一区二区| 成人v精品蜜桃久久一区| 182午夜在线观看| 丁香婷婷综合色啪| 白白色免费视频| 自拍偷拍亚洲激情| 日韩三级免费看| 欧美视频一区二区| aa视频在线免费观看| 欧美精品久久久久久久多人混战| 久草精品视频在线观看| 自拍视频在线观看一区二区| 国产在线综合视频| 一区二区三区四区蜜桃| 国产又粗又硬又长又爽| 久久久久久久综合色一本| 日本一级片在线播放| 国产老妇另类xxxxx| 三上悠亚av一区二区三区| 亚洲专区在线| 奇米777在线视频| 久久久久久久综合色一本| 一级片手机在线观看| 91免费版在线| 黄色一级片中国| 日本乱码高清不卡字幕| 波多野结衣在线观看一区| 欧洲人成人精品| 丰满肉肉bbwwbbww| yellow中文字幕久久| 尤物视频在线免费观看| 色诱女教师一区二区三区| 亚洲搞黄视频| 欧美亚洲第一页| 中文字幕久久精品一区二区| 亚洲精品欧美日韩| 精品国产一区二区三区小蝌蚪 | 玛雅亚洲电影| 91久久偷偷做嫩草影院| 国产精品白丝av嫩草影院| 丁香五月网久久综合| 欧美电影在线观看完整版| 国产经典一区二区三区| 青青草这里只有精品| 国产精品免费在线 | 99久久99久久精品国产片| 香蕉大人久久国产成人av| 成人免费视频观看视频| 99这里只有精品视频| 久久久福利视频| 在线 亚洲欧美在线综合一区| 玖玖精品在线视频| 99精品国产福利在线观看免费| 青草网在线观看| 韩日欧美一区二区三区| www.17c.com喷水少妇| 91在线你懂得| 国产精品第九页| 91麻豆精品91久久久久久清纯| 一区二区三区日| 国产亚洲精品va在线观看| 国产99在线观看| 亚洲综合在线中文字幕| 狠狠综合久久av一区二区蜜桃 | 图片小说视频色综合| 五月天婷婷激情视频| 国产视频一区二区在线| 二区视频在线观看| 日韩精品视频免费在线观看| 岛国片av在线| 国产在线精品二区| 亚洲影视综合| 日本黄色免费观看| 色婷婷久久久综合中文字幕| 天堂中文在线资源| 亲子乱一区二区三区电影| 少妇一区二区视频| 999精品网站| 国产精品久久久久影院色老大| 波多野结衣 久久| 亚洲一区二区久久久| 色猫猫成人app| 亚洲在线不卡| 国产成人免费视频精品含羞草妖精| 国产sm调教视频| 欧美视频一区在线观看| 91网址在线观看| 国产精品麻豆免费版| 羞羞答答国产精品www一本| 国精产品一区二区三区| 欧美性受xxxx| 在线观看的网站你懂的| 国产在线久久久| 黄色成人在线网站| 熟女人妻在线视频| 在线观看亚洲精品视频| 大片免费在线观看| 成人免费看黄网站| 欧美a级片网站| 疯狂揉花蒂控制高潮h| 91国在线观看| 日本成人不卡| 欧美在线一二三区| 蜜桃视频一区二区三区在线观看| 一级黄色录像视频| 在线免费不卡电影| 久久一卡二卡| 日韩高清国产一区在线观看| 精品一区二区综合| 国产精品国产三级国产专区52| 在线视频日本亚洲性| 久久的色偷偷| 国产三级日本三级在线播放| 亚洲视频一二三| 亚洲色大成网站www| 成人性教育视频在线观看| 精品动漫3d一区二区三区免费| 美国黄色特级片|