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

如何正確獲取容器的CPU利用率?

系統 Linux
Linux 中的定時器會以某個固定節拍,比如 1 ms 一次采樣各個 cpu 核的使用情況,然后將當前節拍的所有時間都累加到 user/nice/system/irq/softirq/io_wait/idle 中的某一項上。

大家好,我是飛哥!

在線上服務器觀察線上服務運行狀態的時候,絕大多數人都是喜歡先用 top 命令看看當前系統的整體 cpu 利用率。例如,隨手拿來的一臺機器,top 命令顯示的利用率信息如下

圖片

這個輸出結果說簡單也簡單,說復雜也不是那么容易就能全部搞明白的。例如:

問題 1:top 輸出的利用率信息是如何計算出來的,它精確嗎?問題 2:ni 這一列是 nice,它輸出的是 cpu 在處理啥時的開銷?問題 3:wa 代表的是 io wait,那么這段時間中 cpu 到底是忙碌還是空閑?

今天我們對 cpu 利用率統計進行深入的學習。通過今天的學習,你不但能了解 cpu 利用率統計實現細節,還能 nice、io wait 等指標有更深入的理解。

區別于以往的文章,今天我們不直接進入 Linux 實現,而是先從自己的思考開始!

一、先思考一下

拋開 Linux 的實現先不談,如果有如下需求,有一個四核服務器,上面跑了四個進程。

圖片

讓你來設計計算整個系統 cpu 利用率的這個需求,支持像 top 命令這樣的輸出,滿足以下要求:

  • cpu 使用率要盡可能地準確
  • 要能地體現秒級瞬時 cpu 狀態

可以先停下來閱讀思考幾分鐘。

圖片

好,思考結束。經過思考你會發現,這個看起來很簡單的需求,實際還是有點小復雜的。

其中一個思路是把所有進程的執行時間都加起來,然后再除以系統執行總時間*4。

圖片

這個思路是沒問題的,用這種方法統計很長一段時間內的 cpu 利用率是可以的,統計也足夠的準確。

但只要用過 top 你就知道 top 輸出的 cpu 利用率并不是長時間不變的,而是默認 3 秒為單位會動態更新一下(這個時間間隔可以使用 -d 設置)。我們的這個方案體現總利用率可以,體現這種瞬時的狀態就難辦了。你可能會想到那我也 3 秒算一次不就行了?但這個 3 秒的時間從哪個點開始呢。粒度很不好控制。

上一個思路問題核心就是如何解決瞬時問題。提到瞬時狀態,你可能就又來思路了。那我就用瞬時采樣去看,看看當前有幾個核在忙。四個核中如果有兩個核在忙,那利用率就是 50%。

這個思路思考的方向也是正確的,但是問題有兩個:

  • 你算出的數字都是 25% 的整數倍
  • 這個瞬時值會導致 cpu 使用率顯示的劇烈震蕩。

比如下圖:

圖片

在 t1 的瞬時狀態看來,系統的 cpu 利用率毫無疑問就是 100%,但在 t2 時間看來,使用率又變成 0% 了。思路方向是對的,但顯然這種粗暴的計算無法像 top 命令一樣優雅地工作。

我們再改進一下它,把上面兩個思路結合起來,可能就能解決我們的問題了。在采樣上,我們把周期定的細一些,但在計算上我們把周期定的粗一些。

我們引入采用周期的概念,定時比如每 1 毫秒采樣一次。如果采樣的瞬時,cpu 在運行,就將這 1 ms 記錄為使用。這時會得出一個瞬時的 cpu 使用率,把它都存起來。

圖片

在統計 3 秒內的 cpu 使用率的時候,比如上圖中的 t1 和 t2 這段時間范圍。那就把這段時間內的所有瞬時值全加一下,取個平均值。這樣就能解決上面的問題了,統計相對準確,避免了瞬時值劇烈震蕩且粒度過粗(只能以 25 %為單位變化)的問題了。

可能有同學會問了,假如 cpu 在兩次采樣中間發生變化了呢,如下圖這種情況。

圖片

在當前采樣點到來的時候,進程 A 其實剛執行完,有一點點時間沒有既沒被上一個采樣點統計到,本次也統計不到。對于進程 B,其實只開始了一小段時間,把 1 ms 全記上似乎有點多記了。

