物理メモリ と 仮想メモリ と時々DMA(Direct Memory Access)


物理メモリと仮想メモリとは何か?

これらの使用量を確認する方法は何?

DMA(Direct Memory Access)との関連性は何か?


物理メモリと仮想メモリとは?

  • 物理メモリは、メモリカードの実体そのもの

  • 仮想メモリは、ユーザから見える仮想のメモリ容量のこと。(物理メモリ + HDDとか)


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 : プロセスのメモリマップを表示するコマンド