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

CMU15445 數(shù)據(jù)庫系統(tǒng)實驗一:Buffer Pool Manager

運維 數(shù)據(jù)庫運維
本篇是實驗一,管理文件系統(tǒng)的頁在內(nèi)存中的緩存 —— buffer pool manager。實驗的目標(biāo)系統(tǒng) BusTub 是一個面向磁盤的 DBMS,但磁盤上的數(shù)據(jù)不支持字節(jié)粒度的訪問。

[[382283]]

本文轉(zhuǎn)載自微信公眾號「分布式點滴」,作者穆尼奧。轉(zhuǎn)載本文請聯(lián)系分布式點滴公眾號。  

本篇是實驗一,管理文件系統(tǒng)的頁在內(nèi)存中的緩存 —— buffer pool manager。

概覽

實驗的目標(biāo)系統(tǒng) BusTub 是一個面向磁盤的 DBMS,但磁盤上的數(shù)據(jù)不支持字節(jié)粒度的訪問。這就需要一個管理頁的中間層,但 Andy Pavlo 教授堅持不使用 mmap 將頁管理權(quán)力讓渡給操作系統(tǒng),因此實驗一 的目標(biāo)便在于主動管理磁盤中的頁(page)在內(nèi)存中的緩存,從而,最小化磁盤訪問次數(shù)(時間上)、最大化相關(guān)數(shù)據(jù)連續(xù)(空間上)。

該實驗可以分解為相對獨立的兩個子任務(wù):

  • 維護替換策略的:LRU replacement policy
  • 管理緩沖池的:buffer pool manager

兩個組件都要求線程安全。

本文首先從基本概念、核心數(shù)據(jù)流總體分析下實驗內(nèi)容,然后分別對兩個子任務(wù)進行梳理。

作者:青藤木鳥 https://www.qtmuniao.com/2021/02/10/cmu15445-project1-buffer-pool/, 轉(zhuǎn)載請注明出處

實驗分析

剛開始寫實驗代碼的時候,感覺細節(jié)很多,實現(xiàn)時很容易丟三落四。但隨著實現(xiàn)和思考的深入,漸漸摸清了全貌,發(fā)現(xiàn)只要明確幾個基本概念和核心數(shù)據(jù)流,便能夠提綱挈領(lǐng)。

基本概念

buffer pool 的操作的基本單位為一段邏輯連續(xù)的字節(jié)數(shù)組,在磁盤上表現(xiàn)為頁(page),有唯一的標(biāo)識 page_id;在內(nèi)存中表現(xiàn)為幀(frame),有唯一的標(biāo)識 frame_id。為了記下哪些 frame 存的哪些 page,需要使用一個頁表(page table)。

下邊行文可能會混用 page 和 frame,因為這兩個概念都是 buffer pool 管理數(shù)據(jù)的基本單位,一般為 4k,其區(qū)別如下:

page id 是這一段單位數(shù)據(jù)的全局標(biāo)識,而 frame id 只是在內(nèi)存池(frame 數(shù)組)中索引某個 page 下標(biāo)

page 在文件系統(tǒng)中是一段邏輯連續(xù)的字節(jié)數(shù)組;在內(nèi)存中,我們會給其附加一些元信息:pin_count_,is_dirty_


 

 

基本概念

而管理幀的內(nèi)存池大小一般來說是遠小于磁盤的,因此在內(nèi)存池滿了后,再從磁盤加載新的頁到內(nèi)存池,需要 某種替換策略(replacer)將一些不再使用的頁踢出內(nèi)存池以騰出空間。

核心數(shù)據(jù)流

先說結(jié)論,buffer pool manager 的實現(xiàn)核心,在于對內(nèi)存池中所有 frame 的狀態(tài)的管理。因此,如果我們能梳理出 frame 的狀態(tài)機,便可以把握好核心數(shù)據(jù)流。

buffer pool 維護了一個 frame 數(shù)組,每個 frame 有三種狀態(tài):

  1. free:初始狀態(tài),沒有存放任何 page
  2. pinned:存放了 thread 正在使用的 page
  3. unpinned:存放了 page,但 page 已經(jīng)不再為任何 thread 所使用

