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

Kubernetes 資源拓撲感知調度優化

云計算 云原生
cgroups 是 Linux 內核提供的一種可以限制單個進程或者多個進程所使用資源的機制,可以對 CPU、內存等資源實現精細化的控制。Linux 下的容器技術主要通過 cgroups 來實現資源控制。

作者 | 騰訊星辰算力團隊

1.背景

1.1 問題源起

近年來,隨著騰訊內部自研上云項目的不斷發展,越來越多的業務開始使用云原生方式托管自己的工作負載,容器平臺的規模因此不斷增大。以 Kubernetes 為底座的云原生技術極大推動了云原生領域的發展,已然成為各大容器平臺事實上的技術標準。在云原生場景下,為了最大化實現資源共享,單臺宿主機往往會運行多個不同用戶的計算任務。如果在宿主機內沒有進行精細化的資源隔離,在業務負載高峰時間段,多個容器往往會對資源產生激烈的競爭,可能導致程序性能的急劇下降,主要體現為:

  • 資源調度時頻繁的上下文切換時間
  • 頻繁的進程切換導致的 CPU 高速緩存失效

因此,在云原生場景下需要針對容器資源分配加以精細化的限制,確保在 CPU 利用率較高時,各容器之間不會產生激烈競爭從而引起性能下降。

1.2 調度場景

騰訊星辰算力平臺承載了全公司的 CPU 和 GPU 算力服務,擁有著海量多類型的計算資源。當前,平臺承載的多數重點服務偏離線場景,在業務日益增長的算力需求下,提供源源不斷的低成本資源,持續提升可用性、服務質量、調度能力,覆蓋更多的業務場景。然而,Kubernetes 原生的調度與資源綁定功能已經無法滿足復雜的算力場景,亟需對資源進行更加精細化的調度,主要體現為:

(1)Kubernetes 原生調度器無法感知節點資源拓撲信息導致 Pod 生產失敗

kube-scheduler 在調度過程中并不感知節點的資源拓撲,當 kube-scheduler 將 Pod 調度到某個節點后,kubelet 如果發現節點的資源拓撲親和性要求無法滿足時,會拒絕生產該 Pod,當通過外部控制環(如 deployment)來部署 Pod 時,則會導致 Pod 被反復創建-->調度-->生產失敗的死循環。

(2)基于離線虛擬機的混部方案導致的節點實際可用 CPU 核心數變化

面對運行在線業務的云主機平均利用率較低的現實,為充分利用空閑資源,可將離線虛擬機和在線虛擬機混合部署,解決公司離線計算需求,提升自研上云資源平均利用率。在保證離線不干擾在線業務的情況下,騰訊星辰算力基于自研內核調度器 VMF 的支持,可以將一臺機器上的閑時資源充分利用起來,生產低優先級的離線虛擬機。由于 VMF 的不公平調度策略,離線虛擬機的實際可用核心數受到在線虛擬機的影響,隨著在線業務的繁忙程度不斷變化。因此,kubelet 通過 cadvisor 在離線宿主機內部采集到的 CPU 核心數并不準確,導致了調度信息出現偏差。

圖片

cvm-architecture

(3)資源的高效利用需要更加精細化的調度粒度

kube-scheduler 的職責是為 Pod 選擇一個合適的 Node 完成一次調度。然而,想對資源進行更高效的利用,原生調度器的功能還遠遠不夠。在調度時,我們希望調度器能夠進行更細粒度的調度,比如能夠感知到 CPU 核心、GPU 拓撲、網絡拓撲等等,使得資源利用方式更加合理。

2.預備知識

2.1 cgroups 之 cpuset 子系統

cgroups 是 Linux 內核提供的一種可以限制單個進程或者多個進程所使用資源的機制,可以對 CPU、內存等資源實現精細化的控制。Linux 下的容器技術主要通過 cgroups 來實現資源控制。

在 cgroups 中,cpuset 子系統可以為 cgroups 中的進程分配獨立的 CPU 和內存節點。通過將 CPU 核心編號寫入 cpuset 子系統中的 cpuset.cpus文件中或將內存 NUMA 編號寫入 cpuset.mems文件中,可以限制一個或一組進程只使用特定的 CPU 或者內存。

幸運的是,在容器的資源限制中,我們不需要手動操作 cpuset 子系統。通過連接容器運行時(CRI)提供的接口,可以直接更新容器的資源限制。

// ContainerManager contains methods to manipulate containers managed by a
// container runtime. The methods are thread-safe.
type ContainerManager interface {
// ......
// UpdateContainerResources updates the cgroup resources for the container.
UpdateContainerResources(containerID string, resources *runtimeapi.LinuxContainerResources) error
// ......
}

2.2 NUMA 架構

非統一內存訪問架構(英語:Non-uniform memory access,簡稱 NUMA)是一種為多處理器的電腦設計的內存架構,內存訪問時間取決于內存相對于處理器的位置。在 NUMA 下,處理器訪問它自己的本地內存的速度比非本地內存(內存位于另一個處理器,或者是處理器之間共享的內存)快一些。現代多核服務器大多采用 NUMA 架構來提高硬件的可伸縮性。

圖片

numa-architecture

從圖中可以看出,每個 NUMA Node 有獨立的 CPU 核心、L3 cache 和內存,NUMA Node 之間相互連接。相同 NUMA Node 上的 CPU 可以共享 L3 cache,同時訪問本 NUMA Node 上的內存速度更快,跨 NUMA Node 訪問內存會更慢。因此,我們應當為 CPU 密集型應用分配同一個 NUMA Node 的 CPU 核心,確保程序的局部性能得到充分滿足。

2.3 Kubernetes 調度框架

Kubernetes 自 v1.19 開始正式穩定支持調度框架,調度框架是面向 Kubernetes 調度器的一種插件架構,它為現有的調度器添加了一組新的“插件”API,插件會被編譯到調度器之中。這為我們自定義調度器帶來了福音。我們可以無需修改 kube-scheduler 的源代碼,通過實現不同的調度插件,將插件代碼與 kube-scheduler 編譯為同一個可執行文件中,從而開發出自定義的擴展調度器。這樣的靈活性擴展方便我們開發與配置各類調度器插件,同時無需修改 kube-scheduler 的源代碼的方式使得擴展調度器可以快速更改依賴,更新到最新的社區版本。

圖片

scheduling-framework-extensions

調度器的主要擴展點如上圖所示。我們擴展的調度器主要關心以下幾個步驟:

(1)PreFilter 和 Filter

這兩個插件用于過濾出不能運行該 Pod 的節點,如果任何 Filter 插件將節點標記為不可行,該節點都不會進入候選集合,繼續后面的調度流程。

(2)PreScore、Score 和 NormalizeScore

這三個插件用于對通過過濾階段的節點進行排序,調度器將為每個節點調用每個評分插件,最終評分最高的節點將會作為最終調度結果被選中。

(3)Reserve 和 Unreserve

這個插件用于在 Pod 真正被綁定到節點之前,對資源做一些預留工作,保證調度的一致性。如果綁定失敗則通過 Unreserve 來釋放預留的資源。

(4)Bind

這個插件用于將 Pod 綁定到節點上。默認的綁定插件只是為節點指定 spec.nodeName 來完成調度,如果我們需要擴展調度器,加上其他的調度結果信息,就需要禁用默認 Bind 插件,替換為自定義的 Bind 插件。

3.國內外技術研究現狀

目前 Kubernetes 社區、Volcano 開源社區均有關于拓撲感知相關的解決方案,各方案有部分相同之處,但各自都有局限性,無法滿足星辰算力的復雜場景。

3.1 Kubernetes 社區

Kubernetes 社區 scheduling 興趣小組針對拓撲感知調度也有過一套解決方案,這個方案主要是由 RedHat 來主導,通過scheduler-plugins和node-feature-discovery配合實現了考慮節點拓撲的調度方法。社區的方法僅僅考慮節點是否能夠在滿足 kubelet 配置要求的情況下,完成調度節點篩選和打分,并不會執行綁核,綁核操作仍然交給 kubelet 來完成,相關提案在這里。具體實現方案如下:

  • 節點上的 nfd-topology-updater 通過 gRPC 上報節點拓撲到 nfd-master 中(周期 60s)。
  • nfd-master 更新節點拓撲與分配情況到 CR 中(NodeResourceTopology)。
  • 擴展 kube-scheduler,進行調度時考慮 NodeTopology。
  • 節點 kubelet 完成綁核工作。

該方案存在較多的問題,不能解決生產實踐中的需求:

  • 具體核心分配依賴 kubelet 完成,因此調度器只會考慮資源拓撲信息,并不會選擇拓撲,調度器沒有資源預留。這導致了節點調度與拓撲調度不在同一個環節,會引起數據不一致問題。
  • 由于具體核心分配依賴 kubelet 完成,所以已調度 Pod 的拓撲信息需要依靠 nfd-worker 每隔 60s 匯報一次,導致拓撲發現過慢因此使得數據不一致問題更加嚴重,參見這里。
  • 沒有區分需要拓撲親和的 pod 和普通的 pod,容易造成開啟拓撲功能的節點高優資源浪費。

