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

你不好奇 CPU 是如何執行任務的?

運維 系統運維
CPU 是如何調度任務的?如果你的任務對響應要求很高,你希望它總是能被先調度,這該怎么辦?

你清楚下面這幾個問題嗎?

  • 有了內存,為什么還需要 CPU Cache?
  • CPU 是怎么讀寫數據的?
  • 如何讓 CPU 能讀取數據更快一些?
  • CPU 偽共享是如何發生的?又該如何避免?
  • CPU 是如何調度任務的?如果你的任務對響應要求很高,你希望它總是能被先調度,這該怎么辦?

這篇,我們就來回答這些問題。

一、CPU 如何讀寫數據的?

先來認識 CPU 的架構,只有理解了 CPU 的 架構,才能更好地理解 CPU 是如何讀寫數據的,對于現代 CPU 的架構圖如下:

可以看到,一個 CPU 里通常會有多個 CPU 核心,比如上圖中的 1 號和 2 號 CPU 核心,并且每個 CPU 核心都有自己的 L1 Cache 和 L2 Cache,而 L1 Cache 通常分為 dCache(數據緩存) 和 iCache(指令緩存),L3 Cache 則是多個核心共享的,這就是 CPU 典型的緩存層次。

上面提到的都是 CPU 內部的 Cache,放眼外部的話,還會有內存和硬盤,這些存儲設備共同構成了金字塔存儲層次。如下圖所示:

從上圖也可以看到,從上往下,存儲設備的容量會越大,而訪問速度會越慢。至于每個存儲設備的訪問延時,你可以看下圖的表格:

你可以看到, CPU 訪問 L1 Cache 速度比訪問內存快 100 倍,這就是為什么 CPU 里會有 L1~L3 Cache 的原因,目的就是把 Cache 作為 CPU 與內存之間的緩存層,以減少對內存的訪問頻率。

CPU 從內存中讀取數據到 Cache 的時候,并不是一個字節一個字節讀取,而是一塊一塊的方式來讀取數據的,這一塊一塊的數據被稱為 CPU Line(緩存行),所以 CPU Line 是 CPU 從內存讀取數據到 Cache 的單位。

至于 CPU Line 大小,在 Linux 系統可以用下面的方式查看到,你可以看我服務器的 L1 Cache Line 大小是 64 字節,也就意味著 L1 Cache 一次載入數據的大小是 64 字節。

那么對數組的加載, CPU 就會加載數組里面連續的多個數據到 Cache 里,因此我們應該按照物理內存地址分布的順序去訪問元素,這樣訪問數組元素的時候,Cache 命中率就會很高,于是就能減少從內存讀取數據的頻率, 從而可提高程序的性能。

但是,在我們不使用數組,而是使用單獨的變量的時候,則會有 Cache 偽共享的問題,Cache 偽共享問題上是一個性能殺手,我們應該要規避它。

接下來,就來看看 Cache 偽共享是什么?又如何避免這個問題?

現在假設有一個雙核心的 CPU,這兩個 CPU 核心并行運行著兩個不同的線程,它們同時從內存中讀取兩個不同的數據,分別是類型為 long 的變量 A 和 B,這個兩個數據的地址在物理內存上是連續的,如果 Cahce Line 的大小是 64 字節,并且變量 A 在 Cahce Line 的開頭位置,那么這兩個數據是位于同一個 Cache Line 中,又因為 CPU Line 是 CPU 從內存讀取數據到 Cache 的單位,所以這兩個數據會被同時讀入到了兩個 CPU 核心中各自 Cache 中。

我們來思考一個問題,如果這兩個不同核心的線程分別修改不同的數據,比如 1 號 CPU 核心的線程只修改了 變量 A,或 2 號 CPU 核心的線程的線程只修改了變量 B,會發生什么呢?

1. 分析偽共享的問題

現在我們結合保證多核緩存一致的 MESI 協議,來說明這一整個的過程,如果你還不知道 MESI 協議,你可以看我這篇文章「10 張圖打開 CPU 緩存一致性的大門」。