而待實現(xiàn)函數(shù):

  1. FetchPageImpl(page_id) 
  2. NewPageImpl(page_id) 
  3. UnpinPageImpl(page_id, is_dirty) 
  4. DeletePageImpl(page_id) 

便是驅(qū)動狀態(tài)機中上述狀態(tài)發(fā)生改變的動作(action),狀態(tài)機如下:


 

 

frame 狀態(tài)機

對應(yīng)到實現(xiàn)時數(shù)據(jù)結(jié)構(gòu)上:

  1. 保存 page 數(shù)據(jù)的 frame 數(shù)組為 pages_
  2. 所有 free frame 的索引(frame_id)保存在 free_list_ 中
  3. 所有 unpinned frame 的索引保存在 replacer_ 中
  4. 所有 pinned frame 索引和 unpinned frame 的索引保存在 page_table_ 中,并通過 page 中 pin_count_ 字段來區(qū)分兩個狀態(tài)。

上圖中,NewPage1 和 NewPage2 表示在 NewPage 函數(shù)中,每次獲取空閑 frame 時,會先去空閑列表(freelist_)中取一個 free frame,如果取不到,才會去 replacer_ 中驅(qū)逐一個 unpinned 的 frame 后使用。這體現(xiàn)了 buffer pool manager 實現(xiàn)的一個目標(biāo):最小化磁盤訪問,原因后面分析。

實驗組件

把握了本實驗的基本概念和核心數(shù)據(jù)流后,再來分析兩個子任務(wù)。

TASK #1 - LRU REPLACEMENT POLICY

以前在 LeetCode 上寫過相關(guān)實現(xiàn),因此很自然的帶入之前經(jīng)驗,但隨后發(fā)現(xiàn)這兩個接口有一些不同。

LeetCode 上提供的是 kv store 接口,在 get/set 的時候完成新老順序的維護,并在內(nèi)存池滿后自動替換最老的 KV。

但本實驗提供的是 replacer 接口,維護一個 unpinned 的 frame_id 列表 ,在調(diào)用 Unpin 時將 frame_id 加入列表并維護新老順序、在調(diào)用 Pin 時將 frame_id 從列表中摘除、在調(diào)用Victim 的時候?qū)⒆罾系?frame_id 返回。

當(dāng)然,本質(zhì)上還是一樣,因此本實驗我也是采用 unordered_map 和 doubly linked list 的數(shù)據(jù)結(jié)構(gòu),實現(xiàn)細節(jié)不再贅述。需要注意的是,如果 Unpin 時發(fā)現(xiàn) frame_id 已經(jīng)在 replacer 中,則直接返回,并不改變列表的新老順序。因為邏輯上來說,同一個 frame_id,并不能被 Unpin多次,因此我們只需要考慮 frame_id 第一次 Unpin。

放到更大的語境中,本質(zhì)上,replacer 就是一個維護了回收順序的回收站,即我們將所有 pin_count_ = 0 的 page 不直接從內(nèi)存中刪除,而是放入回收站中。根據(jù)數(shù)據(jù)訪問的時間局部性原理,剛剛被訪問的 page 很可能再次被訪問,因此當(dāng)我們不得不從回收站中真刪(Victim)一個 frame 時,需要刪最老的 frame。當(dāng)之后我們想訪問一個剛加入回收站的數(shù)據(jù)時, 只需要將 page 從這個回收站中撈出來,從而省去一次磁盤訪問,這也就達到了最小化磁盤訪問的目標(biāo)。

TASK #2 - BUFFER POOL MANAGER

在實驗分析部分已經(jīng)把核心邏輯說的差不多了,這里簡單羅列一下我實現(xiàn)中遇到的問題。

page_table_ 的范圍。在最初實現(xiàn)時,畫出 frame 的狀態(tài)機之后,感覺 page_table_ 中只放 pinned frame id 很完美:可以使 frame id 按狀態(tài)互斥的分布在 free_list_ 、 replacer_ 和 page_table_ 中。但后來發(fā)現(xiàn),如果不將 unpinned frame id 保存在 page_table_ 中,就不能很好地復(fù)用 pin_count_ = 0 的 page 了,replacer 也就沒有了意義。