3.2 Volcano 社區

Volcano 是在 Kubernetes 上運行高性能工作負載的容器批量計算引擎,隸屬于 CNCF 孵化項目。在 v1.4.0-Beta 版本中進行了增強,發布了有關 NUMA 感知的特性。與 Kubernetes 社區 scheduling 興趣小組的實現方式類似,真正的綁核并未單獨實現,直接采用的是 kubelet 自帶的功能。具體實現方案如下:

  • resource-exporter 是部署在每個節點上的 DaemonSet,負責節點的拓撲信息采集,并將節點信息寫入 CR中(Numatopology)。
  • Volcano 根據節點的 Numatopology,在調度 Pod 時進行 NUMA 調度感知。
  • 節點 kubelet 完成綁核工作。

該方案存在的問題基本與 Kubernetes 社區 scheduling 興趣小組的實現方式類似,具體核心分配依賴 kubelet

完成。雖然調度器盡力保持與 kubelet 一致,但因為無法做資源預留,仍然會出現不一致的問題,在高并發場景下尤其明顯。

3.3 小結

基于國內外研究現狀的結果進行分析,開源社區在節點資源綁定方面還是希望交給 kubelet,調度器盡量保證與 kubelet 的一致,可以理解這比較符合社區的方向。因此,目前各個方案的典型實現都不完美,無法滿足騰訊星辰算力的要求,在復雜的生產環境中我們需要一套更加穩健、擴展性更好的方案。因此,我們決定從各個方案的架構優點出發,探索出一套更加強大的、貼合騰訊星辰算力實際場景的資源精細化調度增強方案。

4.問題分析

4.1 離線虛擬機節點實際可用 CPU 核心數變化

從 1.2 節中我們可以知道,騰訊星辰算力使用了基于離線虛擬機的混部方案,節點實際的 CPU 可用核心數會收到在線業務的峰值影響從而變化。因此,kubelet 通過 cadvisor 在離線宿主機內部采集到的 CPU 核心數并不準確,這個數值是一個固定值。因此,針對離線資源我們需要調度器通過其他的方式來獲取節點的實際算力。

圖片

cvm

目前調度和綁核都不能到離線虛擬機的實際算力,導致任務綁定到在線干擾比較嚴重的 NUMA node,資源競爭非常嚴重使得任務的性能下降。

圖片

cvm-2

幸運的是,我們在物理機上可以采集到離線虛擬機每個 NUMA node 上實際可用的 CPU 資源比例,通過折損公式計算出離線虛擬機的實際算力。接下來就只需要讓調度器在調度時能夠感知到 CPU 拓撲以及實際算力,從而進行分配。

4.2 精細化調度需要更強的靈活性

通過 kubelet 自帶的 cpumanager 進行綁核總是會對該節點上的所有 Pod 均生效。只要 Pod 滿足 Guaranteed 的 QoS 條件,且 CPU 請求值為整數,都會進行綁核。然而,有些 Pod 并不是高負載類型卻獨占 CPU,這種方式的方式很容易造成開啟拓撲功能的節點高優資源浪費。

同時,對于不同資源類型的節點,其拓撲感知的要求也是不一樣的。例如,星辰算力的資源池中也含有較多碎片虛擬機,這部分節點不是混部方式生產出來的,相比而言資源穩定,但是規格很小(如 8 核 CVM,每個 NUMA Node 有 4 核)。由于大多數任務規格都會超過 4 核,這類資源就在使用過程中就可以跨 NUMA Node 進行分配,否則很難匹配。

因此,拓撲感知調度需要更強的靈活性,適應各種核心分配與拓撲感知場景。

4.3 調度方案需要更強的擴展性

調度器在抽象拓撲資源時,需要考慮擴展性。對于今后可能會需要調度的擴展資源,如各類異構資源的調度,也能夠在這套方案中輕松使用,而不僅僅是 cgroups 子系統中含有的資源。

4.4 避免超線程帶來的 CPU 競爭問題

在 CPU 核心競爭較為激烈時,超線程可能會帶來更差的性能。更加理想的分配方式是將一個邏輯核分配給高負載應用,另一個邏輯核分配給不繁忙的應用,或者是將兩個峰谷時刻相反的應用分配到同一個物理核心上。同時,我們避免將同一個應用分配到同一個物理核心的兩個邏輯核心上,這樣很可能造成 CPU 競爭問題。

5.解決方案

為了充分解決上述問題,并考慮到未來的擴展性,我們設計了一套精細化調度的方案,命名為 cassini。整套解決方案包含三個組件和一個 CRD,共同配合完成資源精細化調度的工作。

注:cassini這個名稱來源于知名的土星探測器卡西尼-惠更斯號,對土星進行了精準無誤的探測,借此名來象征更加精準的拓撲發現與調度。

5.1 總體架構

圖片

solution

各模塊職責如下:

  • cassini-master:從外部系統負責收集節點特性(如節點的 offline_capacity,節點電力情況),作為 controller 采用
    Deployment 方式運行。
  • scheduler-plugins:新增調度插件的擴展調度器替換原生調度器,在節點綁定的同時還會分配拓撲調度結果,作為靜態 Pod 在每個 master 節點上運行。

調度整體流程如下:

(1)cassini-worker啟動,收集節點上的拓撲資源信息。

(2)創建或更新 NodeResourceTopology(NRT)類型的 CR 資源,用于記錄節點拓撲信息。

(3)讀取 kubelet 的 cpu_manager_state 文件,將已有容器的 kubelet 綁核結果 patch 到 Pod annotations 中。

(4)cassini-master 根據外部系統獲取到的信息來更新對應節點的 NRT 對象。

(5)擴展調度器 scheduler-plugins 執行 Pod 調度,根據 NRT 對象感知到節點的拓撲信息,調度 Pod 時將拓撲調度結構寫到 Pod annotations 中。

(6)節點 kubelet 監聽并準備啟動 Pod。

(7)節點 kubelet 調用容器運行時接口啟動容器。

(8)cassini-worker 周期性地訪問 kubelet 的 10250 端口來 List 節點上的 Pod 并從 Pod annotations 中獲取調度器的拓撲調度結果。

(9)cassini-worker 調用容器運行時接口來更改容器的綁核結果。

整體可以看出,cassini-worker 在節點上收集更詳細的資源拓撲信息,cassini-master 從外部系統集中獲取節點資源的附加信息。scheduler-plugins 擴展了原生調度器,以這些附加信息作為決策依據來進行更加精細化的調度,并將結果寫到 Pod annotations 中。最終,cassini-worker 又承擔了執行者的職責,負責落實調度器的資源拓撲調度結果。

5.2 API 設計

NodeResourceTopology(NRT)是用于抽象化描述節點資源拓撲信息的 Kubernetes CRD,這里主要參考了 Kubernetes

社區 scheduling 興趣小組的設計。每一個 Zone 用于描述一個抽象的拓撲區域,ZoneType 來描述其類型,ResourceInfo 來描述 Zone 內的資源總量。

// Zone represents a resource topology zone, e.g. socket, node, die or core.
type Zone struct {
// Name represents the zone name.
// +required
Name string `json:"name" protobuf:"bytes,1,opt,name=name"`

// Type represents the zone type.
// +kubebuilder:validation:Enum=Node;Socket;Core
// +required
Type ZoneType `json:"type" protobuf:"bytes,2,opt,name=type"`

// Parent represents the name of parent zone.
// +optional
Parent string `json:"parent,omitempty" protobuf:"bytes,3,opt,name=parent"`

// Costs represents the cost between different zones.
// +optional
Costs CostList `json:"costs,omitempty" protobuf:"bytes,4,rep,name=costs"`

// Attributes represents zone attributes if any.
// +optional
Attributes map[string]string `json:"attributes,omitempty" protobuf:"bytes,5,rep,name=attributes"`

// Resources represents the resource info of the zone.
// +optional
Resources *ResourceInfo `json:"resources,omitempty" protobuf:"bytes,6,rep,name=resources"`
}

注意到,為了更強的擴展性,每個 Zone 內加上了一個 Attributes 來描述 Zone 上的自定義屬性。如 4.1 節中所示,我們將采集到的離線虛擬機實際算力寫入到 Attributes 字段中,來描述每個 NUMA Node 實際可用算力。

5.3 調度器設計

圖片

plugin擴展調度器在原生調度器基礎上擴展了新的插件,大體如下所示:

  • Filter:讀取 NRT 資源,根據每個拓撲內的實際可用算力以及 Pod 拓撲感知要求來篩選節點并選擇拓撲。
  • Score:根據 Zone 個數打分來打分,Zone 越多分越低(跨 Zone 會帶來性能損失)。
  • Reserve:在真正綁定前做資源預留,避免數據不一致,kube-scheduler 的 cache 中也有類似的 assume 功能。
  • Bind:禁用默認的 Bind 插件,在 Bind 時加入 Zone 的選擇結果,附加在 annotations 中。

通過 TopologyMatch 插件使得調度器在調度時能夠考慮節點拓撲信息并進行拓撲分配,并通過 Bind 插件將結果附加在 annotations 中。