①. 最開始變量 A 和 B 都還不在 Cache 里面,假設 1 號核心綁定了線程 A,2 號核心綁定了線程 B,線程 A 只會讀寫變量 A,線程 B 只會讀寫變量 B。

②. 1 號核心讀取變量 A,由于 CPU 從內存讀取數據到 Cache 的單位是 Cache Line,也正好變量 A 和 變量 B 的數據歸屬于同一個 Cache Line,所以 A 和 B 的數據都會被加載到 Cache,并將此 Cache Line 標記為「獨占」狀態。

③. 接著,2 號核心開始從內存里讀取變量 B,同樣的也是讀取 Cache Line 大小的數據到 Cache 中,此 Cache Line 中的數據也包含了變量 A 和 變量 B,此時 1 號和 2 號核心的 Cache Line 狀態變為「共享」狀態。

④. 1 號核心需要修改變量 A,發現此 Cache Line 的狀態是「共享」狀態,所以先需要通過總線發送消息給 2 號核心,通知 2 號核心把 Cache 中對應的 Cache Line 標記為「已失效」狀態,然后 1 號核心對應的 Cache Line 狀態變成「已修改」狀態,并且修改變量 A。

⑤. 之后,2 號核心需要修改變量 B,此時 2 號核心的 Cache 中對應的 Cache Line 是已失效狀態,另外由于 1 號核心的 Cache 也有此相同的數據,且狀態為「已修改」狀態,所以要先把 1 號核心的 Cache 對應的 Cache Line 寫回到內存,然后 2 號核心再從內存讀取 Cache Line 大小的數據到 Cache 中,最后把變量 B 修改到 2 號核心的 Cache 中,并將狀態標記為「已修改」狀態。

所以,可以發現如果 1 號和 2 號 CPU 核心這樣持續交替的分別修改變量 A 和 B,就會重復 ④ 和 ⑤ 這兩個步驟,Cache 并沒有起到緩存的效果,雖然變量 A 和 B 之間其實并沒有任何的關系,但是因為同時歸屬于一個 Cache Line ,這個 Cache Line 中的任意數據被修改后,都會相互影響,從而出現 ④ 和 ⑤ 這兩個步驟。

因此,這種因為多個線程同時讀寫同一個 Cache Line 的不同變量時,而導致 CPU Cache 失效的現象稱為偽共享(False Sharing)。

2. 避免偽共享的方法

因此,對于多個線程共享的熱點數據,即經常會修改的數據,應該避免這些數據剛好在同一個 Cache Line 中,否則就會出現為偽共享的問題。

接下來,看看在實際項目中是用什么方式來避免偽共享的問題的。

在 Linux 內核中存在 __cacheline_aligned_in_smp 宏定義,是用于解決偽共享的問題。

從上面的宏定義,我們可以看到:

  • 如果在多核(MP)系統里,該宏定義是 __cacheline_aligned,也就是 Cache Line 的大小;
  • 而如果在單核系統里,該宏定義是空的;

因此,針對在同一個 Cache Line 中的共享的數據,如果在多核之間競爭比較嚴重,為了防止偽共享現象的發生,可以采用上面的宏定義使得變量在 Cache Line 里是對齊的。

舉個例子,有下面這個結構體:

結構體里的兩個成員變量 a 和 b 在物理內存地址上是連續的,于是它們可能會位于同一個 Cache Line 中,如下圖:

所以,為了防止前面提到的 Cache 偽共享問題,我們可以使用上面介紹的宏定義,將 b 的地址設置為 Cache Line 對齊地址,如下:

這樣 a 和 b 變量就不會在同一個 Cache Line 中了,如下圖:

所以,避免 Cache 偽共享實際上是用空間換時間的思想,浪費一部分 Cache 空間,從而換來性能的提升。

我們再來看一個應用層面的規避方案,有一個 Java 并發框架 Disruptor 使用「字節填充 + 繼承」的方式,來避免偽共享的問題。

Disruptor 中有一個 RingBuffer 類會經常被多個線程使用,代碼如下:

你可能會覺得 RingBufferPad 類里 7 個 long 類型的名字很奇怪,但事實上,它們雖然看起來毫無作用,但卻對性能的提升起到了至關重要的作用。

我們都知道,CPU Cache 從內存讀取數據的單位是 CPU Line,一般 64 位 CPU 的 CPU Line 的大小是 64 個字節,一個 long 類型的數據是 8 個字節,所以 CPU 一下會加載 8 個 long 類型的數據。

根據 JVM 對象繼承關系中父類成員和子類成員,內存地址是連續排列布局的,因此 RingBufferPad 中的 7 個 long 類型數據作為 Cache Line 前置填充,而 RingBuffer 中的 7 個 long 類型數據則作為 Cache Line 后置填充,這 14 個 long 變量沒有任何實際用途,更不會對它們進行讀寫操作。

另外,RingBufferFelds 里面定義的這些變量都是 final 修飾的,意味著第一次加載之后不會再修改, 又由于「前后」各填充了 7 個不會被讀寫的 long 類型變量,所以無論怎么加載 Cache Line,這整個 Cache Line 里都沒有會發生更新操作的數據,于是只要數據被頻繁地讀取訪問,就自然沒有數據被換出 Cache 的可能,也因此不會產生偽共享的問題。

二、CPU 如何選擇線程的?

了解完 CPU 讀取數據的過程后,我們再來看看 CPU 是根據什么來選擇當前要執行的線程。

在 Linux 內核中,進程和線程都是用 tark_struct 結構體表示的,區別在于線程的 tark_struct 結構體里部分資源是共享了進程已創建的資源,比如內存地址空間、代碼段、文件描述符等,所以 Linux 中的線程也被稱為輕量級進程,因為線程的 tark_struct 相比進程的 tark_struct 承載的 資源比較少,因此以「輕」得名。

一般來說,沒有創建線程的進程,是只有單個執行流,它被稱為是主線程。如果想讓進程處理更多的事情,可以創建多個線程分別去處理,但不管怎么樣,它們對應到內核里都是 tark_struct。

所以,Linux 內核里的調度器,調度的對象就是 tark_struct,接下來我們就把這個數據結構統稱為任務。

在 Linux 系統中,根據任務的優先級以及響應要求,主要分為兩種,其中優先級的數值越小,優先級越高:

  • 實時任務,對系統的響應時間要求很高,也就是要盡可能快的執行實時任務,優先級在 0~99 范圍內的就算實時任務;
  • 普通任務,響應時間沒有很高的要求,優先級在 100~139 范圍內都是普通任務級別;

1. 調度類

由于任務有優先級之分,Linux 系統為了保障高優先級的任務能夠盡可能早的被執行,于是分為了這幾種調度類,如下圖:

Deadline 和 Realtime 這兩個調度類,都是應用于實時任務的,這兩個調度類的調度策略合起來共有這三種,它們的作用如下:

  • SCHED_DEADLINE:是按照 deadline 進行調度的,距離當前時間點最近的 deadline 的任務會被優先調度;
  • SCHED_FIFO:對于相同優先級的任務,按先來先服務的原則,但是優先級更高的任務,可以搶占低優先級的任務,也就是優先級高的可以「插隊」;
  • SCHED_RR:對于相同優先級的任務,輪流著運行,每個任務都有一定的時間片,當用完時間片的任務會被放到隊列尾部,以保證相同優先級任務的公平性,但是高優先級的任務依然可以搶占低優先級的任務;

而 Fair 調度類是應用于普通任務,都是由 CFS 調度器管理的,分為兩種調度策略:

  • SCHED_NORMAL:普通任務使用的調度策略;
  • SCHED_BATCH:后臺任務的調度策略,不和終端進行交互,因此在不影響其他需要交互的任務,可以適當降低它的優先級。

2. 完全公平調度

我們平日里遇到的基本都是普通任務,對于普通任務來說,公平性最重要,在 Linux 里面,實現了一個基于 CFS 的調度算法,也就是完全公平調度(Completely Fair Scheduling)。

這個算法的理念是想讓分配給每個任務的 CPU 時間是一樣,于是它為每個任務安排一個虛擬運行時間 vruntime,如果一個任務在運行,其運行的越久,該任務的 vruntime 自然就會越大,而沒有被運行的任務,vruntime 是不會變化的。

那么,在 CFS 算法調度的時候,會優先選擇 vruntime 少的任務,以保證每個任務的公平性。

這就好比,讓你把一桶的奶茶平均分到 10 杯奶茶杯里,你看著哪杯奶茶少,就多倒一些;哪個多了,就先不倒,這樣經過多輪操作,雖然不能保證每杯奶茶完全一樣多,但至少是公平的。

當然,上面提到的例子沒有考慮到優先級的問題,雖然是普通任務,但是普通任務之間還是有優先級區分的,所以在計算虛擬運行時間 vruntime 還要考慮普通任務的權重值,注意權重值并不是優先級的值,內核中會有一個 nice 級別與權重值的轉換表,nice 級別越低的權重值就越大,至于 nice 值是什么,我們后面會提到。

于是就有了以下這個公式:

你可以不用管 NICE_0_LOAD 是什么,你就認為它是一個常量,那么在「同樣的實際運行時間」里,高權重任務的 vruntime 比低權重任務的 vruntime 少,你可能會奇怪為什么是少的?你還記得 CFS 調度嗎,它是會優先選擇 vruntime 少的任務進行調度,所以高權重的任務就會被優先調度了,于是高權重的獲得的實際運行時間自然就多了。

3. CPU 運行隊列

一個系統通常都會運行著很多任務,多任務的數量基本都是遠超 CPU 核心數量,因此這時候就需要排隊。

事實上,每個 CPU 都有自己的運行隊列(Run Queue, rq),用于描述在此 CPU 上所運行的所有進程,其隊列包含三個運行隊列,Deadline 運行隊列 dl_rq、實時任務運行隊列 rt_rq 和 CFS 運行隊列 csf_rq,其中 csf_rq 是用紅黑樹來描述的,按 vruntime 大小來排序的,最左側的葉子節點,就是下次會被調度的任務。

這幾種調度類是有優先級的,優先級如下:Deadline > Realtime > Fair,這意味著 Linux 選擇下一個任務執行的時候,會按照此優先級順序進行選擇,也就是說先從 dl_rq 里選擇任務,然后從 rt_rq 里選擇任務,最后從 csf_rq 里選擇任務。因此,實時任務總是會比普通任務優先被執行。

4. 調整優先級

如果我們啟動任務的時候,沒有特意去指定優先級的話,默認情況下都是普通任務,普通任務的調度類是 Fail,由 CFS 調度器來進行管理。CFS 調度器的目的是實現任務運行的公平性,也就是保障每個任務的運行的時間是差不多的。

如果你想讓某個普通任務有更多的執行時間,可以調整任務的 nice 值,從而讓優先級高一些的任務執行更多時間。nice 的值能設置的范圍是 -20~19, 值越低,表明優先級越高,因此 -20 是最高優先級,19 則是最低優先級,默認優先級是 0。

是不是覺得 nice 值的范圍很詭異?事實上,nice 值并不是表示優先級,而是表示優先級的修正數值,它與優先級(priority)的關系是這樣的:priority(new) = priority(old) + nice。內核中,priority 的范圍是 0~139,值越低,優先級越高,其中前面的 0~99 范圍是提供給實時任務使用的,而 nice 值是映射到 100~139,這個范圍是提供給普通任務用的,因此 nice 值調整的是普通任務的優先級。

在前面我們提到了,權重值與 nice 值的關系的,nice 值越低,權重值就越大,計算出來的 vruntime 就會越少,由于 CFS 算法調度的時候,就會優先選擇 vruntime 少的任務進行執行,所以 nice 值越低,任務的優先級就越高。

