日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux内核那些事之内存规整(memory compact)

發布時間:2023/12/8 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核那些事之内存规整(memory compact) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內存規整

內存規整是Mel Gormal開發防止內存碎片anti-fragmen pach補丁的第二個部分Avoiding fragmentation with page clustering v27 [LWN.net],主要用于解決當系統長時間運行之后,造成比較碎化內存時,通過內存規整將處于可以移動MOVE的類型內存,重新進行頁遷移 整合出較大連續物理內存:

內存規整機制原因比較簡單:

  • 利用類似快慢指針技巧,當需要對一個zone進行內存規整時,使用migrate_pfn和free_pfn兩個遍歷;
  • migrate_pfn 為從zone 頭部開始進行掃描,依次掃描出已經被分配出去但是可以進行頁遷移的頁面
  • free_pfn:為從zone 尾部開始掃描,依次掃描出空閑page。
  • 當每次掃描結束后,將migrate_pfn掃描出的可遷移頁面 依次遷移到free_pfn 空閑page中。
  • 當free_pfn和migrate_pfn 兩個遇見相等時說明內存規整完畢。
  • 這樣規整之后,zone前半部分可以需要遷移的頁面被遷移到zone后半部分空閑page中, 這樣前半部分會空閑出大塊連續物理內存,供下次申請內存使用

內存規整技術是頁遷移技術的一個比較重要的使用場景,幫助系統整理出連續物理內存。

觸發時機

內存規整觸發時機主要有以下三種:

  • 通過/proc/sys/vm/compact_memory 由用戶根據手動觸發,如果是NUMA系統則還可以通過/sys/devices/system/node/node<id>/compact 觸發
  • kcompatd線程類似與kswapd線程,內存水位不夠時,會觸發kcompactd線程進行異步內存規整。
  • 慢速申請內存通道,說明內存壓力過大,__alloc_pages_slowpath會通過__alloc_pages_direct_compact 進行同步內存規整。

相關數據結構

由于內存規整是以zone為單位進行掃描,因此不像kswapd由于pgdata中相關數據,內存規整主要涉及到struct? zone中數據用于記錄內存規整的進度:

struct zone {... ...#if defined CONFIG_COMPACTION || defined CONFIG_CMAunsigned long compact_cached_free_pfn; //用于記錄從尾部開始掃描的空閑page的位置unsigned long compact_cached_migrate_pfn[2];//該數組用于控制異步和同步兩種memory compact場景所從頭部開始掃描的頁遷移位置unsigned long compact_init_migrate_pfn; //內存規整頁遷移起始地址unsigned long compact_init_free_pfn; //內存規整的空閑free起始地址 #endif} ____cacheline_internodealigned_in_smp;

struct compact_control

struct compact_control結構類似與kswapd中的struct scan_control, 該結構主要用于內存規整時內部使用的數據結構,同時還可以控制內存規整起始位置,以及策略等。

struct compact_control {struct list_head freepages; /* List of free pages to migrate to */struct list_head migratepages; /* List of pages being migrated */unsigned int nr_freepages; /* Number of isolated free pages */unsigned int nr_migratepages; /* Number of pages to migrate */unsigned long free_pfn; /* isolate_freepages search base */unsigned long migrate_pfn; /* isolate_migratepages search base */unsigned long fast_start_pfn; /* a pfn to start linear scan from */struct zone *zone;unsigned long total_migrate_scanned;unsigned long total_free_scanned;unsigned short fast_search_fail;/* failures to use free list searches */short search_order; /* order to start a fast search at */const gfp_t gfp_mask; /* gfp mask of a direct compactor */int order; /* order a direct compactor needs */int migratetype; /* migratetype of direct compactor */const unsigned int alloc_flags; /* alloc flags of a direct compactor */const int highest_zoneidx; /* zone index of a direct compactor */enum migrate_mode mode; /* Async or sync migration mode */bool ignore_skip_hint; /* Scan blocks even if marked skip */bool no_set_skip_hint; /* Don't mark blocks for skipping */bool ignore_block_suitable; /* Scan blocks considered unsuitable */bool direct_compaction; /* False from kcompactd or /proc/... */bool whole_zone; /* Whole zone should/has been scanned */bool contended; /* Signal lock or sched contention */bool rescan; /* Rescanning the same pageblock */bool alloc_contig; /* alloc_contig_range allocation */ };

主要成員說明:

  • struct list_head freepages: 空閑頁鏈表,表明頁面要遷移到目的頁即空閑頁鏈表,處于該鏈表中的空閑頁,被isolate孤立出來,防止同時被buddy給其他進程使用。
  • struct list_head migratepages:所要遷移的頁面鏈表,用于記錄本次所需要遷移的頁面,處于該鏈表中的空閑頁,被isolate孤立出來,防止頁面被swap out到磁盤或者page cache被釋放等場景。
  • unsigned int nr_freepages: 記錄freepages中有多少個空閑頁 被isolate孤立出來。
  • unsigned int nr_migratepages: 記錄migratepages中有多少個頁面要進行遷移,并被isolate孤立出來
  • unsigned long free_pfn: 從尾部開始掃描的空閑起始頁幀號,即本次掃描zone,從尾部開始掃描尋找空閑頁的起始位置。
  • unsigned long migrate_pfn:本次掃描,從頭部往尾部開始掃描的 起始位置,從該位置開始尋找符合要求的頁進行遷移。
  • unsigned long fast_start_pfn:用于快速線性掃描的起始位置
  • struct zone *zone:所要掃描的zone
  • unsigned long total_migrate_scanned:已經掃描并做頁遷移的頁數目
  • unsigned long total_free_scanned:已經掃描用用作空閑頁 作為頁前面目的的數目
  • const gfp_t gfp_mask: gfp mask
  • short search_order: 掃描是開始的order 即一次性做頁遷移的數目
  • int order: 掃描時所需要的至少order 頁數目。
  • int migratetype:頁遷移類型
  • const int highest_zoneidx: 最高zone,掃描的zone范圍‘
  • enum migrate_mode mode: 是同步還是異步模式,即是通過kcompact線程進行內存規整,還是通過直接方式進行內存規整
  • bool direct_compaction: 如果為false,則是通過kscompact線程 或者??/proc手動觸發觸發
  • bool whole_zone:是否一次性掃描整個zone.

compact_zone()

compact_zone()函數是實施內存規整的核心函數,不管是哪種觸發方式最終都會通過compact_zone 規整指定的zone進行內存規整,

調用關系

按照compact_zone觸發關系調用關系圖如下:

上述四種觸發方式,最終都是靠compact_zone實現頁遷移功能

compact_zone源碼

static enum compact_result compact_zone(struct compact_control *cc, struct capture_control *capc) {enum compact_result ret;unsigned long start_pfn = cc->zone->zone_start_pfn;unsigned long end_pfn = zone_end_pfn(cc->zone);unsigned long last_migrated_pfn;const bool sync = cc->mode != MIGRATE_ASYNC;bool update_cached;/** These counters track activities during zone compaction. Initialize* them before compacting a new zone.*/cc->total_migrate_scanned = 0;cc->total_free_scanned = 0;cc->nr_migratepages = 0;cc->nr_freepages = 0;INIT_LIST_HEAD(&cc->freepages);INIT_LIST_HEAD(&cc->migratepages);cc->migratetype = gfp_migratetype(cc->gfp_mask);ret = compaction_suitable(cc->zone, cc->order, cc->alloc_flags,cc->highest_zoneidx);/* Compaction is likely to fail */if (ret == COMPACT_SUCCESS || ret == COMPACT_SKIPPED)return ret;/* huh, compaction_suitable is returning something unexpected */VM_BUG_ON(ret != COMPACT_CONTINUE);/** Clear pageblock skip if there were failures recently and compaction* is about to be retried after being deferred.*/if (compaction_restarting(cc->zone, cc->order))__reset_isolation_suitable(cc->zone);/** Setup to move all movable pages to the end of the zone. Used cached* information on where the scanners should start (unless we explicitly* want to compact the whole zone), but check that it is initialised* by ensuring the values are within zone boundaries.*/cc->fast_start_pfn = 0;if (cc->whole_zone) {cc->migrate_pfn = start_pfn;cc->free_pfn = pageblock_start_pfn(end_pfn - 1);} else {cc->migrate_pfn = cc->zone->compact_cached_migrate_pfn[sync];cc->free_pfn = cc->zone->compact_cached_free_pfn;if (cc->free_pfn < start_pfn || cc->free_pfn >= end_pfn) {cc->free_pfn = pageblock_start_pfn(end_pfn - 1);cc->zone->compact_cached_free_pfn = cc->free_pfn;}if (cc->migrate_pfn < start_pfn || cc->migrate_pfn >= end_pfn) {cc->migrate_pfn = start_pfn;cc->zone->compact_cached_migrate_pfn[0] = cc->migrate_pfn;cc->zone->compact_cached_migrate_pfn[1] = cc->migrate_pfn;}if (cc->migrate_pfn <= cc->zone->compact_init_migrate_pfn)cc->whole_zone = true;}last_migrated_pfn = 0;/** Migrate has separate cached PFNs for ASYNC and SYNC* migration on* the basis that some migrations will fail in ASYNC mode. However,* if the cached PFNs match and pageblocks are skipped due to having* no isolation candidates, then the sync state does not matter.* Until a pageblock with isolation candidates is found, keep the* cached PFNs in sync to avoid revisiting the same blocks.*/update_cached = !sync &&cc->zone->compact_cached_migrate_pfn[0] == cc->zone->compact_cached_migrate_pfn[1];trace_mm_compaction_begin(start_pfn, cc->migrate_pfn,cc->free_pfn, end_pfn, sync);migrate_prep_local();while ((ret = compact_finished(cc)) == COMPACT_CONTINUE) {int err;unsigned long start_pfn = cc->migrate_pfn;/** Avoid multiple rescans which can happen if a page cannot be* isolated (dirty/writeback in async mode) or if the migrated* pages are being allocated before the pageblock is cleared.* The first rescan will capture the entire pageblock for* migration. If it fails, it'll be marked skip and scanning* will proceed as normal.*/cc->rescan = false;if (pageblock_start_pfn(last_migrated_pfn) ==pageblock_start_pfn(start_pfn)) {cc->rescan = true;}switch (isolate_migratepages(cc)) {case ISOLATE_ABORT:ret = COMPACT_CONTENDED;putback_movable_pages(&cc->migratepages);cc->nr_migratepages = 0;goto out;case ISOLATE_NONE:if (update_cached) {cc->zone->compact_cached_migrate_pfn[1] =cc->zone->compact_cached_migrate_pfn[0];}/** We haven't isolated and migrated anything, but* there might still be unflushed migrations from* previous cc->order aligned block.*/goto check_drain;case ISOLATE_SUCCESS:update_cached = false;last_migrated_pfn = start_pfn;;}err = migrate_pages(&cc->migratepages, compaction_alloc,compaction_free, (unsigned long)cc, cc->mode,MR_COMPACTION);trace_mm_compaction_migratepages(cc->nr_migratepages, err,&cc->migratepages);/* All pages were either migrated or will be released */cc->nr_migratepages = 0;if (err) {putback_movable_pages(&cc->migratepages);/** migrate_pages() may return -ENOMEM when scanners meet* and we want compact_finished() to detect it*/if (err == -ENOMEM && !compact_scanners_met(cc)) {ret = COMPACT_CONTENDED;goto out;}/** We failed to migrate at least one page in the current* order-aligned block, so skip the rest of it.*/if (cc->direct_compaction &&(cc->mode == MIGRATE_ASYNC)) {cc->migrate_pfn = block_end_pfn(cc->migrate_pfn - 1, cc->order);/* Draining pcplists is useless in this case */last_migrated_pfn = 0;}}check_drain:/** Has the migration scanner moved away from the previous* cc->order aligned block where we migrated from? If yes,* flush the pages that were freed, so that they can merge and* compact_finished() can detect immediately if allocation* would succeed.*/if (cc->order > 0 && last_migrated_pfn) {unsigned long current_block_start =block_start_pfn(cc->migrate_pfn, cc->order);if (last_migrated_pfn < current_block_start) {lru_add_drain_cpu_zone(cc->zone);/* No more flushing until we migrate again */last_migrated_pfn = 0;}}/* Stop if a page has been captured */if (capc && capc->page) {ret = COMPACT_SUCCESS;break;}}out:/** Release free pages and update where the free scanner should restart,* so we don't leave any returned pages behind in the next attempt.*/if (cc->nr_freepages > 0) {unsigned long free_pfn = release_freepages(&cc->freepages);cc->nr_freepages = 0;VM_BUG_ON(free_pfn == 0);/* The cached pfn is always the first in a pageblock */free_pfn = pageblock_start_pfn(free_pfn);/** Only go back, not forward. The cached pfn might have been* already reset to zone end in compact_finished()*/if (free_pfn > cc->zone->compact_cached_free_pfn)cc->zone->compact_cached_free_pfn = free_pfn;}count_compact_events(COMPACTMIGRATE_SCANNED, cc->total_migrate_scanned);count_compact_events(COMPACTFREE_SCANNED, cc->total_free_scanned);trace_mm_compaction_end(start_pfn, cc->migrate_pfn,cc->free_pfn, end_pfn, sync, ret);return ret; }

compact_zone流程

該函數整理處理思路相對比較清晰:

  • ?按照指定的zone進行內存規整
  • 對compact_control結構中的一些值進行初始化
  • compaction_suitable:根據實際內存水位情況判斷是否有必要做內存規整,因為內存規整操作比較耗時,如果空閑內存處于較高情況,則沒有必要觸發內存規整,最終是通過__compaction_suitable實現對內存水位判斷
  • compact_finished: 用于處理當前zone是否掃描完畢,zone掃描時使用了處理上的技巧。內存規整時分別從zone頭部掃描migrate_pfn和從zone尾部掃描free_pfn, 當migrate_pfn與free_pfn相遇時,則認為掃描完畢。最終是調用__compact_finished函數
  • isolate_migratepages: 將掃描出的要遷移的頁進行孤立isolate,防止在遷移過程中,該頁面被釋放 或者swap out等,也是做頁遷移之前必須準備工作,可以詳見《linux那些事之頁遷移(page migratiom)》
  • migrate_pages:將孤立出來的頁面進行頁遷移。
  • 當zone掃描內存規整完畢之后,需要free_pfn 等信息保存到zone中 用于記錄本次掃描位置,空閑頁等信息,以便用于下一次內存規整時使用。
  • compact_result 為內存規整結果

??????????????關鍵幾個函數

__compaction_suitable

__compaction_suitable用于判斷當前zone是否可以做內存規整:

/** compaction_suitable: Is this suitable to run compaction on this zone now?* Returns* COMPACT_SKIPPED - If there are too few free pages for compaction* COMPACT_SUCCESS - If the allocation would succeed without compaction* COMPACT_CONTINUE - If compaction should run now*/ static enum compact_result __compaction_suitable(struct zone *zone, int order,unsigned int alloc_flags,int highest_zoneidx,unsigned long wmark_target) {unsigned long watermark;if (is_via_compact_memory(order))return COMPACT_CONTINUE;watermark = wmark_pages(zone, alloc_flags & ALLOC_WMARK_MASK);/** If watermarks for high-order allocation are already met, there* should be no need for compaction at all.*/if (zone_watermark_ok(zone, order, watermark, highest_zoneidx,alloc_flags))return COMPACT_SUCCESS;/** Watermarks for order-0 must be met for compaction to be able to* isolate free pages for migration targets. This means that the* watermark and alloc_flags have to match, or be more pessimistic than* the check in __isolate_free_page(). We don't use the direct* compactor's alloc_flags, as they are not relevant for freepage* isolation. We however do use the direct compactor's highest_zoneidx* to skip over zones where lowmem reserves would prevent allocation* even if compaction succeeds.* For costly orders, we require low watermark instead of min for* compaction to proceed to increase its chances.* ALLOC_CMA is used, as pages in CMA pageblocks are considered* suitable migration targets*/watermark = (order > PAGE_ALLOC_COSTLY_ORDER) ?low_wmark_pages(zone) : min_wmark_pages(zone);watermark += compact_gap(order);if (!__zone_watermark_ok(zone, 0, watermark, highest_zoneidx,ALLOC_CMA, wmark_target))return COMPACT_SKIPPED;return COMPACT_CONTINUE; }

主要有以下幾種情況:

