メモリメモ
コピーオンライトがあるのでスレッドよりもプロセスが重いなんてことはない。昔の話。
# cat /proc/meminfo MemTotal: 1020096 kB MemFree: 71060 kB Buffers: 45848 kB Cached: 762244 kB SwapCached: 5980 kB Active: 183652 kB Inactive: 668244 kB Active(anon): 13576 kB Inactive(anon): 30580 kB Active(file): 170076 kB Inactive(file): 637664 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 5079036 kB SwapFree: 5054380 kB Dirty: 248 kB Writeback: 0 kB AnonPages: 38924 kB Mapped: 12704 kB Shmem: 308 kB Slab: 76584 kB SReclaimable: 22564 kB SUnreclaim: 54020 kB KernelStack: 1600 kB PageTables: 2288 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 5589084 kB Committed_AS: 157228 kB VmallocTotal: 34359738367 kB VmallocUsed: 8340 kB VmallocChunk: 34359717896 kB HardwareCorrupted: 0 kB AnonHugePages: 2048 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 8180 kB DirectMap2M: 1040384 kB
物理メモリの配分
64ビットではLowメモリとHighメモリの区別もなくなる 全てのメモリ領域がカーネルが利用できるLowメモリ領域として認識される ユーザーメモリとカーネルメモリ
ユーザメモリの分類
Anonymous (anon)
プログラムの実行中に動的に確保したメモリ。mallocとか。
File-backed(file)
ディスクキャッシュなど、ディスク上にもある種類ものと対応がある。
active
最近利用
inactive
長時間利用されていない
4種類のLRUリスト(Least Recently Used)
- anon(active)
- anon(inactive)
- file(active)
- file(inactive)
プラス
- 原理的に開放できないもの Unevictableリスト
移動する
- メモリの状況によって移動する。
- anon(active) ←→ anon(inactive)
- file(active) ←→ file(inactive)
カーネルメモリの分類
- そもそも仮想空間ない。物理に直接
- そもそもカーネルでは2つのメモリ管理
- データの形式によって事前に2つの方式でまとめて確保している
- Buddyシステム(Buddyアロケータ)
- 4Kb以上
- Slabアロケータ
- 4KB以下
- Buddyシステム(Buddyアロケータ)
- vmalloc()