我們可以在啟動任務的時候,可以指定 nice 的值,比如將 mysqld 以 -3 優先級:

如果想修改已經運行中的任務的優先級,則可以使用 renice 來調整 nice 值:

nice 調整的是普通任務的優先級,所以不管怎么縮小 nice 值,任務永遠都是普通任務,如果某些任務要求實時性比較高,那么你可以考慮改變任務的優先級以及調度策略,使得它變成實時任務,比如:

三、總結

理解 CPU 是如何讀寫數據的前提,是要理解 CPU 的架構,CPU 內部的多個 Cache + 外部的內存和磁盤都就構成了金字塔的存儲器結構,在這個金字塔中,越往下,存儲器的容量就越大,但訪問速度就會小。

CPU 讀寫數據的時候,并不是按一個一個字節為單位來進行讀寫,而是以 CPU Line 大小為單位,CPU Line 大小一般是 64 個字節,也就意味著 CPU 讀寫數據的時候,每一次都是以 64 字節大小為一塊進行操作。

因此,如果我們操作的數據是數組,那么訪問數組元素的時候,按內存分布的地址順序進行訪問,這樣能充分利用到 Cache,程序的性能得到提升。但如果操作的數據不是數組,而是普通的變量,并在多核 CPU 的情況下,我們還需要避免 Cache Line 偽共享的問題。

所謂的 Cache Line 偽共享問題就是,多個線程同時讀寫同一個 Cache Line 的不同變量時,而導致 CPU Cache 失效的現象。那么對于多個線程共享的熱點數據,即經常會修改的數據,應該避免這些數據剛好在同一個 Cache Line 中,避免的方式一般有 Cache Line 大小字節對齊,以及字節填充等方法。

系統中需要運行的多線程數一般都會大于 CPU 核心,這樣就會導致線程排隊等待 CPU,這可能會產生一定的延時,如果我們的任務對延時容忍度很低,則可以通過一些人為手段干預 Linux 的默認調度策略和優先級。

 

責任編輯:趙寧寧 來源: 小林coding
相關推薦

2020-12-22 10:48:22

Linux網絡包網絡模型

2020-12-29 08:47:45

緩沖SQL磁盤

2021-05-06 08:28:04

mq中間件消息中間件

2010-07-15 14:54:51

at命令crontab定時執行任務

2021-11-10 14:33:08

FreeDOSLinux

2021-05-10 08:20:32

CPU 符號整數

2024-01-08 08:45:07

Spring容器Bean

2021-04-30 13:45:54

DNA機器人納米

2019-07-10 05:08:05

CPU內存分頁管理

2018-12-06 12:58:50

CPU內存模塊

2021-09-16 10:37:41

樹莓派開發者空間站

2021-06-30 07:47:03

Linux CPULinux 系統

2013-11-07 16:16:24

2025-01-24 07:26:07

2025-02-24 09:00:00

CPUI/O密集型任務

2015-11-12 09:17:30

Java Main執行

2021-07-28 07:53:20

CPU 線程切換

2017-02-14 08:33:48

CPULinux內核

2021-04-08 09:32:17

鴻蒙HarmonyOS應用

2024-09-14 14:18:43

點贊
收藏

51CTO技術棧公眾號

综合在线影院| 欧美伦理影视网| 狠狠色综合网| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品高清无码视频| a黄色在线观看| 粉嫩av亚洲一区二区图片| 欧美洲成人男女午夜视频| 又色又爽的视频| 亚洲精品福利| 日本高清不卡视频| av 日韩 人妻 黑人 综合 无码| 少妇人妻一区二区| 三级影片在线观看欧美日韩一区二区 | 亚洲小说春色综合另类电影| 日韩欧美视频一区二区三区| 免费成人深夜夜行网站视频| 天堂av电影在线观看| 韩国一区二区三区| 热久久免费国产视频| 三级影片在线看| 狠狠操综合网| 日韩国产精品视频| 国产一精品一aⅴ一免费| 成人不卡视频| 欧美性少妇18aaaa视频| 日本成人在线不卡| 国产精品刘玥久久一区| 国产日产精品1区| 91在线看www| 夜夜躁日日躁狠狠久久av| 亚洲国产一区二区三区a毛片| 色婷婷综合成人| 国产精久久一区二区三区| 成人av综合网| 欧美日韩一区二区三区在线| 99色精品视频| 少妇淫片在线影院| 亚洲不卡在线观看| aaa免费在线观看| 1024视频在线| 中文av字幕一区| 欧美亚洲丝袜| 欧美女v视频| 国产·精品毛片| www国产亚洲精品| 国产亲伦免费视频播放| 精品一区二区三区视频在线观看| 国产精品精品视频| 羞羞色院91蜜桃| 日韩成人一区二区三区在线观看| 欧美一级片一区| 国产www在线| 国产精品视区| 日本不卡免费高清视频| 国产99久久久| 天堂久久久久va久久久久| 日本不卡高字幕在线2019| 欧美一级片免费在线观看| 国产一区二区三区的电影 | 97精品久久久久中文字幕 | 毛片网站在线| 欧美经典三级视频一区二区三区| 日本中文不卡| 网友自拍视频在线| 国产精品久久久久久久久免费相片| 欧美极品视频一区二区三区| 国产在线观看黄| 国产精品久久久久久久午夜片| 一区二区日本| 日本天码aⅴ片在线电影网站| 一区二区不卡在线视频 午夜欧美不卡在| 91精品国产毛片武则天| 成人超碰在线| 色偷偷成人一区二区三区91| 亚洲xxxx2d动漫1| 青青在线精品| 欧美成人艳星乳罩| 伊人影院在线观看视频| 青草伊人久久| 亚洲国产精品va在线看黑人| 亚洲天堂网一区二区| 日韩国产欧美| 欧美黑人性生活视频| 免费观看成人毛片| 黄页网站在线观看免费| 国内精品福利| 日本一区二区在线播放| 亚洲熟妇av乱码在线观看| 国产乱码精品1区2区3区| 国外成人在线视频网站| 免费看男男www网站入口在线| 亚洲国产高清在线观看视频| 免费的av在线| 欧美特大特白屁股xxxx| 欧美一区二区三区在线观看| 亚洲一区二区三区四区五区六区 | 国产精品亚洲人在线观看| 精品91免费| 午夜不卡视频| 一本大道av一区二区在线播放| 日本中文字幕精品—区二区| 超碰成人福利| www日韩中文字幕在线看| 日本少妇久久久| 美国三级日本三级久久99| 国产精品一区二区av| av在线免费播放网站| 午夜精品一区二区三区电影天堂 | 国产精品视频一区二区三区四区五区| 六九午夜精品视频| 亚洲精品久久7777777| 疯狂试爱三2浴室激情视频| 性娇小13――14欧美| 亚洲一区二区三区四区在线播放 | 亚洲黄色片在线观看| 国产精品97在线| 国产精品videossex| 久久久精品视频成人| 无码人妻丰满熟妇奶水区码| 成人三级伦理片| 成人短视频在线看| 成人亚洲视频| 亚洲欧美制服综合另类| 国产无精乱码一区二区三区| 狠狠色丁香久久婷婷综合丁香| 欧美裸体网站| 毛片在线网站| 亚洲高清福利视频| 久久久久亚洲AV| 国产在线播精品第三| 亚洲精品第一区二区三区| 电影网一区二区| 亚洲国产精品va在线看黑人动漫| 少妇影院在线观看| 国产精品自拍在线| 97精品国产97久久久久久粉红| 国产成+人+综合+亚洲欧美| 亚洲人成免费电影| 手机看片久久久| 久久日一线二线三线suv| 国产老熟妇精品观看| 国产精品17p| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 欧美日免费三级在线| 色欲狠狠躁天天躁无码中文字幕 | 91久久精品国产91久久性色| 最新97超碰在线| 欧美日韩在线精品一区二区三区激情| 国产sm调教视频| 日韩av中文字幕一区二区| 欧美一区二区高清在线观看| 另类专区亚洲| 国产亚洲精品激情久久| 日批视频免费在线观看| 国产欧美va欧美不卡在线| 日日噜噜噜噜久久久精品毛片| jvid福利在线一区二区| 国产精品中文字幕久久久| 色的视频在线免费看| 91精品国产入口| 欧美成人三级在线观看| 不卡的av电影| 久草资源站在线观看| 精品国产精品| 91精品视频播放| 国产亚av手机在线观看| 亚洲精品久久久久久久久久久久| 黄瓜视频在线免费观看| 国产区在线观看成人精品| 亚洲 欧美 日韩系列| 亚洲国产精品日韩专区av有中文| 国产高清精品一区二区三区| 中文字幕 在线观看| 影音先锋欧美精品| 国产叼嘿视频在线观看| 午夜久久电影网| 精品手机在线视频| 粉嫩绯色av一区二区在线观看| 国产 福利 在线| 久久一本综合| 国产精品成人观看视频免费| 男人最爱成人网| 久久亚洲精品毛片| 色哟哟在线观看| 欧美高清dvd| 色婷婷av国产精品| 国产精品久久久久久亚洲伦| aaa黄色大片| 人妖欧美一区二区| 青草视频在线观看视频| 国产一区二区三区四区| 亚洲最大的免费| 色黄视频在线观看| 久久国产精品电影| 酒色婷婷桃色成人免费av网| 欧美一区二区视频在线观看2022| 国产成人免费看| 亚洲人被黑人高潮完整版| 国产在线观看无码免费视频| 狠狠狠色丁香婷婷综合激情| 日韩网址在线观看| 欧美精品首页| 亚洲欧美日韩精品综合在线观看| www.豆豆成人网.com| 国产精品一区电影| 中文字幕资源网在线观看免费| 久久精品国产清自在天天线| 日本中文字幕一区二区有码在线| 欧美一级一区二区| 在线观看毛片网站| 日韩欧美亚洲范冰冰与中字| 久草视频手机在线观看| 中文字幕一区二区视频| 欧洲美一区二区三区亚洲| 成人综合在线观看| 久久精品久久99| 蜜桃一区二区三区在线观看| 欧美一级在线看| 黄色亚洲大片免费在线观看| 一区国产精品| 成人精品久久| 日韩一区二区三区资源| 亚洲成aⅴ人片久久青草影院| 5566中文字幕一区二区| 日韩护士脚交太爽了| 国产99久久精品一区二区永久免费 | 五月婷婷深深爱| 亚洲电影av在线| 亚洲国产成人精品一区二区三区| 91精品欧美综合在线观看最新| 免费在线不卡av| 欧美亚洲一区二区三区四区| 日本高清不卡码| 欧美性69xxxx肥| 亚洲熟妇无码乱子av电影| 性做久久久久久免费观看| 久久久.www| 一区二区久久久| 久久精品国产亚洲av高清色欲 | 中文字幕av一区| 福利视频在线看| 一区二区三区四区在线观看视频| 撸视在线观看免费视频| 亚洲天堂2020| 国产区视频在线| 中文在线不卡视频| 国产在线观看av| 久久久精品一区二区| av片在线观看免费| 欧美大片欧美激情性色a∨久久| 天堂成人av| 国模叶桐国产精品一区| 在线免费日韩片| 国产精品国语对白| 日韩毛片免费视频一级特黄| 91理论片午午论夜理片久久| 精品视频一区二区三区| 国产98在线|日韩| 鲁大师精品99久久久| 久久久一本精品99久久精品| 国产欧美日韩一区二区三区四区| 日韩videos| 66国产精品| 国产 日韩 欧美在线| 亚洲欧美网站| 精品亚洲一区二区三区四区| 国产一区二区三区综合| 亚洲视频 中文字幕| 久久婷婷久久一区二区三区| youjizz亚洲女人| 亚洲黄一区二区三区| xxxx.国产| 欧美日韩精品一区二区三区 | 国产自产在线视频| 亚洲欧美日韩专区| 国产精品自在自线| 成人网在线免费视频| 永久免费看mv网站入口78| 日本一区二区三区久久久久久久久不 | 亚洲激情校园春色| 九九热精品视频在线| 欧美日韩精品福利| 欧美一区,二区| 永久免费精品影视网站| 成人女同在线观看| 国产综合视频在线观看| 国内自拍欧美| 亚洲在线色站| 国产精品久久国产愉拍| 国产成人美女视频| 99精品一区二区三区| 国产视频123区| 午夜在线成人av| 在线观看免费中文字幕| 亚洲精品不卡在线| 二区三区四区高清视频在线观看| 欧美怡红院视频一区二区三区| 成人免费观看49www在线观看| 精品亚洲欧美日韩| 综合在线视频| 噼里啪啦国语在线观看免费版高清版| 高清成人在线观看| 91免费在线看片| 欧美日韩一区二区免费在线观看| 99产精品成人啪免费网站| 亚洲视频在线视频| 久久青草伊人| 动漫一区二区在线| 色综合蜜月久久综合网| 国产欧美在线一区| 成人av网站在线观看| 乱h高h女3p含苞待放| 在线观看www91| 天堂中文字幕在线| 国产综合在线视频| 视频一区中文字幕精品| 在线成人性视频| 日韩成人一区二区三区在线观看| 国产白嫩美女无套久久| 亚洲一区视频在线观看视频| 亚洲在线免费观看视频| 亚洲天堂网站在线观看视频| 欧美激情20| 国产专区一区二区| 亚洲人人精品| 蜜桃视频无码区在线观看| 亚洲视频小说图片| 国产又粗又猛又黄又爽| 亚洲最新在线视频| 浪潮色综合久久天堂| 麻豆精品蜜桃一区二区三区| 亚洲高清激情| 怡红院一区二区| 亚洲国产精品久久久久秋霞影院 | 亚洲人在线视频| 天天综合网天天| 日本一区二区三区视频免费看| 香蕉久久夜色精品国产| 在线观看福利片| 色婷婷av一区二区| 邻家有女韩剧在线观看国语| 国产成人精彩在线视频九色| 欧美美女在线| 尤蜜粉嫩av国产一区二区三区| 亚洲国产成人一区二区三区| 国产亚洲久一区二区| www亚洲欧美| 日韩中文字幕在线一区| 欧妇女乱妇女乱视频| 成人精品一区二区三区四区 | 亚洲丝袜精品| 国产超碰91| 亚洲欧美网站| 一级片黄色录像| 69堂成人精品免费视频| 在线āv视频| 国产一区二区三区奇米久涩 | 偷拍一区二区三区| 免费黄色片在线观看| 国产精品久久网| 亚洲综合色网| caopor在线| 91黄色小视频| 久cao在线| 国产免费一区二区| 日韩国产成人精品| 裸体武打性艳史| 亚洲国产高清高潮精品美女| 成人美女大片| 最新中文字幕久久| av一本久道久久综合久久鬼色| 探花视频在线观看| www国产亚洲精品久久网站| 都市激情亚洲| 欧美精品成人网| 一区二区在线观看视频在线观看| 日本美女一级视频| 国产精品免费小视频| 欧美久久一区| 亚洲黄色小说视频| 日韩三级在线观看| 少妇一区视频| 亚洲理论电影在线观看| 国产欧美一区二区三区在线老狼| aaa级黄色片| 国产成人涩涩涩视频在线观看| 羞羞答答成人影院www| 你懂得在线视频| 欧美乱妇一区二区三区不卡视频| 黑人另类精品××××性爽| 日韩精品久久久毛片一区二区| 国产精品99久久久久久似苏梦涵| 麻豆成人免费视频| 久久91亚洲精品中文字幕| 视频国产一区| 深田咏美中文字幕| 欧美久久一二三四区| 中国字幕a在线看韩国电影| 美女av免费观看|