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