#author("2025-09-11T21:06:44+09:00","default:guest","guest") #author("2025-09-11T21:07:27+09:00","default:guest","guest") *参照元 [#qe998f82] #backlinks *説明 [#efc8b750] -パス: [[linux-5.15/mm/vmscan.c]] -指定したLRU listからページ回収する。 **引数 [#r23e690a] -enum lru_list lru --LRU listの種類。 --[[linux-5.15/lru_list]] -unsigned long nr_to_scan -- -struct lruvec *lruvec --LRU list --[[linux-5.15/lruvec]] -struct scan_control *sc -- --[[linux-5.15/scan_control]] **返り値 [#r96849dc] -unsigned long --回収したページ数。active系のLRU listからページ回収した場合は0を返す。 **参考 [#m83c63da] *実装 [#dc6fd057] static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan, struct lruvec *lruvec, struct scan_control *sc) { if (is_active_lru(lru)) { if (sc->may_deactivate & (1 << is_file_lru(lru))) shrink_active_list(nr_to_scan, lruvec, sc, lru); else sc->skipped_deactivate = 1; return 0; } -LRU listがactive系(active anon, active file)で、scan_control->may_deactivateのビットと一致していればactive系のLRU listからページを回収する。 -LRU listがactive系(active anon, active file)で、scan_control->may_deactivateのビットと一致していればactive系のLRU listを縮小する(ページは回収しない)。 -active anonのとき --1 << is_file_lru(lru) = 1 << false = 1 << 0 = 1 (= DEACTIVATE_ANON) -active fileのとき --1 << is_file_lru(lru) = 1 << true = 1 << 1 = 2 (= DEACTIVATE_FILE) -may_deactivateはshrink_node()で設定される。 --[[linux-5.15/is_active_lru()]] --[[linux-5.15/is_file_lru()]] --[[linux-5.15/shrink_active_list()]] --[[linux-5.15/shrink_node()]] return shrink_inactive_list(nr_to_scan, lruvec, sc, lru); } -inactive系のLRU listからページを回収する。 --[[linux-5.15/shrink_inactive_list()]] *コメント [#q64516a2]