精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

亚洲第一区在线观看| 成人黄页在线观看| 在线不卡a资源高清| 午夜一区二区三区| 国产 日韩 欧美 在线| 国产伦乱精品| 午夜国产不卡在线观看视频| 久久精品国产第一区二区三区最新章节 | 欧美xxxxxx| 国产清纯白嫩初高生在线观看91| 欧美性资源免费| 中文字幕第24页| 99精品视频在线免费播放| 一二三四区精品视频| 国产偷久久久精品专区| 亚洲女人****多毛耸耸8| 亚洲www在线观看| 久久久久无码国产精品| 四虎5151久久欧美毛片| 在线观看成人小视频| 日本黄色播放器| av中文字幕免费在线观看| 亚洲成人在线| 亚洲欧洲免费视频| 男人的天堂最新网址| 黑人另类精品××××性爽| 久久蜜桃av一区二区天堂| 国产一区视频在线播放| 国产精品国产三级国产专业不| 精品999日本久久久影院| 亚洲欧美视频在线观看| 国产精品加勒比| 狠狠人妻久久久久久综合| 91亚洲自偷观看高清| 精品国产一区二区精华| 日韩手机在线观看视频| 97人人在线| 99久久久久免费精品国产| 国产男人精品视频| 久久精品www人人爽人人| 免费成人av| 91精品久久久久久久99蜜桃| 少妇高潮喷水在线观看| 国产在线一区二区视频| 国产盗摄视频一区二区三区| 国产精品wwwwww| 国产情侣在线视频| 青青草97国产精品麻豆| 日韩av影院在线观看| 国产精品中文久久久久久| 国产黄色大片在线观看| 国产精品成人网| 好吊色欧美一区二区三区四区 | 91精品久久久久久久蜜月| 亚洲成av人乱码色午夜| 亚洲黄色av片| 精品欧美一区二区三区在线观看 | 欧美精品18| 一区二区三区四区视频| 天堂www中文在线资源| 久久av影院| 色婷婷久久久久swag精品| 日本xxxxx18| av在线免费观看网站| 久久综合五月天婷婷伊人| 国产精品久久久久久久久久久久冷 | 神马电影在线观看| 成人免费视频国产在线观看| 国产精品jizz在线观看麻豆| 亚洲天堂视频网站| 亚洲在线成人| 欧美极品在线播放| 欧美极品视频在线观看| 国产成人福利av| 欧美va天堂va视频va在线| 日韩av在线中文| av成人亚洲| 欧美主播一区二区三区美女| 国产成人精品视频ⅴa片软件竹菊| 松下纱荣子在线观看| 精品magnet| 欧美亚洲精品一区二区| 黄色激情在线播放| 欧美日韩亚洲一区二区三区| 可以在线看的av网站| 漫画在线观看av| 色综合天天综合网国产成人综合天| 尤物av无码色av无码| 97人人在线视频| 色综合色狠狠天天综合色| 亚洲 欧美 日韩 国产综合 在线 | 亚洲欧美日韩人成在线播放| 91九色国产ts另类人妖| 色老头在线观看| 亚洲欧美国产77777| 精品视频在线观看一区二区| 爱情岛论坛亚洲品质自拍视频网站| 亚洲成人精品在线观看| 日日碰狠狠添天天爽超碰97| 僵尸再翻生在线观看| 91国产免费观看| 天堂在线中文在线| 超碰97久久国产精品牛牛| 国产婷婷成人久久av免费高清| jizz日本免费| 欧美www视频在线观看| 免费不卡欧美自拍视频| 国产乱码久久久久久| 久久久久国产精品午夜一区| 成人女保姆的销魂服务| 亚洲av无码一区二区三区dv| 91色综合久久久久婷婷| 亚洲激情图片| 成人一级福利| 欧美性高清videossexo| 亚欧美在线观看| avtt综合网| 亚洲天堂一区二区三区| 国产成人av免费在线观看| 韩国在线一区| 国产精品扒开腿做爽爽爽男男| 91亚洲国产成人精品一区| 成人免费毛片aaaaa**| 亚洲一二三区精品| 91精品产国品一二三产区| 欧美videos中文字幕| 美女网站视频色| 久久精品系列| 国产日韩精品推荐| 影音先锋男人资源在线| 欧美午夜不卡在线观看免费| 日本xxxx裸体xxxx| 国内精品99| 91香蕉国产在线观看| 成人影视在线播放| 精品久久久久久国产91| 少妇伦子伦精品无吗| 午夜精品视频一区二区三区在线看| 国产盗摄xxxx视频xxx69| 亚洲精品免费在线观看视频| 国产精品白丝在线| 波多野结衣天堂| 亚洲国产欧美日韩在线观看第一区| 欧美精品在线视频观看| 亚洲一区在线观| 国产日韩三级在线| 国内外免费激情视频| 先锋影音国产精品| 欧美亚洲国产日韩2020| 神马午夜在线观看| 亚洲成人av免费| 中文字幕在线视频播放| 激情综合视频| 精品国产一区二区三区四区精华| av午夜在线观看| 精品欧美一区二区三区精品久久 | 青青草免费在线| 五月天一区二区| 亚洲国产精品无码久久久久高潮| 国产精品九九| 国产亚洲一区在线播放| 国产夫妻在线播放| 亚洲精品中文字幕有码专区| 欧产日产国产69| 久久久久国产精品麻豆ai换脸 | 国产精品白丝jk黑袜喷水| 中文字幕中文字幕在线中心一区| 成人97精品毛片免费看| 不卡av在线网站| 亚洲国产精品suv| 亚洲国产精品尤物yw在线观看| 国产大尺度视频| 国产精品亚洲产品| 欧美日韩国产三区| 成人午夜sm精品久久久久久久| 日韩中文字幕视频在线观看| 中文字幕免费观看视频| 亚洲欧美怡红院| 欧美日韩一区二区区别是什么| 精品69视频一区二区三区Q| 黑人另类av| 久久av日韩| 欧美日韩成人精品| 少妇激情av一区二区| 欧美性色综合网| 四虎永久免费在线| 成人黄色在线看| 国内自拍视频网| 午夜久久久久| 欧美一级二级三级九九九| 久久不卡日韩美女| 欧美精品videos另类日本| 日韩欧美在线观看一区二区| 欧美三级日韩三级| 国产一级一片免费播放| 国产日韩欧美精品一区| 欧美xxxxxbbbbb| 玖玖精品视频| 50度灰在线观看| av在线不卡顿| 国产传媒一区二区| 国精品产品一区| 91精品国产91| 国产日产一区二区三区| 亚洲精品久久久久久久久久久久久| 中文字幕精品无码亚| 亚洲一区二区三区爽爽爽爽爽| 手机免费看av| 成人免费毛片片v| 日韩欧美理论片| 久久综合狠狠| 人体内射精一区二区三区| 日韩欧美精品| 欧美性大战久久久久| 精品中文字幕一区二区三区| 国产成人精品国内自产拍免费看 | 日韩成人影院| 久久久久se| 亚洲一区二区三区四区电影| 国产精品日韩在线观看| 99热99re6国产在线播放| 久久久国产精品亚洲一区| 国产精品无码2021在线观看| 精品成人一区二区三区四区| 国产乱叫456在线| 一本色道久久加勒比精品 | 原创国产精品91| 免费观看黄色av| 欧美一级理论性理论a| 亚洲成人第一网站| 亚洲一区二区三区美女| japanese中文字幕| 91在线视频观看| 九九九久久久久久久| 日本欧美一区二区在线观看| 久久久噜噜噜www成人网| 欧美日本一区二区视频在线观看| 先锋影音欧美| 欧美精品国产白浆久久久久| 动漫美女被爆操久久久| 黑人一区二区三区| 日韩av毛片网| 国模一区二区| 青青在线视频一区二区三区| 波多野在线观看| 久久久久久久久久久久av| 激情成人四房播| 最新的欧美黄色| 丁香婷婷在线观看| 亚洲欧美三级伦理| 清纯唯美亚洲色图| 91精品福利在线一区二区三区 | 91精品国产品国语在线不卡| 这里只有精品国产| 91精品办公室少妇高潮对白| 久久久蜜桃一区二区| 色婷婷精品久久二区二区蜜臂av| 青青操免费在线视频| 亚洲图片欧美一区| 国产成人免费看| 精品久久久久久国产91| 99视频在线看| 色综合一个色综合亚洲| 一级片中文字幕| 欧美视频一区二区三区…| 九九视频在线免费观看| 午夜精品福利一区二区三区av | 99热这里只有精品2| 久久99热99| 小日子的在线观看免费第8集| 国产一区二区h| 国产精品二区视频| 99精品1区2区| 国产成人无码精品久久二区三| 91麻豆国产福利精品| 少妇精品一区二区三区| 中文字幕第一区二区| 亚洲激情图片网| 综合久久久久久| 欧美三级韩国三级日本三斤在线观看| 亚洲成人av福利| 国产一区二区视频免费| 91精品国产综合久久小美女| 亚洲大尺度视频| 精品国产乱码久久久久久夜甘婷婷| www.精品久久| 日韩精品极品毛片系列视频| 国产毛片av在线| 久久精品国产欧美亚洲人人爽| 动漫一区二区| 欧洲亚洲女同hd| 欧美成人一二区| 国产美女精品在线观看| 精品在线观看入口| 99精品视频网站| 亚洲一区久久| 最新av免费在线观看| 粉嫩嫩av羞羞动漫久久久| 色噜噜日韩精品欧美一区二区| 国产精品人妖ts系列视频| 蜜臀久久精品久久久用户群体| 欧美日韩国产一区在线| 中国一级特黄视频| 欧美videos中文字幕| 天天综合天天综合| 久久精品福利视频| 咪咪网在线视频| 国产精品网红福利| 日韩大胆成人| 欧美一级黄色录像片| 亚洲精品影视| 精品人妻一区二区三区免费| 久久蜜桃av一区二区天堂| av激情在线观看| 欧美系列亚洲系列| 欧美一级淫片aaaaaa| 在线播放国产精品| 亚洲欧洲日本韩国| 亚洲一区二区中文| 国产日产精品_国产精品毛片| 97中文字幕在线| 久久精品国产久精国产爱| 东京热av一区| 亚洲精品大片www| 中文字幕日韩第一页| 亚洲成人av在线| 色呦呦在线免费观看| 国产精品一区二区电影| 任你躁在线精品免费| 日韩一级性生活片| 精品无人码麻豆乱码1区2区| 久久精品国产亚洲AV熟女| 亚洲电影在线播放| 97在线公开视频| 在线观看视频99| 欧美动物xxx| 精品久久蜜桃| 在线观看的日韩av| 污网站免费观看| 亚洲欧美日韩综合aⅴ视频| 亚洲高清视频免费观看| 亚洲人av在线影院| 黄在线观看免费网站ktv| caoporn国产精品免费公开| 欧美福利影院| 香蕉视频色在线观看| 国产精品无人区| 中文字幕精品无码亚| 亚洲视频精品在线| 伊人色综合一区二区三区影院视频 | free性欧美16hd| 国产69精品久久久久9999apgf| 亚洲国产精品成人| 国产精品久久a| 国产精品久久毛片a| 国产女优在线播放| 中文字幕亚洲图片| 黄色成人在线观看网站| 五月天亚洲综合| 狠狠色丁香久久婷婷综| 亚洲不卡的av| 欧美日韩免费一区二区三区| 美女写真理伦片在线看| 欧美在线视频一二三| 91成人短视频| 97超碰在线视| 丁香婷婷综合网| 日韩精品一区二区av| 亚洲国产美女精品久久久久∴| 樱花草涩涩www在线播放| 免费成人看片网址| 免费看的黄色欧美网站| 国产精品www爽爽爽| 在线不卡中文字幕播放| av网站大全在线| 狠狠爱一区二区三区| 久久九九99| 182在线观看视频| 日韩精品一区二区三区中文精品| 波多野结衣在线播放| 日韩三级电影免费观看| 青娱乐精品视频在线| 日韩一级片在线免费观看| 欧美一二三四区在线| 美足av综合网| 欧洲在线视频一区| 狠狠色丁香久久婷婷综合_中| 久久午夜无码鲁丝片| 亚洲日韩欧美视频| 青娱乐极品盛宴一区二区| 97久久国产亚洲精品超碰热| 2024国产精品视频| 国产又粗又猛又黄视频| 欧美巨猛xxxx猛交黑人97人| 美女福利一区| 日日噜噜夜夜狠狠| 亚洲国产综合视频在线观看| 免费国产在线视频| 国产成人女人毛片视频在线| 日本中文在线一区|