dirty page 的刷盤時機。有兩種策略,一種是每次 Unpin 的時候都刷,這樣會刷比較頻繁,但能保證異常掉電重啟后內(nèi)容不丟;一種是在 replacer victimized 的時候 lazily 的刷,這樣能保證刷的次數(shù)最少。這是性能和可靠性取舍,僅考慮本實驗,兩者肯定都能過。

NewPage 不要讀盤。這個就是我寫的 bug 了,畢竟 NewPage 的時候,磁盤上根本沒有對應(yīng) page 的內(nèi)容,因此會報如下錯誤:

  1. 2021-02-18 16:53:47 [autograder/bustub/src/storage/disk/disk_manager.cpp:121:ReadPage] DEBUG - Read less than a page 
  2. 2021-02-18 16:53:47 [autograder/bustub/src/storage/disk/disk_manager.cpp:108:ReadPage] DEBUG - I/O error reading past end of file 

復(fù)用 frame 時清空元信息。在復(fù)用一個從 replacer 中驅(qū)逐的 frame 時尤其要注意,使用前一定要將 pin_count_\is_dirty_ 這些字段清空。當(dāng)然,在 DeletePage 的時候,也需要注意將 page_id_ 置為 INVALID_PAGE_ID 、清空上述字段。否則,再次使用時, 如果 pin_count_ 在 Unpin 后,數(shù)值不為 0,會導(dǎo)致 DeletePage 時刪不掉該 page。

鎖的粒度。最粗暴的就是每個函數(shù)范圍粒度加鎖即可,后期如果需要優(yōu)化,再將鎖的粒度變細。

實驗代碼

以 FetchPageImpl 為例強調(diào)下一些實現(xiàn)的細節(jié),注意到,實驗已經(jīng)通過注釋給出了實現(xiàn)框架。

我使用中文注釋注出了一些我認(rèn)為需要注意的點。

  1. Page *BufferPoolManager::FetchPageImpl(page_id_t page_id) { 
  2.   // a. 使用自動獲取和釋放鎖 
  3.   std::scoped_lock<std::mutex> lock(latch_); 
  4.    
  5.   // 1.     Search the page table for the requested page (P). 
  6.   // 1.1    If P exists, pin it and return it immediately. 
  7.   auto target = page_table_.find(page_id); // b. 判斷存在與訪問數(shù)據(jù)只用一次查找 
  8.   if (target != page_table_.end()) { 
  9.     frame_id_t frame_id = target->second
  10.     // c. 通過指針運算獲取 frame_id 處存放的 Page 結(jié)構(gòu)體 
  11.     Page *p = pages_ + frame_id;  
  12.     p->pin_count_++; 
  13.     replacer_->Pin(frame_id); // d. 將對應(yīng) page 從“回收站”中撈出 
  14.     return p; 
  15.   } 
  16.  
  17.   // 1.2    If P does not exist, find a replacement page (R) from either the free list or the replacer. 
  18.   //        Note that pages are always found from the free list first
  19.   frame_id_t frame_id = -1;  
  20.   Page *p = nullptr; 
  21.   if (!free_list_.empty()) { 
  22.     frame_id = free_list_.back(); // e. 在結(jié)尾處操作效率高一點 
  23.     free_list_.pop_back(); 
  24.     assert(frame_id >= 0 && frame_id < static_cast<int>(pool_size_)); 
  25.     p = pages_ + frame_id; 
  26.      
  27.     // f. 從 freelist 中獲取的 dirty page 已經(jīng)在 delete 時寫回了 
  28.   } else { 
  29.     bool victimized = replacer_->Victim(&frame_id); 
  30.     if (!victimized) { 
  31.       return nullptr; 
  32.     } 
  33.     assert(frame_id >= 0 && frame_id < static_cast<int>(pool_size_)); 
  34.     p = pages_ + frame_id; 
  35.  
  36.     // 2.     If R is dirty, write it back to the disk. 
  37.     if (p->IsDirty()) { 
  38.       disk_manager_->WritePage(p->GetPageId(), p->GetData()); 
  39.       p->is_dirty_ = false
  40.     } 
  41.     p->pin_count_ = 0; // g. 將元信息 pin_count_ 清空 
  42.   } 
  43.  
  44.   // 3.     Delete R from the page table and insert P. 
  45.   page_table_.erase(p->GetPageId()); // h. 時刻注意區(qū)分 p->GetPageId() 與 page_id 是否相等,別混用 
  46.   page_table_[page_id] = frame_id; 
  47.  
  48.   // 4.     Update P's metadata, read in the page content from disk, and then return a pointer to P. 
  49.   p->page_id_ = page_id; 
  50.   p->ResetMemory(); 
  51.   disk_manager_->ReadPage(page_id, p->GetData()); 
  52.   p->pin_count_++; 
  53.   return p; 

實驗相關(guān) autograder 可以在 FAQ 中找到注冊地址和邀請碼,提交代碼的時候最好不要提交 github 倉庫地址,會有很多格式問題。可以每次按照實驗頁面的指示,將相關(guān)文件按目錄結(jié)構(gòu)達成 zip 包提交即可。

 

提交事項

仔細閱讀實驗描述,提交前需要注意的事項:

  1. 在 build 目錄運行 make format ,自動格式化。
  2. 在 build 目錄運行 make check-lint,檢查一些語法問題。
  3. 自己針對每個函數(shù)在本地設(shè)計一些測試,寫到相關(guān)文件(本實驗 buffer_pool_manager_test.cpp )中,并且打開測試開關(guān),在 build 文件夾下,編譯 make buffer_pool_manager_test,運行 ./test/buffer_pool_manager_test

貼一個 project1 autograder 的實驗結(jié)果:

 

autograder 結(jié)果

小結(jié)

這是 cmu15445 第一個實驗,實現(xiàn)了在磁盤和內(nèi)存間按需搬運頁(page)的 buffer pool manager。本實驗的關(guān)鍵之處在于把握基本概念,梳理出核心數(shù)據(jù)流,在此基礎(chǔ)上注意一些實現(xiàn)的細節(jié)即可。

責(zé)任編輯:武曉燕 來源: 分布式點滴
相關(guān)推薦

2022-10-12 08:52:00

內(nèi)存緩沖管理

2022-10-09 08:53:06

存儲容量SSD

2025-08-11 02:00:00

2022-10-08 00:00:00

SQLDDL數(shù)據(jù)

2025-08-04 06:00:00

2022-10-17 08:49:47

2022-10-30 10:03:20

B+數(shù)據(jù)庫數(shù)據(jù)

2025-08-12 07:31:11

2022-09-30 11:08:44

MySQLPostgreSQLOracle

2025-08-11 02:25:00

數(shù)據(jù)庫數(shù)據(jù)模型

2025-08-08 07:37:07

2025-08-06 00:00:00

2025-08-11 07:31:40

2011-04-13 15:25:12

數(shù)據(jù)庫系統(tǒng)設(shè)計

2011-04-13 15:07:30

數(shù)據(jù)庫系統(tǒng)設(shè)計

2025-08-18 07:32:23

2025-08-21 06:39:13

2022-04-05 13:46:21

日志數(shù)據(jù)庫系統(tǒng)

2025-08-06 01:22:00

2025-08-04 07:31:30

點贊
收藏

51CTO技術(shù)棧公眾號

精品一区二区三区视频在线观看 | 91香蕉亚洲精品| 中国毛片直接看| gogo久久日韩裸体艺术| 一本大道久久a久久综合| 欧美 日韩 国产 在线观看| 国精产品一品二品国精品69xx| 亚洲自啪免费| 美女国内精品自产拍在线播放| 极品粉嫩小仙女高潮喷水久久| 青娱乐极品盛宴一区二区| 亚洲高清视频中文字幕| 亚洲一区二区三区加勒比| 深爱激情五月婷婷| 国产在线精品一区二区不卡了| 欧美在线中文字幕| 久久国产在线观看| 久久人人88| 亚洲精品日韩欧美| 久草免费资源站| 高清一区二区三区av| 欧美色视频日本版| 久久久久久久9| eeuss影院在线观看| 91免费版在线| 国产精品久久久久久久久久久久午夜片| 中文字幕在线2019| 六月天综合网| 2023亚洲男人天堂| 国产污视频在线看| 欧美激情麻豆| 日韩在线观看免费全| 少妇无套高潮一二三区| 牛牛影视久久网| 亚洲第一福利网站| 激情小说欧美色图| 秋霞一区二区三区| 欧美一区二区三区四区在线观看| 日本中文字幕精品—区二区| 久久r热视频| 欧美香蕉大胸在线视频观看| 亚洲精品蜜桃久久久久久| 91精选在线| 亚洲精品免费电影| 三级在线免费观看| 天堂成人av| 一区二区三区中文免费| 国产91porn| 性欧美高清come| 亚洲精品国产视频| www.欧美黄色| 爱情岛亚洲播放路线| 亚洲3atv精品一区二区三区| 欧美一级视频在线播放| xxxx另类黑人| 天天av天天翘天天综合网色鬼国产 | 亚洲精品久久7777| 伊人再见免费在线观看高清版| sm国产在线调教视频| 亚洲综合久久av| 阿v天堂2018| 欧美男男tv网站在线播放| 欧美性生交xxxxx久久久| 久久久久狠狠高潮亚洲精品| 日韩制服一区| 91精品国产入口| 91精品国产高清91久久久久久 | 狠狠色丁香久久婷婷综合_中| 成人激情视频免费在线| 国产高清不卡视频| 成a人片国产精品| 欧美日韩一区二区视频在线观看| 国产亚洲依依| 亚洲免费在线视频| 国产精品久久中文字幕| 激情亚洲影院在线观看| 欧美日韩免费观看一区三区| av在线天堂网| 蜜桃一区二区三区| 北条麻妃久久精品| 久久久久久久久久久久久久免费看 | 中文字幕日韩免费视频| 国产精品白丝喷水在线观看| 亚洲国产精品第一区二区| 日本午夜在线亚洲.国产| 亚洲天堂网视频| 国产成人av一区二区三区在线| 国产午夜精品在线| 成人网视频在线观看| 一区二区三区毛片| 老头吃奶性行交视频| 久久丁香四色| 亚洲欧美一区二区三区四区 | 仙踪林久久久久久久999| 欧美激情精品久久久久久黑人| 麻豆成人免费视频| 国产精品77777| 欧美日韩喷水| 亚洲图区一区| 在线精品视频免费播放| av在线免费观看不卡| 一区二区导航| 色综合久久88色综合天天看泰| 手机在线看片1024| 国产不卡一区视频| 亚洲一卡二卡| 亚洲天堂电影| 日韩精品一区国产麻豆| 手机看片国产日韩| 亚洲女同同性videoxma| 亚洲一区二区三区久久| 高清在线观看av| 精品二区三区线观看| 丰满人妻一区二区三区53视频| 国产欧美一区| 777午夜精品福利在线观看| 国产人妖在线播放| 国产精品美女久久久久aⅴ| 你懂的av在线| 国产精品115| 久久99久久亚洲国产| 国产精品一级视频| 国产精品美女久久久久高潮| 国产精品无码一本二本三本色| 国产成人一二| 欧美国产日韩一区二区| 国产免费不卡av| 国产精品欧美经典| 中文久久久久久| 免费看av成人| 欧美又大又硬又粗bbbbb| 亚洲精品久久久蜜桃动漫 | 成人激情动漫在线观看| 女人床在线观看| 国产精品久一| 久久亚洲精品一区二区| 97精品人妻一区二区三区香蕉| 国产农村妇女精品| 亚洲免费看av| 日韩三级在线| 成人福利视频在线观看| 香蕉视频在线播放| 欧美另类videos死尸| 男人天堂资源网| 国内精品不卡在线| av 日韩 人妻 黑人 综合 无码| gogo大尺度成人免费视频| www.亚洲天堂| 国产激情无套内精对白视频| 一区二区三区四区在线免费观看| 香蕉视频xxxx| 尤物在线精品| 欧美精品一区二区三区久久| 日韩福利一区| 日日骚av一区| 国产草草影院ccyycom| 一区二区国产视频| 国产草草浮力影院| 久久av在线| 亚洲国产一区二区精品视频| 日本亚洲欧洲无免费码在线| 久久不射电影网| 手机看片1024日韩| 色婷婷av一区二区三区软件| 91香蕉国产视频| 高清shemale亚洲人妖| 一区二区传媒有限公司| 国产精品片aa在线观看| 成人免费自拍视频| 女同视频在线观看| 亚洲色图欧美制服丝袜另类第一页| 国产一级片一区二区| 亚洲视频免费在线观看| 亚洲无人区码一码二码三码| 久久久人人人| 天天做天天爱天天高潮| 男人的天堂久久| 国产精品久久一区主播| 黑人玩欧美人三根一起进| 亚洲天堂av综合网| 国产jzjzjz丝袜老师水多| 调教+趴+乳夹+国产+精品| 成人在线手机视频| 国产**成人网毛片九色 | 91成人小视频| 91精品国产色综合| 午夜在线视频| 日韩av在线直播| 亚洲无码精品国产| 亚洲v日本v欧美v久久精品| 欧美熟妇激情一区二区三区| 国产精品一区二区无线| 女性隐私黄www网站视频| 亚洲有吗中文字幕| 欧美日韩一区二区视频在线| 久久免费精品| 国产精品久久视频| 国产在线精彩视频| 欧美床上激情在线观看| av女优在线| 亚洲精品97久久| www.成人精品| 精品视频1区2区| 中文字字幕在线中文| 亚洲精品成人在线| 人妻互换一区二区激情偷拍| 久久男人中文字幕资源站| 国产ts在线观看| 另类综合日韩欧美亚洲| 日本成年人网址| 黄色精品免费| 国产欧美综合一区| 日韩电影在线视频| 欧美一区1区三区3区公司 | www.亚洲一区| 成年人在线看| 一本色道久久综合亚洲精品小说 | 国产午夜精品久久| 欧美夫妇交换xxx| 国产一区二区美女诱惑| 免费一区二区三区在线观看 | 91精品国产三级| 美女在线观看视频一区二区| 久章草在线视频| 国产一区二区精品| 精品无码国模私拍视频| 欧美日韩一区二区高清| 少妇久久久久久被弄到高潮| 国产精品久久久乱弄| 亚洲成人自拍| 成人影院天天5g天天爽无毒影院| 欧美污视频久久久| 免费一区二区三区视频导航| 欧美日韩国产免费一区二区三区 | 亚洲人成五月天| 天堂在线中文字幕| 亚洲欧美国产精品专区久久 | 久久嫩草精品久久久精品| 大黑人交xxx极品hd| 97se亚洲国产综合自在线 | 国产精品福利电影一区二区三区四区| 色哟哟精品观看| 国产日韩欧美a| 亚洲精品色午夜无码专区日韩| 久久亚洲一区二区三区四区| 亚洲天堂视频一区| 国产亚洲va综合人人澡精品| 亚洲一区视频在线播放| 中文字幕久久午夜不卡| 韩国一级黄色录像| 亚洲美女在线一区| 性欧美videos| 亚洲亚洲人成综合网络| 日本三级网站在线观看| 欧美日韩亚洲一区二| 91.com在线| 欧美黄色一区| 波多野结衣av一区二区全免费观看 | 日韩三级一区二区三区| 天天综合网 天天综合色| 久久亚洲天堂网| 91久久精品日日躁夜夜躁欧美| 这里只有精品6| 日韩欧美国产一区二区三区| 色噜噜在线播放| 亚洲美女动态图120秒| av片在线免费观看| 欧美日韩成人黄色| 刘亦菲一区二区三区免费看| 国产精品久久一区| 精品视频一区二区三区| 精品乱码一区| 色天天综合网| 99在线免费视频观看| 久久久一二三| 韩国一区二区三区四区| 99re视频精品| 小泽玛利亚一区| 精品久久久视频| 亚洲永久精品视频| 精品国产伦一区二区三区观看体验 | 精品国产不卡一区二区| 久久精品二区| 亚欧美无遮挡hd高清在线视频| 免费看黄在线看| 美女免费视频一区| 一起草在线视频| 国产精品不卡在线| 日韩在线视频免费播放| 欧美精品乱人伦久久久久久| 亚洲三级黄色片| 久久亚洲精品成人| 少妇精品视频一区二区免费看| 亚洲va男人天堂| 国产精品自拍区| 精品国产av无码一区二区三区| 日韩成人一区二区| 在线观看国产三级| 亚洲欧美日本韩国| 亚洲永久精品一区| 日韩av网站大全| 国产成人无吗| 国产精品日韩av| 啪啪国产精品| 天堂8在线天堂资源bt| 精品一区二区在线视频| 无码h肉动漫在线观看| 亚洲一区二区免费视频| 91亚洲精品国偷拍自产在线观看| 国产偷国产偷亚洲清高网站| 暧暧视频在线免费观看| 亚洲a级在线播放观看| 欧美一二区在线观看| 熟女性饥渴一区二区三区| 成人亚洲一区二区一| 内射一区二区三区| 欧美精品乱码久久久久久按摩| 加勒比一区二区三区在线| 国内精品久久久久伊人av| 精品国产乱码一区二区三区| 一区二区不卡在线观看| 日韩黄色免费电影| 熟女俱乐部一区二区| 精品电影在线观看| 婷婷丁香一区二区三区| 欧美精品激情视频| 欧美2区3区4区| 成人在线观看www| 国产乱码精品一区二区三区五月婷 | 国产三级国产精品国产专区50| 91免费精品国自产拍在线不卡| 日韩视频免费观看高清| 精品动漫一区二区三区在线观看| 综合久久2o19| 成人免费在线一区二区三区| 一区二区三区四区电影| 午夜免费视频网站| 亚洲精品视频观看| www.亚洲欧美| 久久久久久久97| 成人动漫视频| 少妇高潮毛片色欲ava片| av午夜一区麻豆| 日日夜夜综合网| 亚洲精选在线观看| 亚洲精品在线影院| 亚洲电影免费| 国精产品一区一区三区mba桃花 | 91精品电影| 青娱乐国产精品视频| 一区二区欧美精品| 手机看片国产1024| 日本午夜精品理论片a级appf发布| 国产欧美日韩影院| 午夜一区二区视频| 亚洲一区二区三区四区五区黄| 蜜桃视频久久一区免费观看入口| 久久欧美在线电影| 在线成人动漫av| 最新天堂中文在线| 亚洲美女偷拍久久| 色噜噜在线播放| 国产极品精品在线观看| 国产电影一区二区在线观看| 又黄又爽又色的视频| 欧美日韩激情小视频| 国产女主播在线直播| 成人久久精品视频| 亚洲精品护士| 亚洲第一视频区| 日韩欧美精品在线| 88xx成人免费观看视频库| 在线成人性视频| 99久精品国产| 亚洲特级黄色片| 国内精品在线一区| 日韩精品第一区| 久久精品aⅴ无码中文字字幕重口| 日韩欧美国产中文字幕| 蜜芽在线免费观看| 国产一区二区三区无遮挡| 日韩黄色免费电影| 国产真人真事毛片| 一区二区三区无码高清视频| 视频精品二区| 91淫黄看大片| 亚洲一区二区欧美| av小片在线| 精品国产一区二区三区麻豆小说 | 欧美精品国产一区| 日韩精品无码一区二区三区久久久| 91精品国产综合久久香蕉的特点| 涩涩av在线| 成人一区二区av| 欧美激情中文字幕一区二区| 丰满肉肉bbwwbbww| 国产精品偷伦免费视频观看的| 亚洲激情专区| 极品魔鬼身材女神啪啪精品| 亚洲天堂色网站|