確實會存在這個問題,但因為我們的采樣是 1 ms 一次,而我們實際查看使用的時候最少也有是秒級別地用,會包括有成千上萬個采樣點的信息,所以這種誤差并不會影響我們對全局的把握。

事實上,Linux 也就是這樣來統計系統 cpu 利用率的。雖然可能會有誤差,但作為一項統計數據使用已經是足夠了的。在實現上,Linux 是將所有的瞬時值都累加到某一個數據上的,而不是真的存了很多份的瞬時數據。

接下來就讓我們進入 Linux 來查看它對系統 cpu 利用率統計的具體實現。

二、top 命令使用數據在哪兒

上一節我們說的 Linux 在實現上是將瞬時值都累加到某一個數據上的,這個值是內核通過 /proc/stat 偽文件來對用戶態暴露。Linux 在計算系統 cpu 利用率的時候用的就是它。

整體上看,top 命令工作的內部細節如下圖所示。

圖片

  • top 命令訪問 /proc/stat 獲取各項 cpu 利用率使用值
  • 內核調用 stat_open 函數來處理對 /proc/stat 的訪問
  • 內核訪問的數據來源于 kernel_cpustat 數組,并匯總
  • 打印輸出給用戶態

接下來我們把每一步都展開來詳細看看。

通過使用 strace 跟蹤 top 命令的各種系統調用,可以看的到它對該文件的調用。

# strace top
...
openat(AT_FDCWD, "/proc/stat", O_RDONLY) = 4
openat(AT_FDCWD, "/proc/2351514/stat", O_RDONLY) = 8
openat(AT_FDCWD, "/proc/2393539/stat", O_RDONLY) = 8
...

除了 /proc/stat 外,還有各個進程細分的 /proc/{pid}/stat,是用來計算各個進程的 cpu 利用率時使用的。

內核為各個偽文件都定義了處理函數,/proc/stat 文件的處理方法是 proc_stat_operations。

//file:fs/proc/stat.c
static int __init proc_stat_init(void)
{
proc_create("stat", 0, NULL, &proc_stat_operations);
return 0;
}

static const struct file_operations proc_stat_operations = {
.open = stat_open,
...
};

proc_stat_operations 中包含了該文件時對應的操作方法。當打開 /proc/stat 文件的時候,stat_open 就會被調用到。stat_open 依次調用 single_open_size,show_stat 來輸出數據內容。我們來看看它的代碼:

//file:fs/proc/stat.c
static int show_stat(struct seq_file *p, void *v)
{
u64 user, nice, system, idle, iowait, irq, softirq, steal;

for_each_possible_cpu(i) {
struct kernel_cpustat *kcs = &kcpustat_cpu(i);

user += kcs->cpustat[CPUTIME_USER];
nice += kcs->cpustat[CPUTIME_NICE];
system += kcs->cpustat[CPUTIME_SYSTEM];
idle += get_idle_time(kcs, i);
iowait += get_iowait_time(kcs, i);
irq += kcs->cpustat[CPUTIME_IRQ];
softirq += kcs->cpustat[CPUTIME_SOFTIRQ];
...
}

//轉換成節拍數并打印出來
seq_put_decimal_ull(p, "cpu ", nsec_to_clock_t(user));
seq_put_decimal_ull(p, " ", nsec_to_clock_t(nice));
seq_put_decimal_ull(p, " ", nsec_to_clock_t(system));
seq_put_decimal_ull(p, " ", nsec_to_clock_t(idle));
seq_put_decimal_ull(p, " ", nsec_to_clock_t(iowait));
seq_put_decimal_ull(p, " ", nsec_to_clock_t(irq));
seq_put_decimal_ull(p, " ", nsec_to_clock_t(softirq));
...
}

在上面的代碼中,for_each_possible_cpu 是在遍歷存儲著 cpu 使用率數據的 kcpustat_cpu 變量。該變量是一個 percpu 變量,它為每一個邏輯核都準備了一個數組元素。里面存儲著當前核所對應各種事件,包括 user、nice、system、idel、iowait、irq、softirq 等。

在這個循環中,將每一個核的每種使用率都加起來。最后通過 seq_put_decimal_ull 將這些數據輸出出來。

圖片

注意,在內核中實際每個時間記錄的是納秒數,但是在輸出的時候統一都轉化成了節拍單位。至于節拍單位多長,下一節我們介紹。總之, /proc/stat 的輸出是從 kernel_cpustat 這個 percpu 變量中讀取出來的。

我們接著再看看這個變量中的數據是何時加進來的。

三、統計數據怎么來的

前面我們提到內核是以采樣的方式來統計 cpu 使用率的。這個采樣周期依賴的是 Linux 時間子系統中的定時器。

Linux 內核每隔固定周期會發出 timer interrupt (IRQ 0),這有點像樂譜中的節拍的概念。每隔一段時間,就打出一個拍子,Linux 就響應之并處理一些事情。

圖片

一個節拍的長度是多長時間,是通過 CONFIG_HZ 來定義的。它定義的方式是每一秒有幾次 timer interrupts。不同的系統中這個節拍的大小可能不同,通常在 1 ms 到 10 ms 之間。可以在自己的 Linux config 文件中找到它的配置。

# grep ^CONFIG_HZ /boot/config-5.4.56.bsk.10-amd64
CONFIG_HZ=1000

從上述結果中可以看出,我的機器的每秒要打出 1000 次節拍。也就是每 1 ms 一次。

每次當時間中斷到來的時候,都會調用 update_process_times 來更新系統時間。更新后的時間都存儲在我們前面提到的 percpu 變量 kcpustat_cpu 中。

圖片

我們來詳細看下匯總過程 update_process_times 的源碼,它位于 kernel/time/timer.c 文件中。

//file:kernel/time/timer.c
void update_process_times(int user_tick)
{
struct task_struct *p = current;

//進行時間累積處理
account_process_tick(p, user_tick);
...
}

這個函數的參數 user_tick 值得是采樣的瞬間是處于內核態還是用戶態。接下來調用 account_process_tick。

//file:kernel/sched/cputime.c
void account_process_tick(struct task_struct *p, int user_tick)
{
cputime = TICK_NSEC;
...

if (user_tick)
//3.1 統計用戶態時間
account_user_time(p, cputime);
else if ((p != rq->idle) || (irq_count() != HARDIRQ_OFFSET))
//3.2 統計內核態時間
account_system_time(p, HARDIRQ_OFFSET, cputime);
else
//3.3 統計空閑時間
account_idle_time(cputime);
}

在這個函數中,首先設置 cputime = TICK_NSEC, 一個 TICK_NSEC 的定義是一個節拍所占的納秒數。接下來根據判斷結果分別執行 account_user_time、account_system_time 和 account_idle_time 來統計用戶態、內核態和空閑時間。

3.1 用戶態時間統計

//file:kernel/sched/cputime.c
void account_user_time(struct task_struct *p, u64 cputime)
{
//分兩種種情況統計用戶態 CPU 的使用情況
int index;
index = (task_nice(p) > 0) ? CPUTIME_NICE : CPUTIME_USER;

//將時間累積到 /proc/stat 中
task_group_account_field(p, index, cputime);
......
}

account_user_time 函數主要分兩種情況統計:

  • 如果進程的 nice 值大于 0,那么將會增加到 CPU 統計結構的 nice 字段中。
  • 如果進程的 nice 值小于等于 0,那么增加到 CPU 統計結構的 user 字段中。

看到這里,開篇的問題 2 就有答案了,其實用戶態的時間不只是 user 字段,nice 也是。之所以要把 nice 分出來,是為了讓 Linux 用戶更一目了然地看到調過 nice 的進程所占的 cpu 周期有多少。

我們平時如果想要觀察系統的用戶態消耗的時間的話,應該是將 top 中輸出的 user 和 nice 加起來一并考慮,而不是只看 user!

接著調用 task_group_account_field 來把時間加到前面我們用到的 kernel_cpustat 內核變量中。

//file:kernel/sched/cputime.c
static inline void task_group_account_field(struct task_struct *p, int index,
u64 tmp)
{
__this_cpu_add(kernel_cpustat.cpustat[index], tmp);
...
}

3.2 內核態時間統計

我們再來看內核態時間是如何統計的,找到 account_system_time 的代碼。

//file:kernel/sched/cputime.c
void account_system_time(struct task_struct *p, int hardirq_offset, u64 cputime)
{
if (hardirq_count() - hardirq_offset)
index = CPUTIME_IRQ;
else if (in_serving_softirq())
index = CPUTIME_SOFTIRQ;
else
index = CPUTIME_SYSTEM;

account_system_index_time(p, cputime, index);
}

內核態的時間主要分 3 種情況進行統計。

  • 如果當前處于硬中斷執行上下文, 那么統計到 irq 字段中
  • 如果當前處于軟中斷執行上下文, 那么統計到 softirq 字段中
  • 否則統計到 system 字段中

