プロセス毎のswap使用量を計測するパッチを読む その4

「プロセス毎のswap使用量を計測するパッチを読む その3」の続き。

copy_one_pte

copy_one_pte関数の続き。前回は、コピー対象のページがスワップエントリである場合、コピー元のスワップページの参照カウントをインクリメントする、というところまででした。今回も「コピー対象がスワップエントリである場合」というコンテキストです。
mm/memory.c

 if (!is_migration_entry(entry))
 rss[2]++;
 else if (is_write_migration_entry(entry) &&
                                        is_cow_mapping(vm_flags)) {
                                /*                                                                     
                                 * COW mappings require pages in both parent                           
                                 * and child to be set to read.                                        
                                 */
                                make_migration_entry_read(&entry);
                                pte = swp_entry_to_pte(entry);
                                set_pte_at(src_mm, addr, src_pte, pte);
                        }
                }
                goto out_set_pte;
        }

インデントがおかしい部分が今回のpatchによって変更された部分になります。

is_migration_entry

「CONFIG_MIGRATION」がdefineされているかによって関数の内容が変わってます。
include/linux/swapops.h

#ifdef CONFIG_MIGRATION
...
=>atic inline int is_migration_entry(swp_entry_t entry)
{
        return unlikely(swp_type(entry) == SWP_MIGRATION_READ ||
                        swp_type(entry) == SWP_MIGRATION_WRITE);
}

include/linux/swapops.h

#else

#define make_migration_entry(page, write) swp_entry(0, 0)
=>atic inline int is_migration_entry(swp_entry_t swp)
{
            return 0;
}

「CONFIG_MIGRATION」が分からなかったのでちょっとググってみたところ、以下のように記載されていました。

Allows the migration of the physical location of pages of processes while the virtual addresses are not changed. This is useful for example on NUMA systems to put pages nearer to the processors accessing the page.

http://cateee.net/lkddb/web-lkddb/MIGRATION.html

仮想アドレスを変更せずに物理ページの位置をマイグレーションできる、らしい。特殊用途向けなのかな。configをみたら定義されてなかったので、return 0;の実装が適用されているようです。
rss[2]++が実行され、mm_structに追加したswapの使用量のカウントが上がります。つまり、ページエントリをコピーする(copy_one_pte)際、それがスワップエントリであれば、コピー先のプロセスのスワップの使用量が加算されることになります。

参考文献:

Linuxカーネル2.6解読室
Linuxカーネル2.6解読室
ソフトバンククリエイティブ 2006-11-18
売り上げランキング : 63555

おすすめ平均 star
starLinuxカーネル全般についてじっくり学べる
starこれを理解できなくてもがっかりするな
star細かい割りに、肝心な疑問点がわからない

Amazonで詳しく見る
by G-Tools