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

HugePages(大內存頁)實現完全解析

系統 Linux
免去繁瑣的文件系統掛載過程,我們主要來看看當使用 mmap 系統調用把虛擬內存映射到 hugetlbfs 文件系統的文件時會發生什么事情。

 [[397163]]

在《一文讀懂 HugePages的原理》一文中介紹了 HugePages(大內存頁)的原理和使用,現在我們來分析一下 Linux 內核是怎么實現 HugePages 分配的。

本文使用 Linux 內核 2.6.23 版本

HugePages分配器初始化

在內核初始化時,會調用 hugetlb_init 函數對 HugePages 分配器進行初始化,其實現如下:

  1. static int __init hugetlb_init(void) 
  2.     unsigned long i; 
  3.  
  4.     // 1. 初始化空閑大內存頁鏈表 hugepage_freelists,  
  5.     //    內核使用 hugepage_freelists 鏈表把空閑的大內存頁連接起來, 
  6.     //    為了分析簡單,我們可以把 MAX_NUMNODES 當成 1 
  7.     for (i = 0; i < MAX_NUMNODES; ++i)           
  8.         INIT_LIST_HEAD(&hugepage_freelists[i]);  
  9.  
  10.     // 2. max_huge_pages 為系統能夠使用的大頁內存的數量, 
  11.     //    由系統啟動項 hugepages 指定, 
  12.     //    這里主要申請大內存頁, 并且保存到 hugepage_freelists 鏈表中. 
  13.     for (i = 0; i < max_huge_pages; ++i) { 
  14.         if (!alloc_fresh_huge_page()) 
  15.             break; 
  16.     } 
  17.  
  18.     max_huge_pages = free_huge_pages = nr_huge_pages = i; 
  19.  
  20.     return 0; 

hugetlb_init 函數主要完成兩個工作:

  • 初始化空閑大內存頁鏈表 hugepage_freelists,這個鏈表保存了系統中能夠使用的大內存。
  • 為系統申請空閑的大內存頁,并且保存到 hugepage_freelists 鏈表中。

我們再來分析下 alloc_fresh_huge_page 函數是怎么申請大內存頁的,其實現如下:

  1.  static int alloc_fresh_huge_page(void) 
  2.  { 
  3.      static int prev_nid; 
  4.      struct page *page; 
  5.      int nid; 
  6.      ... 
  7.      // 1. 申請一個大的物理內存頁... 
  8.      page = alloc_pages_node(nid, htlb_alloc_mask|__GFP_COMP|__GFP_NOWARN, 
  9.                             HUGETLB_PAGE_ORDER); 
  10.  
  11.     if (page) { 
  12.         // 2. 設置釋放大內存頁的回調函數為 free_huge_page 
  13.         set_compound_page_dtor(page, free_huge_page);  
  14.         ... 
  15.         // 3. put_page 函數將會調用上面設置的 free_huge_page 函數把內存頁放入到緩存隊列中 
  16.         put_page(page); 
  17.  
  18.         return 1; 
  19.     } 
  20.  
  21.     return 0; 

所以,alloc_fresh_huge_page 函數主要完成三個工作:

  • 調用 alloc_pages_node 函數申請一個大內存頁(2MB)。
  • 設置大內存頁的釋放回調函數為 free_huge_page,當釋放大內存頁時,將會調用這個函數進行釋放操作。
  • 調用 put_page 函數釋放大內存頁,其將會調用 free_huge_page 函數進行相關操作。

那么,我們來看看 free_huge_page 函數是怎么釋放大內存頁的,其實現如下:

  1. static void free_huge_page(struct page *page) 
  2.     ... 
  3.     enqueue_huge_page(page);     // 把大內存頁放置到空閑大內存頁鏈表中 
  4.     ... 

free_huge_page 函數主要調用 enqueue_huge_page 函數把大內存頁添加到空閑大內存頁鏈表中,其實現如下:

  1.  static void enqueue_huge_page(struct page *page) 
  2.  { 
  3.      int nid = page_to_nid(page); // 我們假設這里一定返回 0 
  4.   
  5.      // 把大內存頁添加到空閑鏈表 hugepage_freelists 中 
  6.      list_add(&page->lru, &hugepage_freelists[nid]); 
  7.   
  8.      // 增加計數器 
  9.      free_huge_pages++; 
  10.     free_huge_pages_node[nid]++; 
  11. }                                                              

從上面的實現可知,enqueue_huge_page 函數只是簡單的把大內存頁添加到空閑鏈表 hugepage_freelists 中,并且增加計數器。

假如我們設置了系統能夠使用的大內存頁為 100 個,那么空閑大內存頁鏈表 hugepage_freelists 的結構如下圖所示:

所以,HugePages 分配器初始化的調用鏈為:

  1. hugetlb_init() 
  2.       | 
  3.       +——> alloc_fresh_huge_page() 
  4.                       | 
  5.                       |——> alloc_pages_node() 
  6.                       |——> set_compound_page_dtor() 
  7.                       +——> put_page() 
  8.                                | 
  9.                                +——> free_huge_page() 
  10.                                             | 
  11.                                             +——> enqueue_huge_page() 

hugetlbfs 文件系統

為系統準備好空閑的大內存頁后,現在來了解下怎樣分配大內存頁。在《一文讀懂 HugePages的原理》一文中介紹過,要申請大內存頁,必須使用 mmap 系統調用把虛擬內存映射到 hugetlbfs 文件系統中的文件中。

免去繁瑣的文件系統掛載過程,我們主要來看看當使用 mmap 系統調用把虛擬內存映射到 hugetlbfs 文件系統的文件時會發生什么事情。

每個文件描述符對象都有個 mmap 的方法,此方法會在調用 mmap 函數映射到文件時被觸發,我們來看看 hugetlbfs 文件的 mmap 方法所對應的真實函數,如下:

  1. const struct file_operations hugetlbfs_file_operations = { 
  2.     .mmap               = hugetlbfs_file_mmap, 
  3.     .fsync              = simple_sync_file, 
  4.     .get_unmapped_area  = hugetlb_get_unmapped_area, 
  5. }; 

從上面的代碼可以發現,hugetlbfs 文件的 mmap 方法被設置為 hugetlbfs_file_mmap 函數。所以當調用 mmap 函數映射 hugetlbfs 文件時,將會調用 hugetlbfs_file_mmap 函數來處理。

而 hugetlbfs_file_mmap 函數最主要的工作就是把虛擬內存分區對象的 vm_flags 字段添加 VM_HUGETLB 標志位,如下代碼:

  1. static int  
  2. hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma) 
  3.     ... 
  4.     vma->vm_flags |= VM_HUGETLB | VM_RESERVED; // 為虛擬內存分區添加 VM_HUGETLB 標志位 
  5.     ... 
  6.     return ret; 

為虛擬內存分區對象設置 VM_HUGETLB 標志位的作用是:當對虛擬內存分區進行物理內存映射時,會進行特殊的處理,下面將會介紹。

虛擬內存與物理內存映射

使用 mmap 函數映射到 hugetlbfs 文件后,會返回一個虛擬內存地址。當對這個虛擬內存地址進行訪問(讀寫)時,由于此虛擬內存地址還沒有與物理內存地址進行映射,將會觸發 缺頁異常,內核會調用 do_page_fault 函數對 缺頁異常 進行修復。

我們來看看整個流程,如下圖所示:

所以,最終會調用 do_page_fault 函數對 缺頁異常 進行修復操作,我們來看看 do_page_fault 做了什么工作,實現如下:

  1. asmlinkage void 
  2. __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code) 
  3.     ... 
  4.     struct mm_struct *mm; 
  5.     struct vm_area_struct *vma; 
  6.     unsigned long address; 
  7.     ... 
  8.  
  9.     mm = tsk->mm;         // 1. 獲取當前進程對應的內存管理對象 
  10.     address = read_cr2(); // 2. 獲取觸發缺頁異常的虛擬內存地址 
  11.  
  12.     ... 
  13.     vma = find_vma(mm, address); // 3. 通過虛擬內存地址獲取對應的虛擬內存分區對象 
  14.     ... 
  15.  
  16.     // 4. 調用 handle_mm_fault 函數對異常進行修復 
  17.     fault = handle_mm_fault(mm, vma, address, write); 
  18.     ... 
  19.  
  20.     return

上面代碼對 do_page_fault 進行了精簡,精簡后主要完成4個工作:

  • 獲取當前進程對應的內存管理對象。
  • 調用 read_cr2 獲取觸發缺頁異常的虛擬內存地址。
  • 通過觸發 缺頁異常 的虛擬內存地址獲取對應的虛擬內存分區對象。
  • 調用 handle_mm_fault 函數對 缺頁異常 進行修復。

我們繼續來看看 handle_mm_fault 函數的實現,代碼如下:

  1. int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, 
  2.                     unsigned long address, int write_access) 
  3.     ... 
  4.     if (unlikely(is_vm_hugetlb_page(vma))) // 虛擬內存分區是否需要使用 HugePages 
  5.         return hugetlb_fault(mm, vma, address, write_access); // 如果使用 HugePages, 就調用 hugetlb_fault 進行處理 
  6.     ... 

對 handle_mm_fault 函數進行精簡后,邏輯就非常清晰。如果虛擬內存分區使用 HugePages,那么就調用 hugetlb_fault 函數進行處理(由于我們分析使用 HugePages 的情況,所以剛好進入這個分支)。

hugetlb_fault 函數主要對進程的頁表進行填充,所以我們先來回顧一下 HugePages 對應的頁表結構,如下圖:

從上圖可以看出,使用 HugePages 后,頁中間目錄 直接指向物理內存頁。所以,hugetlb_fault 函數主要就是對 頁中間目錄項 進行填充。實現如下:

  1. int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, 
  2.                   unsigned long address, int write_access) 
  3.     pte_t *ptep; 
  4.     pte_t entry; 
  5.     int ret; 
  6.  
  7.     ptep = huge_pte_alloc(mm, address); // 1. 找到虛擬內存地址對應的頁中間目錄項 
  8.     ... 
  9.     entry = *ptep; 
  10.  
  11.     if (pte_none(entry)) { // 如果頁中間目錄項還沒進行映射 
  12.         // 2. 那么調用 hugetlb_no_page 函數進行映射操作 
  13.         ret = hugetlb_no_page(mm, vma, address, ptep, write_access); 
  14.         ... 
  15.         return ret; 
  16.     } 
  17.     ... 

對 hugetlb_fault 函數進行精簡后,主要完成兩個工作:

  • 通過觸發 缺頁異常 的虛擬內存地址找到其對應的 頁中間目錄項。
  • 調用 hugetlb_no_page 函數對 頁中間目錄項 進行映射操作。

我們再來看看 hugetlb_no_page 函數怎么對 頁中間目錄項 進行填充:

  1. static int 
  2. hugetlb_no_page(struct mm_struct *mm, struct vm_area_struct *vma, 
  3.                 unsigned long address, pte_t *ptep, int write_access) 
  4.     ... 
  5.     page = find_lock_page(mapping, idx); 
  6.     if (!page) { 
  7.         ... 
  8.         // 1. 從空閑大內存頁鏈表 hugepage_freelists 中申請一個大內存頁 
  9.         page = alloc_huge_page(vma, address); 
  10.         ... 
  11.     } 
  12.     ... 
  13.     // 2. 通過大內存頁的物理地址生成頁中間目錄項的值 
  14.     new_pte = make_huge_pte(vma, page, ((vma->vm_flags & VM_WRITE) 
  15.                                             && (vma->vm_flags & VM_SHARED))); 
  16.  
  17.     // 3. 設置頁中間目錄項的值為上面生成的值 
  18.     set_huge_pte_at(mm, address, ptep, new_pte); 
  19.     ... 
  20.     return ret; 

通過對 hugetlb_no_page 函數進行精簡后,主要完成3個工作:

  • 調用 alloc_huge_page 函數從空閑大內存頁鏈表 hugepage_freelists 中申請一個大內存頁。
  • 通過大內存頁的物理地址生成頁中間目錄項的值。
  • 設置頁中間目錄項的值為上面生成的值。

至此,HugePages 的映射過程已經完成。

還有個問題,就是 CPU 怎么知道 頁中間表項 指向的是 頁表 還是 大內存頁 呢?

這是因為 頁中間表項 有個 PSE 的標志位,如果將其設置為1,那么就表明其指向 大內存頁 ,否則就指向 頁表。

總結

本文介紹了 HugePages 實現的整個流程,當然本文也只是介紹了申請內存的流程,釋放內存的流程并沒有分析,如果有興趣的話可以自己查閱源碼。

責任編輯:武曉燕 來源: Linux內核那些事
相關推薦

2021-04-30 19:53:53

HugePages大內存頁物理

2018-03-16 14:04:45

Linux大內存頁虛擬內存管理

2010-09-25 09:56:46

JVM最大內存

2021-06-21 08:58:14

MySQL數據庫Pages

2009-10-23 12:37:52

無線接入技術

2021-09-05 06:00:47

電腦內存Windows

2010-04-23 11:18:05

Ubuntu 10.0

2013-06-04 17:23:55

Android開發移動開發Fragment

2011-03-17 16:51:51

SQLServer數據加速劑

2024-08-02 16:25:10

2020-04-07 11:25:24

JDK14內存API

2021-11-05 16:33:32

手機內存技術

2014-07-30 11:12:09

block

2009-10-21 17:32:30

綜合布線注意事項

2018-04-24 15:11:43

大內存SSD戴爾

2015-03-30 11:18:50

內存管理Android

2025-04-27 04:22:00

2009-11-02 17:59:51

2025-10-09 11:10:00

開發操作系統Linux

2009-10-28 18:43:34

接入網技術
點贊
收藏

51CTO技術棧公眾號

在线观看国产精品视频| 色欲狠狠躁天天躁无码中文字幕| 啊啊啊久久久| 久久久久国产精品人| 国产欧美日韩中文| 精品午夜福利在线观看| 女厕嘘嘘一区二区在线播放 | 欧洲日本在线| 国产a级毛片一区| 91chinesevideo永久地址| 97在线观看免费视频| 国产视频一区二| 欧美日韩一区二区在线 | 午夜精品av| 亚洲毛片一区二区| 国产精品久久久久久久99| 欧美gv在线| 亚洲另类在线视频| 欧美在线播放一区| 亚洲欧美激情另类| 久国产精品韩国三级视频| 18久久久久久| 久久久www成人免费毛片| 欧美日韩国产高清电影| 日韩电影中文字幕| 国产裸体视频网站| 少妇高潮一区二区三区99| 精品国产老师黑色丝袜高跟鞋| 91免费视频黄| 在线免费黄色| 26uuu国产一区二区三区| 超碰97人人在线| 中文字幕777| 国产日韩欧美三区| 久久久亚洲国产| 欧美日韩精品在线观看视频| 日韩欧美精品| 国产亚洲视频在线观看| 巨胸大乳www视频免费观看| 豆花视频一区二区| 日韩视频123| 久久精品一卡二卡| 青娱乐极品盛宴一区二区| 在线欧美日韩国产| 熟妇人妻无乱码中文字幕真矢织江| 678在线观看视频| 亚洲午夜电影网| 无码人妻精品一区二区蜜桃网站| 国产理论在线观看| 中文字幕日本不卡| 国产福利片一区二区| 香蕉视频在线播放| 国产精品二三区| 中文字幕人成一区| 欧美边添边摸边做边爱免费| 日韩一区日韩二区| 国产欧美综合一区| 在线中文字幕-区二区三区四区| 综合中文字幕亚洲| 特级西西人体www高清大胆| av免费在线观看网址| 一区二区三区成人| 日韩一级性生活片| 中文字幕在线中文字幕在线中三区| 黄色精品在线看| 免费无码av片在线观看| 国精产品一区一区三区四川| 欧美日韩一区二区在线观看 | 999久久久久久久久6666| 日韩一区二区三区电影| 蜜臀视频在线观看| 窝窝社区一区二区| 亚洲性av网站| 免费成人深夜夜行网站| 欧美先锋影音| 4438全国成人免费| 中文字幕福利视频| 国产成人免费在线| 久久精品国产美女| 尤物在线视频| 综合网在线视频| 国产精品又粗又长| 性欧美又大又长又硬| 在线欧美日韩精品| 亚洲三级在线视频| 日韩伦理一区二区三区| 最近2019年日本中文免费字幕 | youjizz在线播放| 亚洲欧美在线视频观看| 久久国产精品网| 四虎成人在线| 欧美一区二区三区在线视频| 女同性恋一区二区三区| 精品一区二区三| 色综合视频网站| 欧美日韩在线视频播放| 国产酒店精品激情| 日本一区二区三区免费观看| 18加网站在线| 色激情天天射综合网| 日本一二三四区视频| 在线视频亚洲专区| 久久69精品久久久久久久电影好 | 欧美日韩在线免费观看视频| 51漫画成人app入口| 欧美午夜精品一区| 人妻体内射精一区二区三区| 欧美gvvideo网站| 久久免费视频在线观看| 97精品人妻一区二区三区在线| 91蜜桃传媒精品久久久一区二区| 中文字幕欧美日韩一区二区三区 | 色综合天天综合在线视频| 在线免费黄色网| 久久99视频| 国产做受高潮69| 国产一区二区三区成人| 国产人成亚洲第一网站在线播放 | 亚洲国产日韩精品在线| 99精品中文字幕| 久久黄色影院| 精品91免费| 岛国中文字幕在线| 91久久人澡人人添人人爽欧美| 欧美图片自拍偷拍| 中文乱码免费一区二区三区下载| 国产精品老牛影院在线观看| 日产精品久久久久久久性色| 亚洲一级二级在线| 亚洲成人激情小说| 一区二区三区午夜探花| 国产综合福利在线| 在线免费av电影| 91成人在线精品| 久久无码人妻精品一区二区三区| 欧美三级小说| aa日韩免费精品视频一| 成人免费在线| 欧美一级理论片| 国语对白在线播放| 激情图片小说一区| 一区二区三区四区免费观看| 少妇精品视频在线观看| x99av成人免费| 亚洲一级黄色大片| 国产精品理论在线观看| 91插插插插插插插插| 第一会所亚洲原创| 国产欧美日韩免费| 欧美激情视频在线播放| 91精品啪在线观看国产60岁| 手机av在线看| 国产成人午夜视频| 国产自产在线视频| 欧美黑人巨大videos精品| 91精品国产高清久久久久久91| 欧美一级视频免费| 大伊人狠狠躁夜夜躁av一区| 欧美大喷水吹潮合集在线观看| 亚洲黄网站黄| 欧美日韩精品一区| 日本肉肉一区| 久久精品久久久久久国产 免费| 国产欧美熟妇另类久久久| 亚洲精品写真福利| 男女一区二区三区| 日韩电影在线一区二区| 一区二区在线观看网站| 免费观看亚洲视频大全| 高清一区二区三区日本久| 亚洲奶汁xxxx哺乳期| 狠狠躁18三区二区一区| 一级特黄曰皮片视频| 精品一区二区免费视频| 日韩欧美猛交xxxxx无码| 亚洲第一二三区| 国产精品一二三在线| 直接在线观看的三级网址| 日韩av综合网| 亚洲综合一区中| 亚洲一区在线播放| 我和岳m愉情xxxⅹ视频| 久久爱www久久做| 国产黄色激情视频| 九一亚洲精品| 亚洲精品免费在线视频| 欧美sm一区| 久久久精品欧美| 天天干天天操av| 欧美日韩二区三区| 97人人澡人人爽人人模亚洲| 欧美国产精品v| 蜜桃色一区二区三区| 老**午夜毛片一区二区三区| 穿情趣内衣被c到高潮视频| 亚洲综合福利| 亚洲综合中文字幕68页| 成人天堂yy6080亚洲高清| 欧美精品午夜视频| 东热在线免费视频| 欧美精品一区二区三区视频| 国产精品51麻豆cm传媒| 亚洲已满18点击进入久久| 蜜臀久久99精品久久久久久| 成人午夜私人影院| 五月六月丁香婷婷| 日本女人一区二区三区| 久久艹国产精品| 婷婷丁香综合| 色综合666| 日韩高清影视在线观看| 91九色在线观看| 另类一区二区| 日韩美女视频免费看| 2001个疯子在线观看| 久久国产精品偷| av在线收看| 亚洲免费视频观看| 天堂成人在线观看| 日韩欧美中文字幕公布| 在线观看xxxx| 欧美午夜寂寞影院| 懂色av蜜臀av粉嫩av分享吧最新章节| 亚洲自拍欧美精品| 国产十六处破外女视频| |精品福利一区二区三区| 国产美女永久免费无遮挡| 久久综合久色欧美综合狠狠| v天堂中文在线| 国产69精品久久99不卡| 人妻换人妻仑乱| 韩国v欧美v日本v亚洲v| 欧美视频国产视频| 精品在线免费视频| 欧美日韩中文不卡| 奇米影视在线99精品| 妺妺窝人体色www在线观看| 久久激情网站| 久久综合久久色| 老司机久久99久久精品播放免费| 国产极品粉嫩福利姬萌白酱| 亚洲精选成人| 狠狠干 狠狠操| 国产精品一级| 97在线播放视频| 亚洲欧美日韩精品一区二区| 人妻久久久一区二区三区| 亚洲国产日韩欧美一区二区三区| 欧美乱大交xxxxx潮喷l头像| 影音先锋久久精品| 免费看一级大黄情大片| 一区二区三区四区五区精品视频| 国产成人无码a区在线观看视频| 亚洲精品九九| 能在线观看的av| 日韩中文字幕av电影| 国产日产欧美视频| 日韩国产精品久久| 国产又黄又猛的视频| 国产麻豆成人精品| 亚洲一区二区三区黄色| 91蜜桃视频在线| 国产传媒视频在线| 亚洲男人天堂av| 久久久香蕉视频| 欧美日韩国产丝袜美女| 在线观看亚洲黄色| 欧美区视频在线观看| www.亚洲黄色| 日韩国产高清视频在线| www.亚洲.com| 欧美精品在线视频观看| 激情黄产视频在线免费观看| 国产成人极品视频| 中文字幕日本一区| 国产美女精品在线观看| 国产一区二区三区四区五区 | 亚洲高清久久| 精品www久久久久奶水| 精品无人区卡一卡二卡三乱码免费卡| 亚洲欧美激情一区二区三区| 久久视频一区二区| 久久99久久99精品免费看小说| 午夜影院在线观看欧美| 中文字幕有码无码人妻av蜜桃| 91精品国产欧美一区二区成人| 人妻va精品va欧美va| 中文字幕视频一区二区在线有码 | 色诱视频网站一区| 国产美女永久免费| 亚洲精品综合精品自拍| 国产在线高清视频| 秋霞av国产精品一区| 久久gogo国模啪啪裸体| 免费在线成人av电影| 中文在线日韩| 国产精品涩涩涩视频网站| 国产精品91一区二区| 熟女少妇内射日韩亚洲| 亚洲sss视频在线视频| 国产精品无码久久久久成人app| 亚洲精品按摩视频| av网址在线免费观看| 国产成人综合久久| 国产精品久久久久久久久久白浆| 一本色道久久综合亚洲二区三区 | 日本大胆欧美| 欧美成人高潮一二区在线看| 激情综合一区二区三区| 美女100%无挡| 性做久久久久久免费观看| 国产又黄又爽视频| 国产亚洲精品久久久久久| av影视在线| 亚洲自拍小视频免费观看| 欧美最新另类人妖| 国产偷人视频免费| 成人免费高清视频| 久久精品99国产精| 7799精品视频| yw在线观看| 国产精品福利在线观看网址| 欧美自拍视频| 亚洲人精品午夜射精日韩 | 日本aa在线| 91精品啪在线观看麻豆免费| 欧美限制电影| 成年人在线看片| 久久久久国产成人精品亚洲午夜 | 青青青草视频在线| 亚洲aⅴ日韩av电影在线观看 | 久久蜜臀中文字幕| av资源免费观看| 亚洲成人黄色在线| 国产区美女在线| 97netav| 66久久国产| 99中文字幕在线| 亚洲欧美激情一区二区| 国产免费久久久| 久久视频免费观看| 精品一区二区三区中文字幕在线| 强开小嫩苞一区二区三区网站 | 国产成人免费观看网站| 在线观看www91| av在线电影院| 国产一区二区在线播放| 国产精品99在线观看| 中文 日韩 欧美| 亚洲男女一区二区三区| 精品毛片在线观看| 欧美日韩成人精品| 狠狠一区二区三区| 欧美 国产 日本| 亚洲国产精品99久久久久久久久| 中文区中文字幕免费看| 最近2019中文字幕一页二页| 亚洲精品一区二区在线播放∴| 国产成年人在线观看| 国产白丝网站精品污在线入口| 久久亚洲精品大全| 日韩精品在线观| 粉嫩91精品久久久久久久99蜜桃 | 国产cdts系列另类在线观看| av日韩免费电影| 麻豆成人精品| 国产视频精品免费| 精品国产一区二区三区不卡| 久热在线观看视频| 亚洲欧美日韩国产成人综合一二三区| 成人国产精品久久| 亚洲精品日韩在线观看| 韩国成人精品a∨在线观看| 久久精品免费在线| 日韩成人在线电影网| 四虎成人在线| 屁屁影院ccyy国产第一页| 久久免费国产精品| 国产乱淫av免费| 97在线看免费观看视频在线观看| 国产精品视频一区二区三区四蜜臂| 手机版av在线| 亚洲一区精品在线| 国产一二在线观看| 91影院未满十八岁禁止入内| 欧美一级一区| av激情在线观看| 亚洲欧美三级伦理| 成人影院网站ww555久久精品| 波多野结衣综合网| 国产精品久久久久久久久动漫| 不卡av中文字幕| 国产精品av电影| 韩国在线一区| 欧美老女人性生活视频| 欧美成人精品3d动漫h| 国产精品高潮久久| 成人av一级片| 亚洲精品国久久99热| 国产在线观看免费网站|