#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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS