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

Linux內存管理--內存回收

系統 Linux
在內存回收過程中,有哪些內存可以回收,什么時候進行回收,回收內存時如何盡可能的減少對系統性能的影響,回收內存的策略,這些是我們著重要關注的問題,也是本文主要闡述的重點。

內存的回收在Linux內存管理中占據非常重要的地位,系統的內存畢竟是有限的,跑的進程成百上千,系統內存越來越小,我們必須選擇一些內存進行回收,以滿足別的任務的需求。在內存回收過程中,有哪些內存可以回收,什么時候進行回收,回收內存時如何盡可能的減少對系統性能的影響,回收內存的策略,這些是我們著重要關注的問題,也是本文主要闡述的重點。

1.1 內存回收的目標


不是所有的物理內存都可以參與回收的,比如要是把內核代碼段的內存給回收了,系統就無法正常運行了,一般內核代碼段,數據段,內核kmalloc()出來的內存,內核線程占用的內存等都是不可以回收的,除此之外的內存都是我們要回收的目標。

回收的內存主要是由用戶態進程占用的內存和內核自己在運行時所使用的一些內存組成。用戶態進程占用的內存主要是我們常見的進程代碼段,數據段,堆棧等,內核運行使用的內存主要是磁盤高速緩存(如索引節點,目錄項高速緩存),頁面高速緩存(訪問文件時系統生成的頁面cache),mmap()文件時所用的有名映射所使用的物理內存。后面的這些內才能雖然也是內核管理使用的內存,但對其進行回收的時候,頂多影響內核的性能,而不會導致系統無法運行。

1.2 內存回收的時機


1、內存緊缺回收:grow_buffers()無法獲取緩沖區頁,alloc_page_buffers()無法獲取頁臨時緩沖區首部,__alloc_pages()無法再給定的內存區分配一組連續頁框。

2、周期回收:必要時,激活相應內核線程執行內存回收算法:kswapd()內核線程,檢查某個內存管理區的空閑頁框數是否已低于pages_high值的標高。events內核線程,一個工作者線程,回收位于高速內存緩存中的所有空閑的slab。

1.3 內存回收的策略


1.3.1 內存回收的分類

內存回收主要是要回收兩類內存:最近最少使用的內存以及高速內存緩存中空閑的slab。前者主要包括用戶態進程的代碼段,數據段,堆棧,文件映射內存,頁高速內存,后者主要包括磁盤高速緩存及一些其他的空閑內存高速緩存。

最近最少使用內存存放在一個lru鏈表上,每個內存管理區zone都有一個lru結構,里面含有active和inactive兩個鏈表頭,active鏈表上記錄當前的活躍的報文,inactive用來記錄當前不活躍的報文。一般我們回首lru上的inactive鏈表上的內存頁。同時,在內存回收的過程中,會從active鏈表向inactive鏈表上補充對應的最近最少使用內存頁。每個內存頁的內核數據結構page上有一個標記位PG_referenced,該標記位使得一個頁從"不活動“狀態轉為”活動“狀態的時間加倍,反之亦然。比如:一個頁面可能1個小時內沒人反應,不能因為偶然的一次訪問就認為它是活躍的,得兩次才認為它是一個活躍的頁面。下面是頁面在inactive和active鏈表上轉移的變化圖。

Slab內存高速緩存中經常會有一些完全空閑的slab,這些是我們回收的另一個目標。

1.3.2 反向映射

對于可以通過用戶態線性地址空間可以直接訪問到的物理頁來說,可以分為匿名頁和文件映射頁兩類,匿名頁指的是不與具體文件對應映射的物理頁,比如代碼段,堆棧等使用的物理頁,映射頁指的是映射到文件某一部分的物理頁,通常使用mmap()來進行相關的映射。

對于匿名映射和文件映射來說,可能一段物理內存會在多個進程的頁表中使用,比如對于匿名映射,fork()一個進程,一開始會共用父進程的物理內存,對于文件映射,多個進程可能同時映射到一個文件的同一部分文件。所以在頁面回收時,需要將該頁面在所有的頁表引用中給去除掉。這種手段稱為反向映射。想要找到使用這些物理頁的頁表項的話,需要先找到引用他們的頁表,而頁表的地址記錄在每個進程的內存描述符里面,同時用來描述進程用戶態地址空間的每個vm_area_struct都記錄了一個指針,指向所屬的內存描述符。因此只要通過物理頁找到引用他們的vm_area_struct,就能找到內存描述符,從而找到頁表,找到對應的頁表項。

匿名頁的反向映射:

對于匿名頁來說,每個頁面的mapping字段指向一個anon_vma描述符,anon_vma描述符中存在一個鏈表頭,所有引用該頁面的vm_area_struct都存放在里面。page,anon_vma,vm_area_struct這些數據結構的關系如下圖所示:

對于匿名頁來說,其被別的地址空間引用,基本上都是因為fork()進程時,子進程復制父進程的地址空間,從而被引用的。各個vm_area_struct加入anon_vma的鏈表的過程如下:

假設當前一個進程p,后來fork出一個子進程c。

1、當進程P為某個vm_area_struct加入***個物理頁時,比如說發生了缺頁異常,動態分配一個anon_vma的數據結構,將vm_area_struct加入該anon_vma所管理的鏈表,vm_area_struct結構中的anon_vma字段指向該anon_vma,同時把該頁面中的mapping字段賦值為該anon_vma.對于后續為該vm_area_struct申請的物理頁面,其mapping字段都賦值為該anon_vma。

2、當該進程p執行fork()時,在fork的處理過程中,會調用dup_mmap()來復制進程p的線性地址空間,在dup_mmap()會復制進程p的每一個vm_area_struct,加入到自己的地址空間中,并將vm_area_struct加入到anon_vma所管理的鏈表中,參看anon_vma_link()。此時為進程p申請的頁面被進程c共享,通過頁面的mapping字段可以找到anon_vma,從anon_vma可以遍歷進程p,c。

3、考慮一個問題,在進程c中才觸發缺頁異常被申請的內存頁,其mmapping被賦值為所屬vm_area_struct的vma_anon,但進程p并沒有使用到該頁,所以一個物理頁mapping字段指向的vma_anon所下掛的vm_area_struct可能并不包含該物理頁。

文件映射頁的反向映射:

對于每個文件映射頁,其page mapping字段指向的是對應文件的address_space數據結構,address_space中有個 struct prio_tree_root i_mmap 字段,指向一個優先樹,優先樹里面會把所有映射該文件內容的vm_area_struct 給組織起來。在該樹中,其樹的節點基地址和堆地址分別是映射的文件內容的起始地址和結束地址,要是多個進程同時映射該地址段,會用鏈表在該節點上將vm_area_struct串起來。

1.3.3 內存回收流程介紹     

睡眠回收我們不關注,主要介紹內存緊缺回收及周期回收:

1、內存緊缺回收主要函數是try_to_free_pages(),該函數會執行一個循環,按照優先級從12到0,依次調用shrink_caches(),shrink_slab()來回收頁面,直到回收至少32個內存頁面。

依次調用以下輔助函數:

shrink_caches():調用shrink_zone()對傳入的zone鏈表中的每個zone,進行lru上面的頁面回收。

shrink_slab():對磁盤索引節點cache和目錄項索引節點等磁盤高速緩存進行回收,由于磁盤索引節點和目錄項索引節點都是從slab高速緩存中分配的,這樣就會導致空閑slab的產生,空閑slab后續會在周期性回收的cache_reap工作隊列中被回收。估計也就是因為最終會清零空閑slab,才會起這么一個函數名。^_^

shrink_zone():對內存管理區上的lru鏈表中的非活躍頁面進行回收,在非活躍頁面不足的時候,調用refill_inactive_zone()對lru上的inactive鏈表補充非活躍頁面,同時shrink_zone()調用shrink_cache()來進行頁面的回收,該函數的具體解析可以參照下面的源碼淺析。

shrink_list():該輔助函數在shrink_cache()中被調用,該函數對在shrink_cache()中傳入的非活躍page列表進行遍歷,對每個頁面進行回收工作,該函數的具體解析可以參考下面的源碼解析。

refill_inactie_zone():該輔助函數根據一定的規則將處于lru active鏈表上的活躍頁面移動到inactive鏈表上,以補充可以回收的頁面,在lru鏈表里有兩類頁,一類是屬于用戶態空間的頁,比如用戶態進程的代碼段,數據段,一類是在頁高速緩存中的頁,系統為了降低對應用程序的影響,將要優先將頁高速緩存頁進行回收,同時為了系統整體性能也會適當回收用戶態進程頁。按照如下經驗公式進行選擇:

交換傾向值=映射比率/2+負荷值+交換值

2、kswapd進程一般會在系統中睡眠,但當__alloc_page()發現各個管理區的剩余頁面都低于警告值(由內存管理描述符的pages_low字段和protection字段推算出來)時,會激活kswapd進程進行頁面回收,直到回收的頁面使得管理區的剩余頁面高于zone->pages_high時才停止回收,本質上也是調用了shrink_zone()和shrink_slab()。

3、cache_reap工作隊列定期運行來回收slab高速緩存中空閑的slab占用的頁。

#p#

1.4 相關源代碼的淺析


 

  1. static void 
  2. shrink_zone(struct zone *zone, struct scan_control *sc) 
  3. unsigned long nr_active; 
  4. unsigned long nr_inactive; 
  5.   
  6.   
  7. //根據優先級,得到可以掃描的頁面數,優先級越高, 
  8. //代表越不急迫,可以掃描的頁面數也最少 
  9. zone->nr_scan_active += (zone->nr_active >> sc->priority) + 1; 
  10. nr_active = zone->nr_scan_active; 
  11. if (nr_active >= SWAP_CLUSTER_MAX) 
  12. zone->nr_scan_active = 0
  13. else 
  14. nr_active = 0
  15.   
  16.   
  17. zone->nr_scan_inactive += (zone->nr_inactive >> sc->priority) + 1; 
  18. nr_inactive = zone->nr_scan_inactive; 
  19. //非活動頁比較少的話,可以先忽略過去,將跳過的頁面記錄到nr_scan_inactive中 
  20. //留待下一次再處理 
  21. if (nr_inactive >= SWAP_CLUSTER_MAX) 
  22. zone->nr_scan_inactive = 0
  23. else 
  24. nr_inactive = 0
  25.   
  26.  
  27. //設置需要回收的頁面數為32個 
  28. sc->nr_to_reclaim = SWAP_CLUSTER_MAX
  29.   
  30.   
  31. //開始回收頁面,每次掃描32個頁面,多了不干噢!!! 
  32.   
  33. while (nr_active || nr_inactive) { 
  34. if (nr_active) { 
  35. //設置每次要掃描的非活動頁面數,需要將其放 
  36. //入到inactive list里面 
  37. sc->nr_to_scan = min(nr_active, 
  38. (unsigned long)SWAP_CLUSTER_MAX); 
  39. nr_active -sc->nr_to_scan; 
  40. //補充inactive list中的頁面 
  41. refill_inactive_zone(zone, sc); 
  42.   
  43.   
  44. if (nr_inactive) { 
  45. //設置每次將要掃描的頁面,最多也就32個頁面 
  46. sc->nr_to_scan = min(nr_inactive, 
  47. (unsigned long)SWAP_CLUSTER_MAX); 
  48.   
  49. nr_inactive -sc->nr_to_scan; 
  50. //開始正式回收inactive list中的頁面 
  51. shrink_cache(zone, sc); 
  52. //32個頁面被回收完畢,大功告成了!!! 
  53. if (sc->nr_to_reclaim <= 0) 
  54. break; 
  55.   
  56.  
  57. static int shrink_list(struct list_head *page_list, struct scan_control *sc) 
  58. LIST_HEAD(ret_pages); 
  59. struct pagevec freed_pvec; 
  60. int pgactivate = 0
  61. int reclaimed = 0
  62. //有進程需要調度,先進行調度 
  63. cond_resched(); 
  64.   
  65.   
  66. pagevec_init(&freed_pvec, 1); 
  67. //對于page_list 鏈表上的每一個頁面試圖進行回收 
  68. while (!list_empty(page_list)) { 
  69. struct address_space *mapping; 
  70. struct page *page; 
  71. int may_enter_fs; 
  72. int referenced; 
  73.   
  74.   
  75. //獲取一個頁面 
  76. page = lru_to_page(page_list); 
  77. //從lru上摘除 
  78. list_del(&page->lru); 
  79. //page被鎖定,不能回收 
  80. if (TestSetPageLocked(page))//page is locked? 
  81. goto keep; 
  82.   
  83.   
  84. BUG_ON(PageActive(page)); 
  85. //page正在被writeback,不能回收 
  86. if (PageWriteback(page))//page is writeback? 
  87. goto keep_locked; 
  88.   
  89. sc->nr_scanned++; 
  90. /* Double the slab pressure for mapped and swapcache pages */ 
  91.   
  92.   
  93. if (page_mapped(page) || PageSwapCache(page)) 
  94. sc->nr_scanned++; 
  95. //查看最近該頁面有無被訪問過 
  96. referenced = page_referenced(page, 1, sc->priority <= 0); 
  97. /* In active use or really unfreeable?  Activate it. */ 
  98. //1頁面被訪問過,2頁面在用戶態空間,頁面是文件映射頁面, 
  99. //頁面在交換高速緩存中,同時滿足這兩個條件的話,頁面不被回收 
  100. if (referenced && page_mapping_inuse(page)) 
  101. goto activate_locked; 
  102.   
  103.   
  104. #ifdef CONFIG_SWAP 
  105.   
  106. //page is anon and page has not been add to swapcache 
  107. //該頁面是匿名映射的頁面,且該頁面不在swapcache中 
  108. if (PageAnon(page) && !PageSwapCache(page)) { 
  109. //將頁面加入到swap cache中 
  110. if (!add_to_swap(page)) 
  111. goto activate_locked; 
  112. #endif /* CONFIG_SWAP */ 
  113. //得到對應的address_space,有可能是對應文件的address_space,或者是 
  114. //swap cache的address_space 
  115. mapping = page_mapping(page); 
  116. may_enter_fs = (sc->gfp_mask & __GFP_FS) || 
  117. (PageSwapCache(page) && (sc->gfp_mask & __GFP_IO)); 
  118.   
  119.   
  120. //該頁面被映射到某個用戶頁表中 
  121. if (page_mapped(page) && mapping) { 
  122. //將該頁面在用戶頁表中的頁表項通通清除 
  123. switch (try_to_unmap(page)) { 
  124. case SWAP_FAIL: 
  125. goto activate_locked; 
  126. case SWAP_AGAIN: 
  127. goto keep_locked; 
  128. case SWAP_SUCCESS: 
  129. ; /* try to free the page below */ 
  130. //頁面是臟的,哈哈,準備往文件或swapcache里面寫硬盤吧 
  131. if (PageDirty(page)) { 
  132. if (referenced) 
  133. goto keep_locked; 
  134. if (!may_enter_fs) 
  135. goto keep_locked; 
  136. if (laptop_mode && !sc->may_writepage) 
  137. goto keep_locked; 
  138.   
  139.   
  140. /* Page is dirty, try to write it out here */ 
  141. //往磁盤上寫頁面 
  142. switch(pageout(page, mapping)) { 
  143. case PAGE_KEEP: 
  144. goto keep_locked; 
  145. case PAGE_ACTIVATE: 
  146. goto activate_locked; 
  147. case PAGE_SUCCESS: 
  148. if (PageWriteback(page) || PageDirty(page)) 
  149. goto keep; 
  150.   
  151. if (TestSetPageLocked(page)) 
  152. goto keep; 
  153. if (PageDirty(page) || PageWriteback(page)) 
  154. goto keep_locked; 
  155. mapping = page_mapping(page); 
  156. case PAGE_CLEAN: 
  157. ; /* try to free the page below */ 
  158.   
  159.   
  160.   
  161. //若頁面是緩沖區頁面,將對應的buffer_head給釋放掉 
  162. if (PagePrivate(page)) { 
  163. if (!try_to_release_page(page, sc->gfp_mask)) 
  164. goto activate_locked; 
  165. if (!mapping && page_count(page) == 1) 
  166. goto free_it; 
  167.   
  168.   
  169. if (!mapping) 
  170. goto keep_locked; 
  171. /* truncate got there first */ 
  172.   
  173.   
  174. spin_lock_irq(&mapping->tree_lock); 
  175.   
  176.   
  177.   
  178. //頁面為臟頁面或者page的引用計數為2,都是不可以回收的  
  179. if (page_count(page) != 2 || PageDirty(page)) { 
  180. spin_unlock_irq(&mapping->tree_lock); 
  181. goto keep_locked; 
  182.   
  183.   
  184. #ifdef CONFIG_SWAP 
  185. //到達這里,說明該page只被swap cache或者頁高速緩存及 
  186. //fpra所共有,需要將其從swap cache上或者頁高速緩存上刪除。 
  187. if (PageSwapCache(page)) { 
  188. swp_entry_t swap = { .val = page->private }; 
  189. //從swap cache上進行刪除 
  190. __delete_from_swap_cache(page); 
  191. spin_unlock_irq(&mapping->tree_lock); 
  192. swap_free(swap); 
  193. __put_page(page); 
  194. /* The pagecache ref */ 
  195. goto free_it; 
  196. #endif /* CONFIG_SWAP */ 
  197.   
  198.   
  199. //從頁面高速緩存中將該頁面刪除 
  200. __remove_from_page_cache(page); 
  201. spin_unlock_irq(&mapping->tree_lock); 
  202. __put_page(page); 
  203.   
  204.   
  205. free_it: 
  206. unlock_page(page); 
  207. reclaimed++; 
  208. if (!pagevec_add(&freed_pvec, page)) 
  209. __pagevec_release_nonlru(&freed_pvec); 
  210. continue; 
  211.   
  212.   
  213. activate_locked: 
  214. //將頁面設為active頁面,等回去將其放入lru的active鏈表 
  215. SetPageActive(page); 
  216. pgactivate++; 
  217. keep_locked: 
  218. //保持頁面的狀態不變,放入對應的lru active或inactive鏈表中 
  219. unlock_page(page); 
  220. keep: 
  221. //將該無法回收的頁面,放入到ret_pages鏈表中 
  222. list_add(&page->lru, &ret_pages); 
  223. BUG_ON(PageLRU(page)); 
  224. //此處將無法回收的頁面放入page_list中,在函數返回后,去其進行處理 
  225. list_splice(&ret_pages, page_list); 
  226. //此處將可以釋放的頁面通通給釋放掉,回收了^_^ 
  227.  
  228. if (pagevec_count(&freed_pvec)) 
  229. __pagevec_release_nonlru(&freed_pvec); 
  230. mod_page_state(pgactivate, pgactivate); 
  231. sc->nr_reclaimed += reclaimed; 
  232. return reclaimed; 

 

責任編輯:奔跑的冰淇淋 來源: CSDN博客
相關推薦

2010-06-02 13:00:43

Linux 內存監控

2025-03-26 00:00:05

2011-08-15 16:28:06

Cocoa內存管理

2021-09-05 18:29:58

Linux內存回收

2023-10-18 13:31:00

Linux內存

2013-10-12 13:01:51

Linux運維內存管理

2023-05-31 09:00:00

2023-12-19 21:52:51

Go垃圾回收開發

2023-02-28 07:56:07

V8內存管理

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2009-09-02 09:23:26

.NET內存管理機制

2017-05-18 16:30:29

Linux內存管理

2022-08-08 08:31:00

Linux內存管理

2019-06-24 19:00:09

JavaScript內存泄漏垃圾回收

2010-09-27 13:41:22

JVM內存回收

2013-04-01 10:07:19

Java內存回收機制

2023-03-14 11:00:05

過期策略Redis

2025-04-15 06:00:00

2013-10-12 11:15:09

Linux運維內存管理

2025-01-06 08:00:09

點贊
收藏

51CTO技術棧公眾號

国语精品视频| 欧美jizz18性欧美| 久久久久一区| 日韩三级影视基地| 国产a√精品区二区三区四区| 欧美草逼视频| 久久久精品tv| 91在线视频导航| 欧美三级韩国三级日本三斤在线观看| 国产午夜一区| 日韩欧美一二三区| 精品免费国产一区二区| 草莓福利社区在线| 久久日韩粉嫩一区二区三区| 成人av.网址在线网站| 欧美国产在线看| 亚洲婷婷伊人| 日韩欧美一级精品久久| 欧美日韩在线成人| 国内高清免费在线视频| 欧美激情中文不卡| 好看的日韩精品| 国产又粗又猛又爽又黄的视频一 | 日本午夜精品电影| www.精品视频| 蜜臀av亚洲一区中文字幕| 高清欧美性猛交| 搜索黄色一级片| 国产精品中文字幕亚洲欧美| 欧美成人三级电影在线| 中文字幕av专区| 成人性生交大片免费观看网站| 亚洲日本一区二区| 亚洲mv在线看| 可以免费看污视频的网站在线| 国产高清无密码一区二区三区| 国产999视频| 中日韩黄色大片| 欧美破处大片在线视频| 色婷婷综合久久久久中文字幕1| 亚洲av无码国产精品久久| 91精品啪在线观看国产爱臀| 欧美日本乱大交xxxxx| 成人在线观看a| 国模私拍一区二区国模曼安| 一级女性全黄久久生活片免费| 亚洲欧洲精品一区| 国产精品影院在线| 久久综合狠狠综合久久激情 | 美女视频免费精品| 日韩一区二区在线看片| 校园春色 亚洲色图| 在线中文字幕播放| 欧美日韩一区二区免费在线观看| 人妻少妇精品久久| segui88久久综合| 亚洲夂夂婷婷色拍ww47| 国产性生活免费视频| 久草免费在线观看| 国产精品成人在线观看| 亚洲国产精品日韩| 超碰免费97在线观看| 国产亚洲精品7777| 日韩电影大全在线观看| 高h视频在线| 国产精品网曝门| 一区二区三区免费看| 丝袜美腿美女被狂躁在线观看| 中文一区二区在线观看| 久久久国产精华液999999| sese在线视频| 国产精品初高中害羞小美女文| av不卡在线免费观看| 尤物视频在线看| 亚洲一区二区三区自拍| 亚洲熟妇av日韩熟妇在线 | 国产极品精品在线观看| 中文字幕人妻丝袜乱一区三区| 日韩国产欧美在线视频| 国产精品爽黄69| 国产又粗又猛又黄| 国产成人综合网| 国产综合精品一区二区三区| 亚洲av成人无码网天堂| 久久久精品免费网站| 伊人天天久久大香线蕉av色| 中国av在线播放| 午夜精品视频在线观看| 国产精品视频一区二区三区四区五区| 欧美成人黑人| 欧美精品在线视频| 欧洲熟妇的性久久久久久| 人妖一区二区三区| 最新中文字幕亚洲| 国产精品16p| 久久综合九色综合欧美狠狠| 国产日韩精品视频| 人成网站在线观看| 中文字幕国产一区| 欧美人成在线观看| www.国产精品| 欧美精品一区二区在线观看| 久久国产柳州莫菁门| 欧美 日韩 国产 一区| 欧美在线视频一区二区| 国产男男gay网站| av在线不卡网| 欧美日韩在线免费观看视频| 黄色激情在线播放| 欧美一区二区视频观看视频| 野外性满足hd| 欧美激情在线| 国产精品亚洲аv天堂网| 人妻va精品va欧美va| 亚洲欧洲日产国产综合网| 波多野结衣之无限发射| 国产精品久久久久久久久久辛辛 | 91亚洲精品视频| 水莓100在线视频| 亚洲人成小说网站色在线| 欧美 日韩 国产一区| 精品视频一区二区三区在线观看| 亚洲欧美一区二区三区久久| 久久免费小视频| 久久超碰97中文字幕| 欧美日韩一区在线播放| 国产美女福利在线观看| 欧美日韩国产片| 日韩精品电影一区二区| 最新亚洲一区| 成人自拍爱视频| 免费a级人成a大片在线观看| 欧洲国内综合视频| 欧美图片一区二区| 亚洲精选久久| 国产精品美女久久久久av福利| 日本三级在线视频| 欧美午夜精品久久久久久超碰| 国产精品无码永久免费不卡| 狠狠色丁香久久综合频道| 成人激情视频免费在线| 69视频在线| 欧美体内she精视频| 老司机福利av| 午夜一级久久| 欧美国产一二三区| 中文不卡1区2区3区| 日韩久久精品电影| 精品91久久久| 99re成人在线| 日韩欧美国产免费| 天堂在线精品| 庆余年2免费日韩剧观看大牛| 欧洲成人一区二区三区| 午夜视频在线观看一区| 喷水视频在线观看| 亚洲影视在线| 欧美三级电影在线播放| 日本另类视频| 色噜噜狠狠狠综合曰曰曰| 伊人久久国产精品| 亚洲视频免费看| 性久久久久久久久久久久久久| 国产精品7m凸凹视频分类| 91在线观看免费高清| 日本三级在线观看网站| 欧美精品一区二区三区久久久| 五月天婷婷丁香| 91色九色蝌蚪| 欧美日韩亚洲自拍| 91精品一区国产高清在线gif| 亚洲一区精品电影| www在线看| 亚洲精品天天看| 最近中文字幕在线视频| 中文字幕综合网| 亚洲美女在线播放| 欧美亚洲网站| 在线不卡日本| 试看120秒一区二区三区| 久久久久亚洲精品国产| 黄色片视频在线观看| 欧洲精品一区二区三区在线观看| 国产性生活大片| www.亚洲色图.com| 激情内射人妻1区2区3区| 国产精品久久久久久久久久10秀 | 黄色aaa级片| 欧美一区在线看| 久久av二区| 中文字幕在线视频网站| 午夜一区二区三区视频| 国产精品九九九九九| 蜜臀av一区二区在线免费观看| 视频免费一区二区| 亚洲第一页在线| 亚洲成熟少妇视频在线观看| 国产精品毛片久久久久久| 国产裸体视频网站| 噜噜噜在线观看免费视频日韩| 一区二区三区欧美在线| 国产精品久av福利在线观看| 日韩美女视频中文字幕| av免费看在线| 亚洲图片欧洲图片av| 国产女人18毛片水18精| 欧美网站在线观看| 五月天av网站| 久久久久高清精品| 中文字幕在线观看视频www| 老鸭窝毛片一区二区三区| 亚洲精品偷拍视频| 一区二区美女| 99久久久久国产精品免费| 日日夜夜天天综合| 久久久久久中文字幕| 69av在线| 亚洲欧美中文日韩在线v日本| 国产高清免费观看| 欧美亚洲动漫精品| 国产女同在线观看| 亚洲美女在线一区| 久久精品三级视频| 91原创在线视频| 国产男女无遮挡猛进猛出| 日本美女视频一区二区| 国产精品久久久久9999爆乳| 欧美丰满日韩| 日韩免费中文专区| 亚洲综合图色| 国产专区一区二区三区| 1204国产成人精品视频| 91久久在线播放| 久久天天久久| 国产精品精品久久久| 亚洲国产福利| 136fldh精品导航福利| 激情av在线| 欧美大码xxxx| 草莓福利社区在线| 久久夜色撩人精品| 欧美18hd| 久久视频免费在线播放| 亚洲成人三级| 这里只有精品丝袜| h视频在线免费| 亚洲性视频网站| 精品欧美不卡一区二区在线观看| 日韩av中文字幕在线免费观看| 蜜臀久久精品久久久久| 精品国产欧美一区二区| 黄色a在线观看| 精品99久久久久久| 蜜臀av中文字幕| 亚洲精品乱码久久久久久按摩观| 亚洲第一视频在线| 亚洲高清色综合| 天天舔天天干天天操| 亚洲成色777777女色窝| 囯产精品一品二区三区| 亚洲成人教育av| 日本高清视频网站| 日韩h在线观看| 国产午夜精品一区理论片| 亚洲午夜久久久久久久| 97视频在线观看网站| 俺去了亚洲欧美日韩| 调教一区二区| 韩国一区二区电影| 二区三区不卡| 国产精品自拍偷拍视频| 欧美视频免费看| 99国产在线视频| 国内精品偷拍| 午夜精品区一区二区三| 五月精品视频| 妞干网视频在线观看| 小嫩嫩精品导航| 午夜剧场高清版免费观看| 国产毛片精品视频| 在线免费播放av| 国产欧美一区二区精品性色| 四虎影院中文字幕| 亚洲成人免费看| 波多野结衣在线电影| 欧美一区二区精品在线| 免费观看国产精品| 亚洲品质视频自拍网| 成人免费看片| 欧美亚洲另类激情另类| 日本久久久久| 精品日韩欧美| 久久五月天小说| 日韩一级片免费视频| 米奇777在线欧美播放| 污污的视频免费| 99re视频精品| 日韩三级久久久| 亚洲成人资源网| 亚洲无码久久久久久久| 亚洲成人a级网| 黄色在线免费网站| 欧洲精品毛片网站| 亚洲国产aⅴ精品一区二区| 欧美午夜欧美| 在线 亚洲欧美在线综合一区| 亚洲一区在线不卡| 91香蕉视频黄| 青娱乐国产在线视频| 欧美性色综合网| 天天操天天干天天干| 久久久www成人免费精品张筱雨| 国产不卡人人| 亚洲一区二区三区成人在线视频精品 | 欧美另类99xxxxx| 成人性教育av免费网址| 国产精品18毛片一区二区| 色婷婷色综合| 国产1区2区在线| 北条麻妃一区二区三区| 欧美特黄一级片| 色网综合在线观看| 色综合久久久久久| 欧美高跟鞋交xxxxxhd| 久久爱.com| 日韩中文字幕一区| 欧美亚洲免费| 在线观看av中文字幕| 一区二区三区国产豹纹内裤在线| 亚洲天堂视频网| 一区二区成人精品| 怡红院成人在线| 欧美日韩国产精品一卡| 国产日韩欧美三级| 尤物网站在线观看| 亚洲一区二区三区四区中文字幕| 91麻豆国产视频| 色天天综合狠狠色| 日本一区二区三区中文字幕| 欧美日韩免费精品| 男人的天堂亚洲在线| 97香蕉碰碰人妻国产欧美| 亚洲第一主播视频| 成人免费视频国产| 久久久久久久香蕉网| 成人中文字幕视频| 久青草视频在线播放| 成人涩涩免费视频| 久久精品视频9| 精品国产成人在线影院| 电影k8一区二区三区久久 | 国产肥老妇视频| 久久国产精品久久精品| aa亚洲一区一区三区| 91手机视频在线| 国产成人自拍在线| 国产在线一区视频| 亚洲国产精品电影| 亚洲欧洲高清| 日韩免费一区二区三区| 久久精品理论片| 澳门黄色一级片| 精品国产免费人成电影在线观看四季| 国产白丝在线观看| 欧美裸体网站| 麻豆一区二区在线| xxxx日本少妇| 亚洲精品在线网站| 在线人成日本视频| 亚洲精品白虎| 国产一区二区三区日韩| 久久久久久久久久久久久久免费看 | 婷婷成人综合| 噼里啪啦国语在线观看免费版高清版| 欧美激情一区二区| 国产精品一级二级| 久久久久久有精品国产| 久久不见久久见国语| 视色视频在线观看| 一区二区三区在线视频免费 | 2018中文字幕第一页| 91在线精品一区二区| 在线观看黄色国产| 久久久久久久国产精品视频| 亚洲免费专区| 亚洲午夜激情影院| 午夜精品久久久久久久99水蜜桃 | 国产清纯美女被跳蛋高潮一区二区久久w| 日批视频免费观看| 久久777国产线看观看精品| 窝窝社区一区二区| 狠狠干狠狠操视频| 欧美日韩国产色| 四虎久久免费| 快播日韩欧美| 国产另类ts人妖一区二区| 久久国产黄色片| 欧美成年人视频| 欧美一级片在线免费观看| 亚洲精品伦理在线|