物理メモリ と 仮想メモリ と時々DMA(Direct Memory Access)
物理メモリと仮想メモリとは何か?
これらの使用量を確認する方法は何?
DMA(Direct Memory Access)との関連性は何か?
物理メモリと仮想メモリとは?
OS君がいい感じにやりくりをして、ユーザに大きく見せている。
(SW: OS, HW: CPU + MMU(Memory Managing Unit))
物理アドレス->仮想アドレス変換、スワップ、ページング等の処理を、舞台裏で色々と動いている。
物理/仮想メモリの容量、使用状況の確認方法(Linux)
下記コマンドにて確認できる。
- free
- vmstat
オプション等の細かい情報は、manで開くといっぱいでてくるので、そちらを参照。
freeコマンド : 物理メモリの使用量を表示するコマンド
$ free -h total used free shared buff/cache available Mem: 15G 4.0G 1.8G 437M 9.7G 10G Swap: 15G 0B 15G
vmstatコマンド : 仮想メモリの統計情報を表示するコマンド
メモリに関して様々な情報が表示することが可能なので、パフォーマンス改善やデバッグ等の解析作業でめっちゃ便利かもしれない。。
$ vmstat -s 16268728 K total memory 4186384 K used memory 8701784 K active memory 2400816 K inactive memory 1890892 K free memory 3316048 K buffer memory 6875404 K swap cache 16624636 K total swap 0 K used swap 16624636 K free swap 293277 non-nice user cpu ticks 706 nice user cpu ticks 73609 system cpu ticks 7649389 idle cpu ticks 9442 IO-wait cpu ticks 0 IRQ cpu ticks 26537 softirq cpu ticks 0 stolen cpu ticks 5970073 pages paged in 3868849 pages paged out 0 pages swapped in 0 pages swapped out 16397827 interrupts 37902288 CPU context switches 1599176405 boot time 12794 forks
DMA(Direct Memory Access)との関係
メモリ転送の際、CPUの代わりに、DMAモジュールが実施してくれる。
[転送方向]
- メモリ <--> メモリ
- I/O機器 <--> メモリ
ただ、DMA転送中も、CPUからのメモリアクセスが発生するための、DMAとのメモリ競合や不整合が発生することもある。
不整合を防ぐ仕組みも当然あるが、色々ガチャガチやるので、スループット、レイテンシを落ちないよう検討する必要がある。
補足
- pmap : プロセスのメモリマップを表示するコマンド