#author("2025-09-10T18:43:06+09:00","default:guest","guest")
#author("2025-09-10T18:49:31+09:00","default:guest","guest")
*参照元 [#reeee3ab]
#backlinks

*説明 [#m883d450]
-パス: [[linux-5.15/mm/vmstat.c]]

-FIXME: これは何?
--説明
-指定したオーダーの外部断片化スコアを取得します。


**引数 [#b8f62a78]
-struct zone *zone
--メモリゾーン。
--[[linux-5.15/zone]]
-unsigned int order
--オーダー。


**返り値 [#c6687887]
-unsigned int
--
--外部断片化スコア(0〜100)


**参考 [#m69dffa8]


*実装 [#a54b53fa]

 /*
  * Calculates external fragmentation within a zone wrt the given order.
  * It is defined as the percentage of pages found in blocks of size
  * less than 1 << order. It returns values in range [0, 100].
  */
 unsigned int extfrag_for_order(struct zone *zone, unsigned int order)
 {
 	struct contig_page_info info;
 
 	fill_contig_page_info(zone, order, &info);
 	if (info.free_pages == 0)
 		return 0;
 
 	return div_u64((info.free_pages -
 			(info.free_blocks_suitable << order)) * 100,
 			info.free_pages);
 }

-スコア
--(free_pages - (free_blocks_suitable << order) * 100) / free_pages
-スコア = (free_pages - (free_blocks_suitable << order)) * 100 / free_pages
--平たく言うと、orderで指定したブロックより小さいブロックが全体の何割を占めるか?がスコアです。
--例えば、指定されたorderより小さいブロックがない場合、free_pages == free_blocks_suitable << orderになるので、外部断片化スコアは0。
--2割のページがorderより小さいブロックに含まれている場合、(free_blocks_suitable << order)はfree_pagesの8割になるので、外部断片化スコアは20。

-free_pages
--各orderの空ブロックに含まれるページ数の合計
--orderが考慮され、0なら等倍、order 1なら2倍、order 2なら4倍のページ数としてカウントされる
--orderが考慮され、0なら等倍、order 1なら2倍、order 2なら4倍のページ数としてカウントされます。
-free_blocks_suitable
--引数に指定したorder換算の空ブロック数
--orderが考慮され、例えばorder = 9指定ならばorder 10のブロック数は2倍、order 11のブロック数は4倍カウントされる
--orderが考慮され、例えばorder = 9指定ならばorder 10のブロック数は2倍、order 11のブロック数は4倍カウントされます。
--[[linux-5.15/fill_contig_page_info()]]


*コメント [#vc9e7a18]

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