判斷好要加到哪個統計項中后,依次調用 account_system_index_time、task_group_account_field 來將這段時間加到內核變量 kernel_cpustat 中

//file:kernel/sched/cputime.c
static inline void task_group_account_field(struct task_struct *p, int index,
u64 tmp)
{
__this_cpu_add(kernel_cpustat.cpustat[index], tmp);
}

3.3 空閑時間的累積

沒錯,在內核變量 kernel_cpustat 中不僅僅是統計了各種用戶態、內核態的使用統計,空閑也一并統計起來了。

如果在采樣的瞬間,cpu 既不在內核態也不在用戶態的話,就將當前節拍的時間都累加到 idle 中。

//file:kernel/sched/cputime.c
void account_idle_time(u64 cputime)
{
u64 *cpustat = kcpustat_this_cpu->cpustat;
struct rq *rq = this_rq();

if (atomic_read(&rq->nr_iowait) > 0)
cpustat[CPUTIME_IOWAIT] += cputime;
else
cpustat[CPUTIME_IDLE] += cputime;
}

在 cpu 空閑的情況下,進一步判斷當前是不是在等待 IO(例如磁盤 IO),如果是的話這段空閑時間會加到 iowait 中,否則就加到 idle 中。從這里,我們可以看到 iowait 其實是 cpu 的空閑時間,只不過是在等待 IO 完成而已。

看到這里,開篇問題 3 也有非常明確的答案了,io wait 其實是 cpu 在空閑狀態的一項統計,只不過這種狀態和 idle 的區別是 cpu 是因為等待 io 而空閑。

四、總結

本文深入分析了 Linux 統計系統 CPU 利用率的內部原理。全文的內容可以用如下一張圖來匯總:

圖片

Linux 中的定時器會以某個固定節拍,比如 1 ms 一次采樣各個 cpu 核的使用情況,然后將當前節拍的所有時間都累加到 user/nice/system/irq/softirq/io_wait/idle 中的某一項上。

top 命令是讀取的 /proc/stat 中輸出的 cpu 各項利用率數據,而這個數據在內核中的是根據 kernel_cpustat 來匯總并輸出的。

回到開篇問題 1,top 輸出的利用率信息是如何計算出來的,它精確嗎?

/proc/stat 文件輸出的是某個時間點的各個指標所占用的節拍數。如果想像 top 那樣輸出一個百分比,計算過程是分兩個時間點 t1, t2 分別獲取一下 stat 文件中的相關輸出,然后經過個簡單的算術運算便可以算出當前的 cpu 利用率。

我也提供了一個簡單的 shell 代碼,你可以把它下載下來,用它來實際查看一下你服務器的 cpu 利用率,我放到我的 github 上了。

Github 地址:https://github.com/yanfeizhang/coder-kung-fu/blob/main/tests/cpu/test06/cpu_stat.sh

再說是否精確。這個統計方法是采樣的,只要是采樣,肯定就不是百分之百精確。但由于我們查看 cpu 使用率的時候往往都是計算 1 秒甚至更長一段時間的使用情況,這其中會包含很多采樣點,所以查看整體情況是問題不大的。

另外從本文,我們也學到了 top 中輸出的 cpu 時間項目其實大致可以分為三類:

第一類:用戶態消耗時間,包括 user 和 nice。如果想看用戶態的消耗,要將 user 和 nice 加起來看才對。第二類:內核態消耗時間,包括 irq、softirq 和 system。第三類:空閑時間,包括 io_wait 和 idle。其中 io_wait 也是 cpu 的空閑狀態,只不過是在等 io 完成而已。如果只是想看 cpu 到底有多閑,應該把 io_wait 和 idle 加起來才對。

責任編輯:武曉燕 來源: 開發內功修煉
相關推薦

2017-08-25 15:56:54

Linuxproc文件系統CPU利用率

2024-10-14 13:01:33

AOTcpu符號

2022-07-23 21:31:24

KubernetesLinux開源

2010-03-11 16:49:55

Linux CPU利用

2024-06-26 09:29:53

2011-03-17 15:16:38

2013-01-04 10:44:31

IBMdW

2019-03-05 15:53:40

Linux服務器CPU

2012-10-11 10:21:33

數據中心CPU利用率服務器效率

2019-08-28 06:58:06

Linux監控腳本Shell

2025-09-15 08:34:01

2010-03-15 15:01:37

2019-01-23 10:21:32

吞吐量響應時間CPU

2011-03-17 13:54:42

查詢參數SQL語句利用率

2021-02-03 09:26:49

數據中心基礎設施能源

2025-11-03 02:45:00

2015-09-07 11:54:25

云計算數據中心資源利用

2013-03-19 12:23:25

SDN網絡利用率網絡系統架構

2011-04-12 09:07:47

磁盤空間利用率虛擬化的隱藏成本

2012-11-07 15:07:30

VMware虛擬化
點贊
收藏

51CTO技術棧公眾號

裸体大乳女做爰69| 97视频在线观看成人| www午夜视频| www在线免费观看视频| 丁香亚洲综合激情啪啪综合| 91av视频在线免费观看| 少妇愉情理伦三级| 香蕉成人app| 色综合久久综合中文综合网| 新91视频在线观看| 2022成人影院| 91精品影视| 久久久久久久久久久99999| 国产精品久久久久久久久男 | 国内不卡的二区三区中文字幕| 久热精品视频在线观看| 你懂的在线观看网站| 成人一区视频| 精品久久久一区二区| 一区二区三区久久网| 日本人妻丰满熟妇久久久久久| 免费欧美在线视频| 97avcom| 日本不卡一二区| 农村少妇一区二区三区四区五区| 欧美日韩一卡二卡| 男女午夜激情视频| 污视频网站免费在线观看| 久久久夜色精品亚洲| 国产精品色婷婷视频| 天天干中文字幕| 国产精品久久久久久av公交车| 午夜伦欧美伦电影理论片| 99亚洲精品视频| 天堂中文字幕在线| 成人免费高清视频| 国产精品亚洲综合天堂夜夜| 亚洲欧美偷拍一区| 99xxxx成人网| 国内精品久久久久久久| avtt天堂在线| 亚洲mv大片欧洲mv大片| 色悠悠久久88| 五月天精品在线| 亚洲人成精品久久久| 亚洲国产欧美精品| 国产高清成人久久| 激情视频极品美女日韩| 色综合久久六月婷婷中文字幕| 日韩伦理在线免费观看| xxxx视频在线| 亚洲成人av一区| 成人免费a级片| 女同视频在线观看| 午夜精品久久久久久久久| 精品成在人线av无码免费看| 大桥未久在线播放| 香蕉加勒比综合久久| 4444亚洲人成无码网在线观看 | 免费91麻豆精品国产自产在线观看| 免费看日本黄色片| 欧美日韩国产一区二区三区不卡| 亚洲美女性视频| 在哪里可以看毛片| 奇米影视亚洲| 久久久精品视频在线观看| 久久精品亚洲a| 国产精品久久久久蜜臀| 久久久91精品国产| 手机在线免费看片| 综合激情视频| 97精品国产97久久久久久| 国产午夜免费视频| 国产欧美短视频| 国产成人免费av| 瑟瑟视频在线免费观看| 久久er精品视频| 亚洲一区二区三区乱码aⅴ| 国产丰满果冻videossex| 国产福利91精品一区二区三区| 成人免费视频观看视频| 天堂在线中文资源| 国产日韩av一区| 欧美h视频在线观看| 久草免费在线| 性做久久久久久免费观看| 国产一级不卡毛片| 激情视频亚洲| 亚洲欧美精品在线| 好吊日在线视频| 一级成人国产| 国产在线日韩在线| 人妻丰满熟妇av无码区hd| 91老司机福利 在线| 亚洲区一区二区三区| 色呦呦在线观看视频| 色婷婷综合在线| 尤物网站在线看| 亚洲美女久久| 久久99久久亚洲国产| 欧美国产成人精品一区二区三区| 精品一区二区日韩| 久久riav| 中日韩高清电影网| 91福利国产成人精品照片| 初高中福利视频网站| 国产欧美日韩一区二区三区四区| 欧美成人免费观看| 天堂网一区二区| 成人涩涩免费视频| 亚洲一区二区三区精品视频| 女海盗2成人h版中文字幕| 在线播放中文字幕一区| 在哪里可以看毛片| 日韩亚洲国产精品| 91精品婷婷国产综合久久蝌蚪| 久久久久久久影视| 亚洲1区2区3区4区| 性生活免费在线观看| 亚洲精品456| 久久久久久欧美| av在线免费在线观看| 欧美激情在线看| 六月丁香婷婷激情| 日本一区二区三区播放| 日韩一区二区三区在线播放| 国产污视频网站| 91丨国产丨九色丨pron| 97碰在线视频| 91免费精品国偷自产在线在线| 日韩中文字幕在线观看| 自拍偷拍校园春色| 久久久久99精品一区| 波多野结衣乳巨码无在线| 久久伦理中文字幕| 久热爱精品视频线路一| 91国产精品一区| 中文字幕欧美日本乱码一线二线| 国模杨依粉嫩蝴蝶150p| 久操成人av| 日本一区二区在线播放| 天堂在线视频观看| 亚洲福利视频三区| 国产精品久久久久久亚洲色| 欧美精品观看| 国产精品久久久久久久久婷婷| 91网在线看| 日韩午夜小视频| 2025国产精品自拍| 国产裸体歌舞团一区二区| 国产精品萝li| 日本黄色播放器| 日韩欧美三区| 久久久国产影院| 国产精品人妻一区二区三区| 国产精品不卡视频| 亚洲欧美日韩网站| 欧美日韩mv| 成人av片网址| 日韩激情电影免费看| 精品夜色国产国偷在线| 无码人妻丰满熟妇区五十路| 中文字幕第一区综合| 国产原创精品在线| 午夜久久美女| 久久久亚洲综合网站| 快播电影网址老女人久久| 在线播放日韩av| 国产乱淫a∨片免费视频| 亚洲柠檬福利资源导航| 国产伦精品一区二区免费| 美女国产一区| 亚洲最新在线| 亚洲一区二区电影| 97色在线观看| 电影在线一区| 欧美一区二区三区在线观看视频 | 牛牛澡牛牛爽一区二区| 在线精品国精品国产尤物884a| 亚洲天堂精品一区| 国产成人久久精品77777最新版本| 国产freexxxx性播放麻豆| 亚洲人成网站77777在线观看| 国产精品视频自拍| 人妖欧美1区| 国产一区二区美女视频| 国产欧美久久久精品免费| 午夜视频在线观看一区二区三区| 在线观看日本中文字幕| 国产毛片精品视频| 成人久久久久久久久| 亚洲精品成人影院| 欧美日韩电影一区二区| 精品成人18| 国产精品极品在线| 123区在线| zzijzzij亚洲日本成熟少妇| 三级网站免费观看| 欧美日韩国产小视频| 日本在线观看视频网站| 1区2区3区国产精品| 亚洲第一成人网站| 国产精品一区二区三区99| 无码人妻丰满熟妇区毛片| 国产精品草草| 亚洲三区四区| 亚洲福利天堂| caoporn国产精品免费公开| av一区在线| 97av在线视频免费播放| 中文字幕在线三区| 亚洲一区第一页| 婷婷在线免费视频| 欧美一级高清大全免费观看| 午夜视频网站在线观看| 欧美日韩国产精品一区二区不卡中文 | 性网爆门事件集合av| 欧美日韩一区二区三区不卡| 国产精品777777| 亚洲大片在线观看| 无码人妻精品一区二区三区夜夜嗨| 久久精品日产第一区二区三区高清版| 亚洲av无码一区东京热久久| 国产一区二区精品久久99| 五月婷婷之综合激情| 性感少妇一区| 日本免费黄视频| 亚洲精品麻豆| 少妇无码av无码专区在线观看| 综合激情网站| 日本丰满大乳奶| 久久精品久久久| 成人手机视频在线| 欧美成人自拍| 亚洲午夜精品福利| 精品欧美激情在线观看| 欧美一区二区三区精美影视| 神马电影久久| 色涩成人影视在线播放| 精品国产123区| 神马欧美一区二区| 日韩成人三级| 黄频视频在线观看| 亚洲天堂一区二区三区四区| 在线视频一二三区| 影音先锋日韩在线| 激情五月婷婷六月| 亚洲天堂黄色| 国产91在线免费| 新67194成人永久网站| 成人免费无码av| 免费成人在线视频观看| 永久免费的av网站| 韩国三级电影一区二区| 天天干天天曰天天操| 国产成人综合自拍| 亚洲一区二区三区四区av| 99久久婷婷国产| 韩国女同性做爰三级| 国产精品国产三级国产普通话99 | 欧美在线一级片| 久久综合狠狠综合久久综合88| a级大片在线观看| 国产精品久久久久一区二区三区| 永久免费看黄网站| 午夜激情一区二区三区| 69av视频在线观看| 911精品国产一区二区在线| www.日韩在线观看| 日韩精品视频在线免费观看| 国产永久免费高清在线观看视频| 国产亚洲一区精品| 成人福利网站| 国内精品久久久久影院优| 韩国主播福利视频一区二区三区| 国产在线拍揄自揄视频不卡99| 国产成人av毛片| 日本一区精品| 欧美日韩天堂| 午夜免费精品视频| 国产老妇另类xxxxx| 亚洲精品乱码久久久久久不卡| 欧美激情在线观看视频免费| 欧美成人一二三区| 91极品视觉盛宴| 国产高中女学生第一次| 亚洲精品视频免费| 久cao在线| 91高潮在线观看| 91精品一久久香蕉国产线看观看| 精品视频第一区| 99视频精品视频高清免费| 69sex久久精品国产麻豆| 男女性色大片免费观看一区二区| 国产成人精品一区二区三区在线观看 | 青青草国产精品97视觉盛宴| 精品人妻一区二区免费| 中文字幕一区二区三区在线播放| 国产污片在线观看| 7777精品伊人久久久大香线蕉超级流畅| 无码精品黑人一区二区三区 | 国产精品一区一区三区| 日本二区在线观看| 亚洲一二三专区| 国产一区二区在线不卡| 亚洲色图av在线| 超碰在线资源| 147欧美人体大胆444| 成人精品中文字幕| 成人免费观看视频在线观看| 国产成人啪免费观看软件| 精品国产国产综合精品| 欧美小视频在线观看| 亚洲爆乳无码一区二区三区| www.亚洲免费视频| 成人天堂yy6080亚洲高清| 国产日韩亚洲精品| 欧美激情1区| 污污视频在线免费| 国产精品护士白丝一区av| 国产精品第六页| 亚洲欧美成人精品| 厕沟全景美女厕沟精品| 精品一区二区国产| 激情欧美丁香| 可以看的av网址| 亚洲天堂2016| 国产精品高潮呻吟av| 中文字幕日韩高清| 日日夜夜天天综合| 欧美精品中文字幕一区二区| 亚洲欧美日韩在线观看a三区 | 国产精品网站在线播放| 国产情侣呻吟对白高潮| 亚洲精品综合精品自拍| 亚洲啊v在线| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲在线成人| 国产精品无码久久久久一区二区| 色综合久久综合| 高清性色生活片在线观看| 国产精品电影观看| 成人激情免费视频| 久久99爱视频| 日韩美女视频19| www.久久色| 97久久超碰福利国产精品…| 色婷婷综合久久久久久| 国产乱子夫妻xx黑人xyx真爽| 久久色在线视频| 性高潮视频在线观看| 日韩一区二区福利| 一区二区三区免费在线看| 女人色极品影院| 成人不卡免费av| 九九热在线视频播放| 亚洲欧洲在线看| 成人黄页网站视频| 欧美做受777cos| caoporm超碰国产精品| 欧美特黄aaaaaa| 中文字幕久热精品视频在线| 国产精品麻豆| 久久久久久久久久网| 久久蜜桃香蕉精品一区二区三区| 狠狠躁夜夜躁人人爽视频| 久久天堂av综合合色| 99re8这里有精品热视频免费 | 国产精彩视频在线| 亚洲人永久免费| 成人污版视频| 国产黄视频在线| 中文字幕亚洲综合久久菠萝蜜| 99这里有精品视频| 18久久久久久| 国产韩日影视精品| 久久免费精品国产| 欧美在线一二三四区| 在线视频中文字幕第一页| 久久99精品久久久久久秒播放器| 三级久久三级久久久| 青娱乐国产盛宴| 亚洲欧美日韩精品久久| 精品一区二区三区在线观看视频| 国产精品裸体瑜伽视频| 国产精品天天看| 手机看片福利永久| 成人国产精品久久久| 99re国产精品| 三级全黄做爰视频| 日韩精品在线视频观看| 久久久精品区| 噼里啪啦国语在线观看免费版高清版| 亚洲精品水蜜桃| 成人性爱视频在线观看| 成人欧美视频在线| 精品一区二区三区在线播放视频 | 6080yy午夜一二三区久久| 蜜桃麻豆影像在线观看| 特级黄色录像片|