linux-5.15/compaction_deferred()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#hdca5acf]
#backlinks
*説明 [#n10e5156]
-パス: [[linux-5.15/mm/compaction.c]]
-コンパクションを延期するかどうか取得します。
**引数 [#n0e689a6]
-struct zone *zone
--メモリゾーン。
--[[linux-5.15/zone]]
-int order
--オーダー。
**返り値 [#cc61d76d]
-bool
--コンパクションを延期するならtrue、延期しないならfalse。
**参考 [#d9d7bcd5]
compact_order_failedは下記のどちらかを保持する。
- 過去にコンパクションに成功したときのorder + 1の値
--[[linux-5.15/compaction_defer_reset()]]
- 過去にコンパクションに失敗したときのorderの値
--[[linux-5.15/defer_compaction()]]
compaction_defer_reset()呼び出し元は3つ
-[[linux-5.15/try_to_compact_pages()]]
--[[linux-5.15/compact_zone_order()]]に成功したときに呼ぶ...
-[[linux-5.15/kcompactd_do_work()]]
--[[linux-5.15/compact_zone()]]に成功したときに呼ぶ。
-[[linux-5.15/__alloc_pages_direct_compact()]]
--[[linux-5.15/try_to_compact_pages()]]でコンパクションに...
defer_compaction()の呼び出し元は2つ
-[[linux-5.15/try_to_compact_pages()]]
--[[linux-5.15/compact_zone_order()]]に失敗したときに呼ぶ。
-[[linux-5.15/kcompactd_do_work()]]
--[[linux-5.15/compact_zone()]]に失敗したときに呼ぶ
ざっくりいうとcompact_zone()が成功したらorder + 1、失敗し...
例えばorder 9でコンパクションをするか判定するとき、
-前回のコンパクションでorder 9が成功した、compact_order_f...
--今回も成功するはずなのでコンパクションを延期せず実施す...
-前回のコンパクションでorder 9が失敗した、compact_order_f...
--今回も失敗する確率が高いのでコンパクションを延期して実...
コンパクションを延期し続けてしまうことを避けるため、延期...
compact_defer_shiftはコンパクション延期時(defer_compacti...
*実装 [#v6d63841]
/* Returns true if compaction should be skipped this tim...
static bool compaction_deferred(struct zone *zone, int o...
{
unsigned long defer_limit = 1UL << zone->compact_defer_...
if (order < zone->compact_order_failed)
return false;
-前回のコンパクションが成功しているか、失敗していても今回...
/* Avoid possible overflow */
if (++zone->compact_considered >= defer_limit) {
zone->compact_considered = defer_limit;
return false;
}
-コンパクションを延期した回数が一定数を超えていたら、コン...
trace_mm_compaction_deferred(zone, order);
return true;
}
-いずれの条件も成立しないならコンパクションを延期する。
--[[linux-5.15/trace_mm_compaction_deferred()]]
*コメント [#k6936ea7]
終了行:
*参照元 [#hdca5acf]
#backlinks
*説明 [#n10e5156]
-パス: [[linux-5.15/mm/compaction.c]]
-コンパクションを延期するかどうか取得します。
**引数 [#n0e689a6]
-struct zone *zone
--メモリゾーン。
--[[linux-5.15/zone]]
-int order
--オーダー。
**返り値 [#cc61d76d]
-bool
--コンパクションを延期するならtrue、延期しないならfalse。
**参考 [#d9d7bcd5]
compact_order_failedは下記のどちらかを保持する。
- 過去にコンパクションに成功したときのorder + 1の値
--[[linux-5.15/compaction_defer_reset()]]
- 過去にコンパクションに失敗したときのorderの値
--[[linux-5.15/defer_compaction()]]
compaction_defer_reset()呼び出し元は3つ
-[[linux-5.15/try_to_compact_pages()]]
--[[linux-5.15/compact_zone_order()]]に成功したときに呼ぶ...
-[[linux-5.15/kcompactd_do_work()]]
--[[linux-5.15/compact_zone()]]に成功したときに呼ぶ。
-[[linux-5.15/__alloc_pages_direct_compact()]]
--[[linux-5.15/try_to_compact_pages()]]でコンパクションに...
defer_compaction()の呼び出し元は2つ
-[[linux-5.15/try_to_compact_pages()]]
--[[linux-5.15/compact_zone_order()]]に失敗したときに呼ぶ。
-[[linux-5.15/kcompactd_do_work()]]
--[[linux-5.15/compact_zone()]]に失敗したときに呼ぶ
ざっくりいうとcompact_zone()が成功したらorder + 1、失敗し...
例えばorder 9でコンパクションをするか判定するとき、
-前回のコンパクションでorder 9が成功した、compact_order_f...
--今回も成功するはずなのでコンパクションを延期せず実施す...
-前回のコンパクションでorder 9が失敗した、compact_order_f...
--今回も失敗する確率が高いのでコンパクションを延期して実...
コンパクションを延期し続けてしまうことを避けるため、延期...
compact_defer_shiftはコンパクション延期時(defer_compacti...
*実装 [#v6d63841]
/* Returns true if compaction should be skipped this tim...
static bool compaction_deferred(struct zone *zone, int o...
{
unsigned long defer_limit = 1UL << zone->compact_defer_...
if (order < zone->compact_order_failed)
return false;
-前回のコンパクションが成功しているか、失敗していても今回...
/* Avoid possible overflow */
if (++zone->compact_considered >= defer_limit) {
zone->compact_considered = defer_limit;
return false;
}
-コンパクションを延期した回数が一定数を超えていたら、コン...
trace_mm_compaction_deferred(zone, order);
return true;
}
-いずれの条件も成立しないならコンパクションを延期する。
--[[linux-5.15/trace_mm_compaction_deferred()]]
*コメント [#k6936ea7]
ページ名: