※ File 및 Anon의 VMA와 Page 구조

File Page = Dirty Cache + Clean Cache
File VMA = Anone Page + File Page
Anon VMA = Anon Page
( 즉, File-VMA에도 Anon Page가 존재할 수 있다. )
※ 주요 사용 API
int PageAnon(struct page *page);
int page_is_file_lru(struct page *page);
bool vma_is_anonymous(struct vm_area_struct *vma);
※ KSWAPD Reclaim Path
kswapd(void *p);
/**/
balance_pgdat(pg_data_t *pgdat, int order, int highest_zoneidx);
/**/
kswapd_shrink_node(pg_data_t *pgdat, struct scan_control *sc);
/**/
shrink_node(pg_data_t *pgdat, struct scan_control *sc);
/**/
shrink_node_memcgs(pg_data_t *pgdat, struct scan_control *sc);
/**/
shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc);
/**/
shrink_list(enum lru_list lru, unsigned long nr_to_scan, struct lruvec *lruvec, struct scan_control *sc);
/**/
shrink_inactive_list(unsigned long nr_to_scan, struct lruvec *lruvec, struct scan_control *sc, enum lru_list lru);
/**/
shrink_page_list(struct list_head *page_list, struct pglist_data *pgdat, struct scan_control *sc, struct reclaim_stat *stat, bool ignore_references);
// shrink_page_list() 함수는 다름 reclaim logic에서도 주로 사용
/**/
__remove_mapping(struct address_space *mapping, struct page *page, bool reclaimed, struct mem_cgroup *target_memcg);
/**/
__delete_from_page_cache(struct page *page, void *shadow);
/**/
free_unref_page_list(struct list_head *list);'Kernel > 理解' 카테고리의 다른 글
| ZRAM 분석 (0) | 2024.02.02 |
|---|---|
| ELF 실행 & execve (0) | 2024.02.02 |
| Bootloader 개요 (0) | 2024.02.02 |
| [sched] Pressure Stall Information (PSI) (0) | 2024.02.02 |
| ARM64 (ARMv8) Assembly 참고 자료 (0) | 2024.02.02 |