  • is_via_compact_memory: 是否通過/proc/sys/vm/compact_memory 手動強制進行內存規整,如果強制內存規整,則直接返回COMPACT_CONTINUE,繼續后續步驟進行內存規整
  • zone_watermark_ok: 當作內存water mark滿足order,則沒有必要做內存規整,能夠申請oder 內存成功,返回COMPACT_SUCCESS
  • 當內存不滿足時,則查看是否可以通過內存壓縮滿足內存申請,如果能夠通過內存規整滿足,則返回COMPACT_SUCCESS進行內存規整,如果判斷出當前內存不能夠通過內存壓縮滿足分配要求,則說明內存碎片化不嚴重,沒有必要進行內存壓縮發跳過此次內存規整操作,返回?COMPACT_SKIPPED。

compact_result

compact_result為此次內存規整之后的結果:

/* Return values for compact_zone() and try_to_compact_pages() */ /* When adding new states, please adjust include/trace/events/compaction.h */ enum compact_result {/* For more detailed tracepoint output - internal to compaction */COMPACT_NOT_SUITABLE_ZONE,/** compaction didn't start as it was not possible or direct reclaim* was more suitable*/COMPACT_SKIPPED,/* compaction didn't start as it was deferred due to past failures */COMPACT_DEFERRED,/* compaction not active last round */COMPACT_INACTIVE = COMPACT_DEFERRED,/* For more detailed tracepoint output - internal to compaction */COMPACT_NO_SUITABLE_PAGE,/* compaction should continue to another pageblock */COMPACT_CONTINUE,/** The full zone was compacted scanned but wasn't successfull to compact* suitable pages.*/COMPACT_COMPLETE,/** direct compaction has scanned part of the zone but wasn't successfull* to compact suitable pages.*/COMPACT_PARTIAL_SKIPPED,/* compaction terminated prematurely due to lock contentions */COMPACT_CONTENDED,/** direct compaction terminated after concluding that the allocation* should now succeed*/COMPACT_SUCCESS, };
  • ?COMPACT_NOT_SUITABLE_ZONE:該zone不適合做內存規整
  • COMPACT_SKIPPED:內存規整要求不滿足,跳過該zone
  • COMPACT_DEFERRED:由于之前的一些錯誤導致內存規整退出
  • COMPACT_INACTIVE:上次內存規整未激活
  • COMPACT_NO_SUITABLE_PAGE:沒有合適的物理頁做內存規整
  • COMPACT_CONTINUE:下一個頁面塊pageblock繼續做內存規整
  • COMPACT_COMPLETE:zone都以及做內存規整掃描完畢,但是沒有合適頁面做內存規整
  • COMPACT_PARTIAL_SKIPPED:直接內存規整已經掃描了部分zone頁面,但是仍然沒有合適頁面做內存規整
  • COMPACT_CONTENDED:由于某些鎖競爭導致內存規整退出
  • COMPACT_SUCCESS:當前zone內存規整滿足頁面分配要求,可以退出

__compact_finished

__compact_finished用于判斷當前內存壓縮掃描是否完成:

static enum compact_result __compact_finished(struct compact_control *cc) {unsigned int order;const int migratetype = cc->migratetype;int ret;/* Compaction run completes if the migrate and free scanner meet */if (compact_scanners_met(cc)) {/* Let the next compaction start anew. */reset_cached_positions(cc->zone);/** Mark that the PG_migrate_skip information should be cleared* by kswapd when it goes to sleep. kcompactd does not set the* flag itself as the decision to be clear should be directly* based on an allocation request.*/if (cc->direct_compaction)cc->zone->compact_blockskip_flush = true;if (cc->whole_zone)return COMPACT_COMPLETE;elsereturn COMPACT_PARTIAL_SKIPPED;}if (is_via_compact_memory(cc->order))return COMPACT_CONTINUE;/** Always finish scanning a pageblock to reduce the possibility of* fallbacks in the future. This is particularly important when* migration source is unmovable/reclaimable but it's not worth* special casing.*/if (!IS_ALIGNED(cc->migrate_pfn, pageblock_nr_pages))return COMPACT_CONTINUE;/* Direct compactor: Is a suitable page free? */ret = COMPACT_NO_SUITABLE_PAGE;for (order = cc->order; order < MAX_ORDER; order++) {struct free_area *area = &cc->zone->free_area[order];bool can_steal;/* Job done if page is free of the right migratetype */if (!free_area_empty(area, migratetype))return COMPACT_SUCCESS;#ifdef CONFIG_CMA/* MIGRATE_MOVABLE can fallback on MIGRATE_CMA */if (migratetype == MIGRATE_MOVABLE &&!free_area_empty(area, MIGRATE_CMA))return COMPACT_SUCCESS; #endif/** Job done if allocation would steal freepages from* other migratetype buddy lists.*/if (find_suitable_fallback(area, order, migratetype,true, &can_steal) != -1) {/* movable pages are OK in any pageblock */if (migratetype == MIGRATE_MOVABLE)return COMPACT_SUCCESS;/** We are stealing for a non-movable allocation. Make* sure we finish compacting the current pageblock* first so it is as free as possible and we won't* have to steal another one soon. This only applies* to sync compaction, as async compaction operates* on pageblocks of the same migratetype.*/if (cc->mode == MIGRATE_ASYNC ||IS_ALIGNED(cc->migrate_pfn,pageblock_nr_pages)) {return COMPACT_SUCCESS;}ret = COMPACT_CONTINUE;break;}}if (cc->contended || fatal_signal_pending(current))ret = COMPACT_CONTENDED;return ret; }
  • compact_scanners_met: cc->free_pfn和cc->migrate_pfn是否相遇,如果說明已經掃描完畢,返回true
  • compact_scanners_met 返回true,如果cc->whole_zone為true說明需要掃描整個zone,并且已經掃描完畢了,返回COMPACT_COMPLETE。如果ccf->whole_zone為false,說明不需要掃描整個zone,但是此時已經掃描完整個zone,說明掃描完整個zone還沒有滿足后續內存分配要求,返回COMPACT_PARTIAL_SKIPPED。
  • compact_scanners_met 返回false, is_via_compact_memory()為ture說明是/proc/sys/vm/compact_memory手動觸發,需要繼續掃描zone下一個pageblock,返回COMPACT_CONTINUE。
  • 如果cc->migrate_pfn 不是pageblock對齊,則需要繼續掃描
  • 接下來一個比較長的循環出來,主要是需要判斷后續掃描是否還有空閑page 用來做遷移目的頁,如果有則可以繼續做遷移,如果沒有則返回COMPACT_NO_SUITABLE_PAGE

isolate_migratepages

isolate_migratepages函數處理比較長,整體處理思路就是繼續掃描,將掃描出合適的物理頁做遷移,并將需要做遷移的頁孤立出來,加入到cc->migratepages中:

static isolate_migrate_t isolate_migratepages(struct compact_control *cc) {unsigned long block_start_pfn;unsigned long block_end_pfn;unsigned long low_pfn;struct page *page;const isolate_mode_t isolate_mode =(sysctl_compact_unevictable_allowed ? ISOLATE_UNEVICTABLE : 0) |(cc->mode != MIGRATE_SYNC ? ISOLATE_ASYNC_MIGRATE : 0);bool fast_find_block;//通過快速通道找到所要遷移掃描的起始pfnlow_pfn = fast_find_migrateblock(cc);//計算出掃描結束page pfn,要求按照pageblock對齊block_start_pfn = pageblock_start_pfn(low_pfn);if (block_start_pfn < cc->zone->zone_start_pfn)block_start_pfn = cc->zone->zone_start_pfn;//快速找到的pfn是否成功fast_find_block = low_pfn != cc->migrate_pfn && !cc->fast_search_fail;/* Only scan within a pageblock boundary */block_end_pfn = pageblock_end_pfn(low_pfn);//對low_pfn起始的pageblock內物理頁面做掃描,將合適的做遷移的頁面孤立出來for (; block_end_pfn <= cc->free_pfn;fast_find_block = false,low_pfn = block_end_pfn,block_start_pfn = block_end_pfn,block_end_pfn += pageblock_nr_pages) {//如果長時間循環,需要進行放權,給其他進程得到調度機會if (!(low_pfn % (SWAP_CLUSTER_MAX * pageblock_nr_pages)))cond_resched();//檢查是否在同一個pageblock內page = pageblock_pfn_to_page(block_start_pfn,block_end_pfn, cc->zone);if (!page)continue;//如果最近孤立頁面失敗,則不進行再次嘗試,僅僅做檢查if (IS_ALIGNED(low_pfn, pageblock_nr_pages) &&!fast_find_block && !isolation_suitable(cc, page))continue;//如果是異步規整,則僅規整move頁面且非huge pageif (!suitable_migration_source(cc, page)) {update_cached_migrate(cc, block_end_pfn);continue;}/* Perform the isolation *///將[low_pfn,block_end_pfn)中的符合內存規整要求的頁面孤立出來,將孤立出來的頁面加入到cc->migratepages中low_pfn = isolate_migratepages_block(cc, low_pfn,block_end_pfn, isolate_mode);if (!low_pfn)return ISOLATE_ABORT;//孤立頁面成功或者失敗都不在繼續break;}//記錄下次重新掃描的做頁遷移的起始pfncc->migrate_pfn = low_pfn;return cc->nr_migratepages ? ISOLATE_SUCCESS : ISOLATE_NONE; }

migrate_pages

將上述合適做頁遷移的頁面,且已經孤立到cc->migratepages中頁面做頁遷移:

err = migrate_pages(&cc->migratepages, compaction_alloc,compaction_free, (unsigned long)cc, cc->mode,MR_COMPACTION)

關于頁遷移詳細信息可以參考《linux那些事之頁遷移(page migratiom)》

總結

以上是生活随笔為你收集整理的linux内核那些事之内存规整(memory compact)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久露脸国产精品 | 亚洲精品乱码久久久久v最新版 | 99视频精品免费观看, | 色之综合网 | www.久久久.cum| 人人爽人人看 | 国产成人精品在线播放 | 久草91视频 | 久久免费福利视频 | 一区二区三区播放 | 亚洲国产字幕 | 色婷婷丁香 | 在线视频免费观看 | 精品一区二区免费在线观看 | 九九九九九九精品 | 亚洲综合视频在线 | 在线免费观看麻豆视频 | 精品亚洲视频在线观看 | 国产精品久久久久一区二区三区共 | 91久久奴性调教 | 欧美-第1页-屁屁影院 | 丁香六月av | 久久久久福利视频 | 日本精品va在线观看 | av最新资源 | 人人爱爱人人 | 视频在线观看日韩 | 91香蕉视频720p | 黄色网址国产 | 国内小视频在线观看 | 99在线免费观看视频 | 久草久草在线 | 欧美日韩国产二区三区 | 国产不卡在线视频 | 福利视频午夜 | 国产a网站| 国产韩国日本高清视频 | 久久久久国产精品免费免费搜索 | 国产成人精品一区二区三区在线观看 | av免费线看 | 四虎影视8848dvd | 国产亚洲精品久久网站 | 亚洲丝袜一区 | 最新日韩精品 | 欧美aa在线 | 国产在线播放观看 | 91av福利视频 | 涩涩网站在线 | 永久免费精品视频网站 | 丁香一区二区 | 五月花丁香婷婷 | av高清免费在线 | 国产精品va在线 | 国产亚洲精品久久久久久电影 | 久久久久久久久久久电影 | 91精品少妇偷拍99 | 国产免费视频一区二区裸体 | 永久中文字幕 | 五月天天色 | 九九色在线观看 | 亚洲理论影院 | 日日爽日日操 | 国产一二三四在线视频 | 91网页版免费观看 | 韩日视频在线 | 国产亚洲欧美日韩高清 | 天天操天天摸天天爽 | 亚洲国产色一区 | 国产免费观看高清完整版 | 欧美俄罗斯性视频 | 久久在视频| 99久久这里只有精品 | 久久日韩精品 | 久久综合给合久久狠狠色 | 99久在线精品99re8热视频 | 久久三级毛片 | 久久久精品福利视频 | 天天天干天天天操 | 欧美热久久 | 超碰在线9 | 免费看片在线观看 | 97免费视频在线播放 | 国产视频一级 | 久久男人中文字幕资源站 | 免费精品视频在线观看 | 在线看日韩av | 在线观看91精品视频 | 久草视频在线播放 | 精品中文字幕在线播放 | 国内精品久久久久久久影视简单 | 久久天天操 | 久久精品久久久久久久 | 久久精品亚洲一区二区三区观看模式 | 国产裸体视频bbbbb | 中文免费| 国产高清一区二区 | 亚洲精品黄| 久久成人国产 | 日日夜操 | 最近字幕在线观看第一季 | 91理论电影 | 91麻豆精品国产91 | 免费在线播放av电影 | 精品久久网| 中文字幕日韩电影 | 东方av免费在线观看 | 国产一区在线看 | 久久精品aaa | 久久久久久毛片精品免费不卡 | 国产一级电影免费观看 | 中文字幕在线日 | 97视频在线 | 97精品免费视频 | 91久久国产综合精品女同国语 | 久久久久久毛片精品免费不卡 | www夜夜 | 成人免费观看网址 | 日韩在线高清免费视频 | 午夜美女网站 | 丁香婷婷色综合亚洲电影 | 久久字幕 | 日本中文在线观看 | 国际av在线 | 波多野结衣综合网 | 久久亚洲视频 | av成人亚洲| 久久免费黄色 | 91色一区二区三区 | 亚洲精品国产成人av在线 | 一级黄色片在线观看 | 国产一区二区三区四区在线 | 天天舔天天射天天操 | 蜜臀精品久久久久久蜜臀 | 亚洲精品黄 | 欧美在线视频一区二区三区 | 黄色亚洲大片免费在线观看 | 日日天天干 | 成人av电影免费观看 | 婷婷精品国产一区二区三区日韩 | 91最新在线| 国内精品久久久久久久影视麻豆 | 日本韩国中文字幕 | 国产99爱| 欧美另类交在线观看 | 亚洲第一久久久 | 国产老妇av | 日日夜色 | 99亚洲国产 | 国产亚洲精品成人 | 在线免费黄色 | 啪啪免费试看 | 在线观看av小说 | 久久久久成人精品 | 最新国产精品久久精品 | 色偷偷88888欧美精品久久久 | 中文字幕日韩国产 | 国产精品久久久一区二区 | 成人国产在线 | 国产精品欧美久久久久天天影视 | 国产午夜视频在线观看 | 亚洲在线看| 色多视频在线观看 | 欧美精品二区 | 久久99这里只有精品 | 亚洲综合一区二区精品导航 | 在线国产专区 | 日韩精品一区二区在线观看 | 手机av在线免费观看 | 黄网站www | 天天综合天天做天天综合 | 探花视频在线观看免费版 | 国产老妇av | 国产精品亚洲人在线观看 | 成人在线一区二区三区 | 激情久久婷婷 | 在线日韩av | 91在线文字幕 | 全久久久久久久久久久电影 | 五月婷婷一区二区三区 | 久久综合免费视频 | 在线看成人av| 黄色大片国产 | 亚洲黄色在线播放 | 成人福利在线 | 亚洲免费永久精品国产 | 欧美大片第1页 | 中文字幕 在线看 | 99热这里有 | 99精品视频在线观看免费 | 97国产在线播放 | 日日摸日日添夜夜爽97 | 蜜臀久久99精品久久久久久网站 | 亚洲一区二区视频 | 国产视频一 | 伊人永久在线 | 天天射网站 | 国产成人av在线 | 亚洲国产精品视频在线观看 | 国产精品一区二区av日韩在线 | 国产精品福利久久久 | 国内精品久久天天躁人人爽 | 久久精品超碰 | 国产精品久久久久久久久久久久久 | 国产伦精品一区二区三区四区视频 | 亚洲国产精品推荐 | 中文在线中文资源 | 夜夜夜夜爽| 亚洲精品高清视频在线观看 | www.夜夜爽| 91成人精品一区在线播放69 | 91自拍视频在线 | 成人免费视频在线观看 | 91久久精| 国产精品嫩草在线 | 日韩高清dvd | 久久综合九色综合97_ 久久久 | 中文字幕区| 国产97免费 | 国产99久久九九精品免费 | 黄色av电影在线 | 国产中文字幕视频在线 | 97精品伊人 | 精品久久久久久亚洲综合网 | 最新色站 | 激情五月激情综合网 | 亚洲伊人网在线观看 | 97中文字幕| 成人午夜电影在线播放 | 97人人添人澡人人爽超碰动图 | 黄色亚洲在线 | 91丨精品丨蝌蚪丨白丝jk | 午夜精品一区二区三区可下载 | 人人玩人人添人人澡超碰 | 91精品老司机久久一区啪 | 欧美日韩视频精品 | 波多野结衣综合网 | 91尤物在线播放 | 精品久久五月天 | 91av视频在线免费观看 | 欧美极品xxxx | 精品日韩视频 | 激情综合久久 | 超碰在线中文字幕 | 国产99久久久精品视频 | 久二影院 | 一级片免费观看视频 | 日韩av免费在线电影 | 日韩视频一 | 美女黄网久久 | 日韩中文在线视频 | 香蕉在线播放 | 久久综合久久88 | 激情五月视频 | 五月婷丁香网 | 亚洲伊人色 | 国产在线播放一区 | 亚洲一区二区三区在线看 | 2021国产精品视频 | 欧美日韩精品在线观看 | 最新真实国产在线视频 | 最新国产精品拍自在线播放 | 国产一级特黄电影 | 天天色天天操综合 | 欧美在线日韩在线 | 久久天堂网站 | aaa日本高清在线播放免费观看 | 国产成人精品免高潮在线观看 | 国产成人在线观看 | 欧洲激情综合 | 6080yy午夜一二三区久久 | japanesexxx乱女另类 | a级片网站 | 亚洲天堂网在线观看视频 | 91精品中文字幕 | 天天干视频在线 | 国产成人精品一区二三区 | 亚欧洲精品视频在线观看 | 91av在线国产 | 99精品视频在线观看播放 | 天天综合区 | 在线视频一二三 | 天天av资源 | 国产精品永久久久久久久www | 国产在线精品视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 中文字幕在线观看第一区 | 亚洲天堂在线观看完整版 | 在线精品亚洲一区二区 | 国产亚洲视频系列 | 在线 视频 亚洲 | 精品国产午夜 | 欧美一区二区免费在线观看 | 国产人成一区二区三区影院 | 日韩精品一卡 | 91片网 | 免费人成在线观看 | 亚洲精品美女在线观看播放 | 九九热re | 国产一区欧美日韩 | 日韩在线观看av | 97超碰人人澡人人 | 色综合久久久久综合体桃花网 | 免费观看成人网 | 国产精品av久久久久久无 | av黄色一级片 | 91在线蜜桃臀 | 又黄又刺激的网站 | 久久草视频 | 人人讲 | 青青草国产精品视频 | 一区二区三区电影大全 | 久草久草在线 | 在线免费黄色av | 一级一片免费视频 | 精品国产一区二区三区男人吃奶 | 国产香蕉久久 | 日韩av片在线 | 69国产盗摄一区二区三区五区 | 免费视频97 | 精品国产乱子伦一区二区 | 欧美精品久久人人躁人人爽 | 在线免费观看视频你懂的 | 欧美精品被 | 成人在线免费看视频 | 中文字幕视频播放 | 午夜在线观看一区 | 亚洲国产三级 | 久久国产女人 | 懂色av一区二区三区蜜臀 | 久久99精品国产麻豆宅宅 | 国产成人免费观看久久久 | 欧美久久久久久久久中文字幕 | 日躁夜躁狠狠躁2001 | 久久亚洲二区 | 亚洲一二三区精品 | 精品福利视频在线 | 国产在线不卡精品 | 波多野结衣视频一区 | 欧美日韩精品影院 | 青青河边草免费观看 | 亚洲综合在线一区二区三区 | 免费日韩精品 | 国产在线国产 | 99精品欧美一区二区蜜桃免费 | 麻豆国产网站入口 | 中文永久免费观看 | 日韩,精品电影 | 激情久久久久 | 成人免费视频网站在线观看 | 黄网站色成年免费观看 | 国产剧情一区在线 | 国产美女搞久久 | 久久天天躁狠狠躁亚洲综合公司 | 亚洲好视频 | 亚洲美女视频网 | 国产精品免费在线 | 五月婷在线 | 国产自在线 | 国产1区在线 | 中文字幕在线观看第二页 | 免费看成年人 | 久久99久国产精品黄毛片入口 | 在线精品视频免费播放 | 99热免费在线 | 欧洲精品视频一区 | 色噜噜在线观看 | 久久伊人国产精品 | 成人久久久精品国产乱码一区二区 | 久久激情五月婷婷 | www.天天射 | 久久99最新地址 | 国产精品久久久久四虎 | 国产精品嫩草影院9 | 欧美性成人| 99久久精品国产一区二区成人 | 美女免费视频一区 | 国产91精品看黄网站 | 日韩免费三级 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 国产在线观看网站 | 99精品视频免费看 | 人成电影网 | 色综合久久天天 | 成人三级av | 一区二区三区福利 | 亚洲欧美成人网 | 日韩精品一区在线观看 | 九九热免费视频在线观看 | 久久美女免费视频 | 久久久久久久看片 | 日本在线观看黄色 | 欧美一级片免费 | 狠狠操狠狠干天天操 | 午夜神马福利 | 国产亚洲精品久久久久久移动网络 | 久草在线在线视频 | 9999国产精品 | www99久久| 国产精品第一页在线观看 | 国产成人a v电影 | 天堂中文在线视频 | 日韩美在线 | 99久久婷婷 | 99久久精品国 | 国产91国语对白在线 | 国产一级精品绿帽视频 | 国产在线不卡 | 亚洲色视频 | 六月天色婷婷 | 黄a网站| 精品久久国产精品 | 美女福利视频一区二区 | 欧美日韩中文国产一区发布 | 日韩首页 | 91视频传媒 | 中文字幕乱码一区二区 | 国产精品久久久久久麻豆一区 | 久久高清国产视频 | 国产午夜一级毛片 | 成人精品99 | 欧美日韩另类在线 | 色噜噜狠狠狠狠色综合 | 午夜电影 电影 | 手机在线看片日韩 | 久久五月婷婷丁香社区 | 中文区中文字幕免费看 | 国产精品色婷婷视频 | 天天爱天天操天天干 | 91色在线观看视频 | 一级久久精品 | 亚洲视频,欧洲视频 | 中文字幕乱码亚洲精品一区 | 精品亚洲国产视频 | 国产成人精品av | 国产一区在线视频播放 | 日日碰狠狠躁久久躁综合网 | 亚洲成人av片 | 精品一区二区视频 | 香蕉视频导航 | 不卡视频一区二区三区 | 国产成人一区二区在线观看 | 激情五月激情综合网 | 九九色在线观看 | 亚洲国产mv| 国产h在线播放 | 日韩三级久久 | 成人h在线| 国产色在线观看 | 黄色成人毛片 | 激情五月综合 | 又黄又爽的视频在线观看网站 | 精品国产成人在线 | 久久综合色天天久久综合图片 | 日韩精品一区二区久久 | av久久在线 | avove黑丝| 欧美最猛性xxx | 日韩久久久久久久久久 | www.com久久 | 五月婷婷在线视频观看 | 日韩大片在线免费观看 | 国产91勾搭技师精品 | 精品乱码一区二区三四区 | 夜夜视频 | 国产拍在线| 伊人视频 | 久久99国产精品久久99 | 国产精品一区二区久久久 | 日本久久久久久久久 | 国产不卡精品视频 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 精品亚洲成人 | 国产精品久久久久永久免费观看 | 久久综合国产伦精品免费 | 国产视频2区| 国产成人av片 | 国产一级黄色免费看 | 99久久精 | 免费av网站在线看 | 亚洲jizzjizz日本少妇 | 在线观看黄色免费视频 | 天天插天天干天天操 | 久草在线精品观看 | 99婷婷狠狠成为人免费视频 | 日韩欧美网站 | 日日摸日日爽 | 7777xxxx| 国产在线一区二区三区播放 | 四虎成人精品在永久免费 | 久久综合五月 | 天天操夜夜操国产精品 | av官网在线| 91精品国产99久久久久久久 | 亚洲国产成人精品在线观看 | 又黄又刺激的视频 | 国产欧美日韩视频 | 日韩专区av | 中文字幕你懂的 | 久久亚洲专区 | 91在线看视频免费 | av大片免费在线观看 | 欧美超碰在线 | 黄色亚洲 | 黄色三级在线观看 | 久久综合免费 | 一本—道久久a久久精品蜜桃 | 激情欧美日韩一区二区 | 黄色在线视频网址 | 99草视频| 91久久精品日日躁夜夜躁国产 | 99re8这里有精品热视频免费 | 九九激情视频 | 一区二区电影网 | 国产中文在线视频 | 国产精品ⅴa有声小说 | 国产精品日韩久久久久 | 国产手机在线观看视频 | 亚洲国产中文字幕在线观看 | 成年人在线免费看视频 | 麻豆国产网站 | 久久久黄视频 | 亚洲综合在线五月 | 在线免费观看涩涩 | 777视频在线观看 | 色噜噜色噜噜 | 精品国产一区二区三区四区在线观看 | 91成人在线视频 | 亚洲视频一级 | 免费观看v片在线观看 | 免费黄色av | 99爱视频在线观看 | 国产成人久久精品 | 国产专区第一页 | 午夜视频免费在线观看 | 91av视频观看 | 久久夜色精品国产欧美乱极品 | 婷婷色在线 | 日韩综合在线观看 | 亚洲va天堂va欧美ⅴa在线 | 精品久久亚洲 | 亚洲国产欧美在线人成大黄瓜 | 国产精品99久久久精品免费观看 | 久久精品久久久久久久 | 国产精品一区二区久久久久 | 日本狠狠色 | 天天操天天操一操 | 婷婷综合久久 | 最新影院 | 91精品入口| 精品久久久久久综合 | 久久视频在线观看中文字幕 | 99久久久国产精品免费99 | 精品一区二区日韩 | 狠狠久久伊人 | 国产成年免费视频 | av福利网址导航 | 丁香综合av | 草久草久 | 日日夜夜艹 | 精品一区电影国产 | 99久久99视频| 欧美性生活一级片 | 在线观看一级视频 | 亚洲一区二区三区miaa149 | 欧美成人精品xxx | 久久草视频 | 精品久久综合 | 日韩黄色软件 | 欧美日韩精品在线 | 亚洲日b视频 | 欧美成年网站 | 国内精品免费久久影院 | 中文字幕久久精品亚洲乱码 | 久久激情综合网 | 久久综合色天天久久综合图片 | 在线播放91 | 国产高清一 | www.五月天激情 | 欧美日韩一级久久久久久免费看 | 97超碰人人网| 99精品在这里 | 在线观看av小说 | 欧美日韩免费网站 | 蜜臀av性久久久久av蜜臀三区 | 亚洲成人av电影 | zzijzzij亚洲日本少妇熟睡 | www久久com | 91精品视频在线 | 久久婷婷国产色一区二区三区 | 国产在线欧美日韩 | 日韩大陆欧美高清视频区 | 久久人人插 | 日韩中文在线电影 | 中文字幕第一页av | 免费成人在线视频网站 | 国产无套精品久久久久久 | 婷婷色狠狠 | 国产手机在线观看 | 91精品国产自产在线观看永久 | 日本高清免费中文字幕 | 中文字幕 在线 一 二 | 97在线观视频免费观看 | 亚洲精品xx | 久久久国产一区二区 | 免费av观看网站 | 久久香蕉电影 | 在线观看一级 | 在线播放精品一区二区三区 | 久草精品免费 | 国产美女视频 | 久草在线综合 | 国产精品成人av电影 | 特级毛片网站 | 成人欧美亚洲 | 不卡中文字幕在线 | 亚洲一二区视频 | 黄av资源 | 最近免费中文视频 | 88av网站 | 色狠狠婷婷 | 97精品在线观看 | 色婷婷激情电影 | 天天天干天天天操 | 色五丁香 | 一区二区三区电影 | 国产欧美中文字幕 | 黄色91免费观看 | 深爱激情五月网 | 天天爱av导航 | 国产在线精品一区二区三区 | 久久亚洲欧美 | 欧美久久久久久久久久久久久 | 国产视频日韩视频欧美视频 | 美女黄网久久 | 欧美影片 | 麻豆久久一区二区 | 91字幕| 深爱婷婷 | 欧美成人播放 | 超碰成人免费电影 | 久久九九精品 | 在线激情影院一区 | 亚洲码国产日韩欧美高潮在线播放 | 久久久免费毛片 | 狠狠色狠狠色 | 国产精品久久久久久久久久久不卡 | 久青草电影 | 久久久久久久久久福利 | 免费观看av网站 | 中文字幕一区二区三区在线观看 | 欧美 日韩精品 | 日韩av影片在线观看 | 亚洲国产视频在线 | 激情五月播播久久久精品 | 午夜精品视频一区 | 91成人在线视频 | 69视频国产 | 五月婷婷天堂 | 午夜精品视频一区 | 国内精品久久久久影院优 | 国产精品国产毛片 | 日本韩国精品在线 | 91国内在线| 中文永久字幕 | 欧美在线视频a | 91成人免费看 | 亚洲无吗av| 国产精品视频不卡 | 天天干天天玩天天操 | 在线亚州| 国产尤物在线观看 | 久久国产欧美日韩精品 | 国产成人高清av | 在线观看你懂的网站 | 毛片一级免费一级 | 黄色网址中文字幕 | 国偷自产中文字幕亚洲手机在线 | 久久你懂的 | 人交video另类hd | 99精品视频在线观看视频 | 久久电影色| 久久成年人 | 国产精品一区二区三区免费视频 | 黄色成人av | 亚洲精品欧美成人 | 久久9999久久 | 日韩精品短视频 | 日韩欧美在线综合网 | 久久夜色精品国产欧美乱极品 | 欧美日韩视频 | 色婷久久 | 在线观看中文字幕视频 | 人人插人人插 | 国产成人a亚洲精品v | 亚洲欧美婷婷六月色综合 | 激情亚洲综合在线 | 成在线播放 | 91精品久久久久久久91蜜桃 | 麻豆影视在线播放 | 91av蜜桃 | 久久久久免费精品视频 | 成 人 黄 色 免费播放 | 久久草网站 | www.夜色.com| 91丨九色丨蝌蚪丨老版 | 国产手机av在线 | 久草综合视频 | 51久久成人国产精品麻豆 | 毛片1000部免费看 | 久久久久麻豆 | 色综合久久久久久中文网 | 亚洲有 在线 | 特级西西444www大精品视频免费看 | 亚洲波多野结衣 | 久久综合网色—综合色88 | 成人黄色大片在线免费观看 | 国产精品毛片久久久 | 最新日韩在线观看视频 | 99精品偷拍视频一区二区三区 | 99视频免费 | 日本不卡一区二区 | 九九热在线视频免费观看 | 9999在线 | 国产a视频免费观看 | 国产黄色视 | 在线激情影院一区 | 国产精品都在这里 | 插久久 | 九九免费在线看完整版 | 国精产品一二三线999 | h文在线观看免费 | 国内精品久久久久久久久久久 | 国产精品99久久久精品免费观看 | 国产精品入口麻豆 | 在线免费观看视频 | 亚州精品一二三区 | 一二三精品视频 | 久久久免费精品 | 韩国av永久免费 | 欧美精品久久久久久久久免 | 国产中文在线观看 | 免费看的黄网站软件 | 免费看黄在线网站 | 国产黄色大片 | 欧美午夜激情网 | 亚洲91精品在线观看 | a在线观看国产 | 天天草视频 | 中文字幕第 | 欧美日韩在线看 | 成人午夜精品 | 日本性生活免费看 | 中文字幕永久免费 | 中文字幕在线一区观看 | 久久色在线观看 | 天天艹日日干 | 日韩欧美在线免费观看 | 337p日本大胆噜噜噜噜 | 久久99亚洲精品久久久久 | 天天草天天插 | 欧美亚洲国产一卡 | 天天躁日日躁狠狠躁av麻豆 | 国产一区二区高清视频 | 成人黄色免费观看 | 亚洲精品午夜视频 | 国产又黄又爽又猛视频日本 | 日韩一区二区三区免费电影 | 中文字幕第一页在线 | 精品久久久久久亚洲综合网站 | 久久欧美在线电影 | 麻豆 videos| 97精品国产97久久久久久久久久久久 | 久久成人麻豆午夜电影 | 日本最新中文字幕 | 中文字幕在线观看91 | 久久免费视频在线观看30 | 亚洲狠狠婷婷 | 黄色三级免费网址 | 欧美日韩精品影院 | av黄色免费看 | 国产视频亚洲 | 99福利片| 日韩av快播电影网 | 日日干视频 | 亚洲国产精品小视频 | 欧美在线久久 | av在线一| 久久你懂的 | 色a网 | 亚洲乱码久久久 | 久久亚洲免费视频 | 日韩免费观看av | 福利视频在线看 | 日韩免费一区 | 欧美亚洲成人xxx | 在线亚洲人成电影网站色www | 激情综合网婷婷 | 91丨porny丨九色 | 91麻豆精品国产自产 | av在线播放一区二区三区 | 在线观看av片 | 欧洲精品在线视频 | 国产亚洲免费的视频看 | 手机在线小视频 | 久久免费在线视频 | 亚欧洲精品视频在线观看 | 青春草免费视频 | 一区二区视频在线免费观看 | 国产精品久久久久久久久久久久久 | aaawww| 国产一区二区三区午夜 | 国产亚洲资源 | 99色资源 | 丁香花中文字幕 | 日韩激情视频 | 亚洲精品字幕在线观看 | 国产视频精品免费播放 | 99精品视频在线看 | 欧美成人性战久久 | 色5月婷婷 | 国产九九精品 | 日日操天天爽 | 99视频一区| 四虎精品成人免费网站 | 最新中文在线视频 | 日韩亚洲国产精品 | 五月婷婷狠狠 | 超碰在97 | 成人a级免费视频 | 国产色小视频 | 婷婷综合国产 | 日韩二区在线播放 | 日韩精品视频在线观看免费 | 精品国产诱惑 | 久在线观看视频 | 国产免费视频在线 | 91av资源网| 特级a老妇做爰全过程 | 精品久久五月天 | 久久网站免费 | 亚洲综合色网站 | 黄色大片国产 | 国产黄色一级片在线 | 999国产在线| www色| 日本在线观看中文字幕无线观看 | 午夜精品一区二区三区免费视频 | 国产96在线 | 亚洲国产精品视频在线观看 | 欧美爽爽爽 | 精品亚洲免a | 伊人av综合| 国产v视频 | 亚洲三级国产 | 97人人超碰在线 | 久久99精品久久久久久秒播蜜臀 | 韩日在线一区 | 国产精品在线看 | 网站免费黄色 | 麻豆一区在线观看 | 久久高清国产视频 | 久精品视频 | 久久99国产精品久久 | 久草在线视频首页 | 五月婷婷在线视频 | 日韩激情影院 | 最新中文字幕视频 | 在线国产能看的 | 在线欧美中文字幕 | 国产专区精品视频 | 狠狠狠色 | 国产在线观看国语版免费 | 久久天天躁夜夜躁狠狠85麻豆 | 奇米先锋 | 国产福利免费在线观看 | 久久久久久激情 | 日韩精品一区二区三区电影 | 亚洲资源视频 | 国产精品精品 | 久久综合电影 | 综合色久 | av短片在线观看 | 婷婷久月 | 91影视成人 | 亚洲九九九在线观看 | 国产偷在线 | 欧美激情视频一二三区 | 在线视频 一区二区 | 国产精品久久久久久久久蜜臀 | 久久久综合九色合综国产精品 | 美女精品网站 | 亚洲精品乱码久久久久 | 在线影视 一区 二区 三区 | 日韩色区 | 香蕉免费在线 | 免费观看9x视频网站在线观看 | 国产999精品视频 | 涩涩爱夜夜爱 | 在线视频麻豆 | 国产69久久 | 日本在线观看中文字幕 | 欧美亚洲一区二区在线 | 4hu视频| 国产字幕在线观看 | 日韩av网址在线 | 美女网站视频色 | 免费a视频在线观看 | 亚洲一级性| 亚洲va欧美va人人爽春色影视 | 草久在线观看视频 | 午夜视频一区二区 | 中文字幕中文字幕 | 日本久久久久久久久久久 | 2019中文在线观看 | 美女禁18| 精品在线观看一区二区 | 精品一区免费 | 日本三级不卡 | 免费高清在线视频一区· | 免费观看成人 | 天天操网站 | 黄色影院在线免费观看 | 亚洲理论片 | 日韩一区二区三区观看 | 婷婷激情五月 | 国产精品视频观看 | 天天躁日日躁狠狠躁av麻豆 | 美女黄频在线观看 | 中文字幕av免费在线观看 | 国产黄色一级大片 | 91天天操 | 日韩免费大片 | 中文字幕日韩高清 | 最新av电影网址 | 国产高清视频免费最新在线 | 天天爱天天| 国产xxxxx在线观看 | 国产v欧美 | www久久精品 | 九九激情视频 | 国产精品久久久久久高潮 | 日韩精品视频在线观看网址 | 亚洲视频一区二区三区在线观看 | 免费的黄色av | 高潮久久久 | 99视频一区二区 | www.国产在线视频 | 精品国产一区二区三区在线观看 | 国产日韩精品一区二区三区在线 | 国产一级电影在线 | 波多野结衣在线观看一区二区三区 | 玖玖在线看 | 亚洲黄色三级 | 97精品国产97久久久久久粉红 | 手机在线欧美 | 国产视频综合在线 | 亚洲精品成人免费 | 婷婷激情在线 | 99爱国产精品 | 亚洲国产播放 | 免费一级片久久 | 黄色一级片视频 | 美女视频又黄又免费 | 国产精品免费小视频 | 亚欧日韩成人h片 | 中文在线a√在线 | 国产成人精品久久久久蜜臀 | 国产激情久久久 | 亚洲精品三级 | 午夜国产福利在线 | 天天爱天天射天天干天天 | 国内精品福利视频 | 五月婷婷中文字幕 | 99r在线播放| 最近中文字幕免费av | 日韩成人邪恶影片 | 日韩黄色在线观看 | 日韩久久精品一区二区 | 8x成人在线| 成人一区不卡 | 午夜视频一区二区 | 国产最新精品视频 | 五月婷婷综合在线观看 | 国产黄色在线网站 | 97香蕉超级碰碰久久免费软件 | 亚洲aaa毛片| 日日精品 | 日本久久久久久久久久 | 毛片在线播放网址 | 91九色蝌蚪视频 | 久久人人97超碰com | 久久午夜国产精品 | 久久精品香蕉 | 久久久久成 | 中文字幕一区在线 | 开心丁香婷婷深爱五月 | 天天操天天射天天 | 国产精品一区二区久久精品 |