值得一提的是,這里還額外實現了關于節點電力調度等更多維度調度的調度器插件,本篇中不作展開討論,感興趣的同學可以私戳我了解。

5.4 master 設計

cassini-master 是中控組件,從外部來采集一些節點上無法采集的資源信息。我們從物理上采集到離線虛擬機的實際可用算力,由 cassini-master 負責將這類結果附加到對應節點的 NRT 資源中。該組件將統一資源收集的功能進行了剝離,方便更新與擴展。

5.5 worker 設計

cassini-worker 是一個較為復雜的組件,作為 DaemonSet 在每個節點上運行。它的職責分兩部分:

(1)采集節點上的拓撲資源。(2)執行調度器的拓撲調度結果。

5.5.1 資源采集

資源拓撲采集主要是通過從 /sys/devices下采集系統相關的硬件信息,并創建或更新到 NRT 資源中。該組件會 watch 節點 kubelet 的配置信息并上報,讓調度器感知到節點的 kubelet 的綁核策略、預留資源等信息。

由于硬件信息幾乎不變化,默認會較長時間采集一次并更新。但 watch 配置的事件是實時的,一旦 kubelet 配置后會立刻感知到,方便調度器根據節點的配置進行不同的決策。

5.5.2 拓撲調度結果執行

拓撲調度結果執行是通過周期性地 reconcile 來完成制定容器的拓撲分配。

(1)獲取 Pod 信息

為了防止每個節點的 cassini-worker都 watch kube-apiserver 造成 kube-apiserver 的壓力,cassini-worker改用周期性訪問 kubelet 的 10250 端口的方式,來 List 節點上的 Pod 并從 Pod annotations 中獲取調度器的拓撲調度結果。同時,從 status 中還可以獲取到每個容器的 ID 與狀態,為拓撲資源的分配創建了條件。

(2)記錄 kubelet 的 CPU 綁定信息

在 kubelet 開啟 CPU 核心綁定時,擴展調度器將會跳過所有的 TopologyMatch插件。此時 Pod annotations 中不會包含拓撲調度結果。在 kubelet 為 Pod 完成 CPU 核心綁定后,會將結果記錄在 cpu_manager_state文件中,cassini-worker 讀取該文件,并將 kubelet 的綁定結果 patch 到 Pod annotations 中,供后續調度做判斷。

(3)記錄 CPU 綁定信息

根據 cpu_manager_state文件,以及從 annotations 中獲取的 Pod 的拓撲調度結果,生成自己的 cassini_cpu_manager_state 文件,該文件記錄了節點上所有 Pod 的核心綁定結果。

(4)執行拓撲分配

根據 cassini_cpu_manager_state 文件,調用容器運行時接口,完成最終的容器核心綁定工作。

6.優化結果

根據上述精細化調度方案,我們對一些線上的任務進行了測試。此前,用戶反饋任務調度到一些節點后計算性能較差,且由于 steal_time升高被頻繁驅逐。在替換為拓撲感知調度的解決方案后,由于拓撲感知調度可以細粒度地感知到每個 NUMA 節點的離線實際算力(offline_capacity),任務會被調度到合適的 NUMA 節點上,測試任務的訓練速度可提升至原來的 3 倍,與業務在高優 CVM 的耗時相當,且訓練速度較為穩定,資源得到更合理地利用。

同時,在使用原生調度器的情況下,調度器無法感知離線虛擬機的實際算力。當任務調度到某個節點上后,該節點

steal_time會因此升高,任務無法忍受這樣的繁忙節點就會由驅逐器發起 Pod 的驅逐。在此情況下,如果采用原生調度器,將會引起反復驅逐然后反復調度的情況,導致 SLA 收到較大影響。經過本文所述的解決方案后,可將 CPU 搶占的驅逐率大大下降至物理機水平。

7.總結與展望

本文從實際業務痛點出發,首先簡單介紹了騰訊星辰算力的業務場景與精細化調度相關的各類背景知識,然后充分調研國內外研究現狀,發現目前已有的各種解決方案都存在局限性。最后通過痛點問題分析后給出了相應的解決方案。經過優化后,資源得到更合理地利用,原有測試任務的訓練速度能提升至原來的 3 倍,CPU 搶占的驅逐率大大降低至物理機水平。

未來,精細化調度將會覆蓋更多的場景,包括在 GPU 虛擬化技術下對 GPU 整卡、碎卡的調度,支持高性能網絡架構的調度,電力資源的調度,支持超售場景,配合內核調度共同完成等等。

圖片

責任編輯:武曉燕 來源: 騰訊程序員
相關推薦

2022-06-13 14:31:02

資源調度鴻蒙

2023-04-26 15:36:51

WPA鴻蒙

2024-10-21 09:18:47

2010-08-12 15:38:39

IT運維網管軟件摩卡軟件

2021-11-05 15:55:35

作業幫Kubernetes調度器

2025-01-03 17:07:23

2024-09-26 13:11:07

2018-12-18 09:00:26

Kubernetes工作負載測試

2025-07-04 08:43:51

2023-04-17 08:13:13

KubernetesPod

2016-06-15 10:35:59

云計算

2023-05-31 08:12:26

Kubernete資源分配工具

2020-11-23 08:48:00

Kubernetes容器開發

2022-07-24 21:11:19

KubernetesLinux

2015-05-05 09:37:29

OpenStackNova資源統計

2020-10-13 08:34:53

全球流量調度

2022-03-24 08:04:50

Kubernetes資源限制

2020-07-31 07:00:00

Kubernetes容器Linux

2022-01-25 18:24:20

KubernetesDeschedule

2021-02-26 14:40:16

Kubernetes調度器
點贊
收藏

51CTO技術棧公眾號

国产精品你懂的在线| 一级片一级片一级片| 日本在线视频免费| 欧美成人毛片| 国产亚洲欧美日韩在线一区| 久久久久久久久久久人体| 午夜精品短视频| 亚洲视频免费播放| 中文字幕日本一区| 日本一区二区三区国色天香| 51午夜精品视频| 国产国语老龄妇女a片| 深夜福利免费在线观看| 91成人福利社区| 一区二区高清视频在线观看| 成人免费淫片视频软件| 你懂得视频在线观看| 91精品韩国| 久久久久久综合| 日本欧美一级片| 人妻少妇一区二区| xx欧美视频| 国产亚洲一本大道中文在线| 999在线免费观看视频| 青青草手机在线观看| 日本超碰一区二区| 亚洲日本电影在线| 亚洲最大成人免费视频| 欧美日韩人妻精品一区二区三区 | 成人综合久久| 欧美色网站导航| 欧美h视频在线观看| 国产日韩精品suv| 欧美日韩国产亚洲一区| 精品国产sm最大网站| 国产欧美日韩网站| 欧美日韩免费做爰大片| 日韩电影在线免费看| 色诱女教师一区二区三区| 国产女同无遮挡互慰高潮91| 污污的网站在线看| 99久久婷婷国产综合精品电影| 热草久综合在线| 香蕉久久久久久久| 国产一区二区三区四区五区传媒 | 99久久精品免费看国产交换| 日韩不卡在线观看日韩不卡视频| 欧美中文字幕在线观看| 亚洲国产成人精品激情在线| 黑丝一区二区| 亚洲人成网站在线播| 蜜臀一区二区三区精品免费视频| 在线中文字幕-区二区三区四区| 成人免费视频一区| 国产精品久久久久秋霞鲁丝| 九九热国产精品视频| 我不卡神马影院| 亚洲精品ady| 美女黄色片视频| 91麻豆免费在线视频| 中文字幕一区二区三区在线不卡| 国产日韩欧美一区二区三区四区| 黄色av一区二区| 国产精品videosex极品| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美一区二区三区成人精品| 首页亚洲中字| 欧美成人猛片aaaaaaa| 美女网站视频黄色| 国产精品25p| 国产精品久久久久影院亚瑟| 亚洲欧洲中文| 国产国语亲子伦亲子| 久久男女视频| 性色av香蕉一区二区| 成人午夜免费影院| 婷婷亚洲五月色综合| 欧美精品一区二区免费| 你懂得视频在线观看| 亚洲电影影音先锋| 在线视频一区二区| 久久人人爽人人爽人人片 | 成人av电影免费| 天堂在线免费av| 国产一区999| 国产精品入口免费视| 伊人网综合在线| 蜜乳av另类精品一区二区| 欧美高清视频在线观看| 日韩黄色三级视频| 麻豆一区二区三| 国产成人精品视频在线| 国产精品suv一区二区三区| 欧美福利视频| 久久精品视频在线观看| 久久久久久成人网| 欧美日韩国产传媒| 国产香蕉97碰碰久久人人| 亚洲av成人片色在线观看高潮| 激情视频亚洲| 欧美一区二区日韩一区二区| 欧美美女性视频| 国产精品白浆| 亚洲国产精品久久| 国产xxxxxxxxx| 国产在线播放精品| 中文字幕欧美日韩精品| 精品在线播放视频| 久久99蜜桃精品| 91网在线免费观看| 97av免费视频| 激情综合色综合久久综合| 国产免费观看久久黄| 这里只有精品9| 极品少妇一区二区三区精品视频| 精品一区二区久久久久久久网站| 欧美自拍第一页| av网站免费线看精品| 中文字幕日韩一区二区三区| 国产原创视频在线观看| 亚洲激情男女视频| 国内少妇毛片视频| 免费在线小视频| 日本乱人伦一区| 欧美成人福利在线观看| 激情视频亚洲| 久久精彩免费视频| 亚洲精品国产无码| 97久久超碰精品国产| 欧美美乳视频网站在线观看| 国产在线观看免费网站| 中文一区一区三区高中清不卡| 婷婷久久青草热一区二区| 少妇视频一区| 亚洲国产成人在线视频| 麻豆亚洲av成人无码久久精品| 精品一区二区三区免费播放| 先锋影音网一区| 日韩不卡免费高清视频| 在线不卡中文字幕播放| 逼特逼视频在线观看| 一区二区在线影院| 97成人超碰免| 国产又粗又猛又爽又黄91| 高清shemale亚洲人妖| 欧美二区在线| 亚洲女同志freevdieo| 欧美精品久久久久久久久老牛影院| 色噜噜日韩精品欧美一区二区| 日韩大片在线| 久久久亚洲国产| 波多野结衣在线电影| 91论坛在线播放| 天堂av免费看| 国产精品亚洲一区二区在线观看| 亚洲国产成人精品一区二区| 亚洲一区 视频| av电影在线观看完整版一区二区| 国产毛片视频网站| 少妇高潮一区二区三区99| 亚洲国内精品视频| 亚洲伊人成人网| 国产亚洲综合在线| 亚洲久久中文字幕| 一区二区三区在线电影| 国产精品久久亚洲| 麻豆传媒在线免费| 一本色道久久综合亚洲91| 人人爽人人爽av| 欧美另类女人| 精品国产一区二区三区四区精华| 色一区二区三区| 这里只有精品丝袜| 性生活免费网站| 国产精品毛片无遮挡高清| 一区二区三区欧美精品| 欧美天天视频| 欧美h视频在线| bl视频在线免费观看| 欧美精品123区| 麻豆国产尤物av尤物在线观看| 97久久精品人人做人人爽 | 午夜激情成人网| 久久精品视频导航| 性xxxx18| 亚洲国产日韩a在线播放性色| 岛国毛片在线播放| 精品av久久久久电影| 成人日韩av在线| 国精产品一区一区三区mba下载| 欧美日韩精品一区二区三区蜜桃 | 亚洲成av人片在www色猫咪| 亚洲免费黄色网| 激情欧美亚洲| 宅男一区二区三区| 日韩美脚连裤袜丝袜在线| 国产在线拍揄自揄视频不卡99| 成av人电影在线观看| 日韩欧美中文在线| 丰满圆润老女人hd| 国产一区欧美日韩| 免费日韩中文字幕| 国产成人1区| 国产精华一区二区三区| 欧美精品videosex| 欧美电影精品一区二区| 免费一级全黄少妇性色生活片| 久久久精品人体av艺术| 欧美特级aaa| 午夜一区在线| 日本视频一区二区不卡| 国产另类xxxxhd高清| 久久伊人免费视频| 亚洲不卡免费视频| 欧美三片在线视频观看| 国产91精品一区| 久久精品一区二区三区四区| 性生交大片免费看l| 黄色国产精品| 一区二区视频在线观看| 国产精品午夜一区二区三区| 国产日产精品一区二区三区四区| www.欧美| 国产精品永久免费在线| 老司机2019福利精品视频导航| 久久久久久久久久国产精品| 超碰在线观看免费| 亚洲国产欧美一区二区丝袜黑人| 亚洲视频在线免费播放| 欧美视频一二三区| 中文字幕影音先锋| 中文字幕在线观看不卡| 九九热免费在线| 国产三级欧美三级日产三级99| 中文字幕在线播放视频| 不卡视频在线看| 东京热加勒比无码少妇| 欧美一二区在线观看| 欧美精品一区二区三区四区五区 | 亚洲精品美女在线观看| 中文字幕一区二区人妻视频| 国产精品丝袜一区| 韩国三级hd中文字幕| 国产激情91久久精品导航| 131美女爱做视频| 国产色综合网| 一区二区三区四区五区视频| 视频一区欧美| 666精品在线| 国产高清不卡| 国产91网红主播在线观看| 成人福利视频| 国产精品免费视频久久久| 国产精品传媒麻豆hd| 欧美精品国产精品日韩精品| 欧美1—12sexvideos| 97国产精品视频人人做人人爱| 国产盗摄——sm在线视频| 97超碰国产精品女人人人爽| 超碰国产一区| 国产欧美一区二区三区久久| 成人动漫视频在线观看| 成人av免费在线看| 一区二区三区视频免费观看| 成人区精品一区二区| 91精品国产自产精品男人的天堂| 国产精品免费久久久久影院| 亚洲精品大全| 国产成人精品免费视频大全最热| 日韩aaa久久蜜桃av| 亚洲自拍小视频| 极品一区美女高清| 亚洲一区二区三区777| 99re6热只有精品免费观看| 国产日韩中文字幕| 欧美久久一区二区三区| 国模精品娜娜一二三区| 亚洲性视频大全| 三年中文高清在线观看第6集| 国产精品s色| 欧美成人黑人猛交| 国产黄色成人av| www.狠狠爱| 337p粉嫩大胆噜噜噜噜噜91av| 欧美老女人性生活视频| 樱桃国产成人精品视频| 女人十八岁毛片| 欧美精品丝袜久久久中文字幕| 亚洲精品一区二区三区四区| 亚洲欧美中文另类| 91麻豆免费在线视频| 日韩免费观看在线观看| 欧美一区一区| 日韩av一区二区三区美女毛片| 岳的好大精品一区二区三区| 亚洲视频sss| 国产日韩欧美| 中文字幕55页| 国产高清精品网站| 90岁老太婆乱淫| 一区二区三区精品| 中文字幕有码视频| 日韩麻豆第一页| 午夜福利理论片在线观看| 三级精品视频久久久久| 中文在线а√在线8| 91成人免费在线观看| 精品一区二区三区在线 | 久久看片网站| 国产精品无码自拍| 中文字幕一区二区三区不卡| 潘金莲一级淫片aaaaaa播放| 精品国产精品网麻豆系列| 国产黄色在线观看| 国产精品丝袜白浆摸在线 | 波多野结衣激情| 久久性色av| 精品人妻一区二区免费视频| 伊人色综合久久天天| ,一级淫片a看免费| 国产一区二区三区视频| 亚洲综合电影| 久久99久久99精品蜜柚传媒| 天堂一区二区三区四区| 日韩国产小视频| 国产中文字幕一区| 久久一级免费视频| 亚洲精品福利视频网站| 中文字幕在线播放不卡| 亚洲性生活视频在线观看| 亚洲精品日产| 区一区二区三区中文字幕| 国产日韩欧美| 老司机福利av| 色综合久久天天| 男人天堂资源在线| 日本精品久久中文字幕佐佐木| 日本韩国欧美超级黄在线观看| 日韩伦理在线免费观看| 成人一级视频在线观看| 日本一本高清视频| 精品国产欧美一区二区| 国模雨婷捆绑高清在线| 国产伦精品一区二区三区视频孕妇| 欧美伊人久久| 日本泡妞xxxx免费视频软件| 亚洲主播在线播放| 人妻偷人精品一区二区三区| 国内精品久久久久久| 精品国产18久久久久久洗澡| 免费 成 人 黄 色| 26uuu国产在线精品一区二区| 免费视频久久久| 日韩一区二区三区免费看| 欧美拍拍视频| 国产精品福利片| 国产精品17p| 97国产在线播放| 极品美女销魂一区二区三区| 久久久久久视频| 日韩欧美亚洲国产另类| 91在线三级| 欧美日本韩国一区二区三区| 蜜桃传媒麻豆第一区在线观看| 国产一级免费片| 欧美日韩国产一中文字不卡| 国产精品色综合| 九九热视频这里只有精品| 日韩免费小视频| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 激情五月婷婷综合| 日本三级理论片| 国产亚洲欧洲高清| 欧洲一区在线| 久久成人免费观看| 国产精品久久久久久久岛一牛影视 | 国产一在线精品一区在线观看| 在线观看免费视频国产| 色av一区二区| 羞羞电影在线观看www| 久久精品丝袜高跟鞋| 另类综合日韩欧美亚洲| 国产在线视频第一页| 51精品秘密在线观看| 高清av电影在线观看| 人人澡人人澡人人看欧美| 日韩黄色大片| 97精品人人妻人人| 在线免费观看日韩欧美| 欧美视频综合| 91亚洲va在线va天堂va国| 一区二区三区导航| 99久久免费看精品国产一区| 欧美三级视频在线观看| free性欧美| 国产树林野战在线播放| 国产精品影视在线观看| 美女的奶胸大爽爽大片| 亚洲男人天堂网站| 蜜桃视频成人m3u8|