#author("2025-09-16T10:15:35+09:00","default:guest","guest") #author("2025-09-16T10:19:59+09:00","default:guest","guest") *参照元 [#o3b2483d] #backlinks *説明 [#q1b9b00c] **メモリ確保時に頻出する単語 [#ofa8b832] ***LRU list [#xa4f83ea] ***プロテクション [#e0492436] -lowmem_reserve ***migratetype [#o45332b1] ゾーン内の空きメモリを管理するためのフリーリストはorderごとに分かれていて、フリーリストはさらにmigratetypeごとに分かれている。 [[linux-5.15/migratetype]] -zone --free_area order 0 ---migrate unmovable ---migrate movable ---... ---migrate cma ---migrate isolate --free_area order 1 ---migrate unmovable ---migrate movable ---... ---migrate cma ---migrate isolate --free_area order 2 --... ***オーダー(order) [#kb9b51a6] Linuxカーネルのメモリ確保関数は、ページ数を2^orderの形で表すことがある。つまりorder 0 = 1ページ, order 1 = 2ページ, order 2 = 4ページ, order 3 = 8ページを表す。 ***watermark [#e321af49] 何かの閾値を表しているだけのこともあるが、ゾーンごとに3種類設定されているwatermarkがコードに頻出する。 またwatermarkにはブーストと呼ばれる仕組みがあり、ゾーンに設定されている値 + ブースト値 = watermarkとして扱われる。 -min watermark --〜を発動させる閾値(などの説明を入れる) --_watermark[WMARK_MIN]の値 -low watermark --〜を発動させる閾値(などの説明を入れる) --_watermark[WMARK_LOW]の値 -high watermark --〜を発動させる閾値(などの説明を入れる) --ノード内の全ゾーンの空きページがhigh watermarkを下回ると、ノードがバランス状態ではないとみなされてkswapdがページ回収し始める。 --_watermark[WMARK_HIGH]の値 -boost --watermark_boostの値 -参照 --[[linux-5.15/zone]] --WMARK_XXXの定義: [[linux-5.15/zone_watermarks]] ***カーネルが扱うページ数 [#x095908e] 3つあって、メモリ確保に使えるmanaged_pagesは下記のように決まる。 -spanned_pages = zone_end_pfn - zone_start_pfn --ゾーンの範囲にあるページ数。ゾーンの開始アドレスと終了アドレス内に入るページ数。 -present_pages = spanned_pages - absent_pages(pages in holes) --存在するページ数。ゾーンの範囲にあるページ数から実際にページがない領域を除いたページ数。 -managed_pages = present_pages - reserved_pages --管理するページ数。存在しているページ数から予約領域を除いたページ数。 ***pcplist(per-cpu list) [#gfc7b2b2] pcplist数はNR_PCP_LISTだけある。 -MIGRATE_PCPTYPES = 3 --[[linux-5.15/include/migratetype]] -PAGE_ALLOC_COSTLY_ORDER = 3 -NR_PCP_THPはCONFIG_TRANSPARENT_HUGEPAGEが定義されていれば1 なので(3 * (3 + 1 + 1)) = 3 * 5 = 15となる。 #define NR_PCP_LISTS (MIGRATE_PCPTYPES * (PAGE_ALLOC_COSTLY_ORDER + 1 + NR_PCP_THP)) /* * PAGE_ALLOC_COSTLY_ORDER is the order at which allocations are deemed * costly to service. That is between allocation orders which should * coalesce naturally under reasonable reclaim pressure and those which * will not. */ #define PAGE_ALLOC_COSTLY_ORDER 3 highとbatchの値は/proc/zoneinfoの下記の部分で確認できる。 pagesets cpu: 0 count: 0 high: 252 //★これ batch: 63 //★これ **参考 [#ycbe7422] **関連モジュール [#i527637c] *コメント [#u58031fd]