ラズパイ4GBモデルで32bit OSを使うと3.8GB程度有効

先日、Raspberry Pi 4 Model B(4GB)を購入しました。

4GB モデルを購入したのは(8GB モデル発表前だったのはもちろんですが)、32bit OS で実際にどの程度メインメモリとして認識できるか興味が湧いたからです。

32bit OS で認識できるメモリサイズは、上限が 4GB なのですが 4GB を積んでいても全て使えるわけではありません

※BIOS 上からは 4GB 全て認識されますが、32bit OS 上からは全てを(ユーザが使用できる領域としては)認識できません。

この OS からは認識されない部分を「管理外領域メモリ」と呼び、Windows の場合 32bit 版では(4GB 積んでいても)3.12GB 程度が使用できる容量になります。

この 1GB 近くメモリが目減りするのには理由があり、Windows のシステム自体が 1GB ほど使うためです。
※昔は 32bit の上限である 4GB をフルで使うことなんか想像もしなかったのでしょうね。

目次

管理外領域メモリ

まずは、この管理外領域メモリから見ていきましょう。

これは、デバイス毎にメモリを消費する「Memory Mapped IO(MMIO)」によるものです。
この MMIO で(予め)メインメモリ上に領域を予約するため、OS からは見えない部分が生まれます。

base on Windowsではメモリーの上限が「4GB」と聞きました。これはなぜですか? | 日経クロステック(xTECH)

32ビット版で4GBのメモリーを搭載するパソコンだからといって、すべての容量を使い切れるわけではありません。
実際にソフトなどが利用できるのは、約3GBまでとなります。

そこで、今回の疑問です。

Raspberry Pi 4 Model B 4GB モデルを手に入れたものの、32bit OS だと実際どの程度使えるのだろう・・・と。
※シングルボードコンピュータの OS は 32bit 全盛です(一部を除き 32bit)。

実際に使ってみました。

環境

Raspberry Pi OS で計測しています。

$ cat /etc/issue
Raspbian GNU/Linux 10 \n \l

$ cat /etc/debian_version 
10.6

$ uname -r
5.4.51-v7l+

実測値

3829MB なので、4GB 弱使える計算です。
※システムで使う部分もあるので、4GB フルフルでは使えません。

$ top

top - 18:58:19 up 12 min,  3 users,  load average: 0.00, 0.05, 0.08
Tasks: 148 total,   1 running, 147 sleeping,   0 stopped,   0 zombie
%Cpu0  :  1.0 us,  1.9 sy,  0.0 ni, 97.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  1.0 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  1.0 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3827.9 total,   3460.4 free,    133.8 used,    233.7 buff/cache
MiB Swap:    100.0 total,    100.0 free,      0.0 used.   3535.8 avail Mem 

なお、シングルプロセス(1つのプロセス)で使えるのは 3GB になります。

base on 「Raspberry Pi 4」に8GBメモリー版、64-bit OSのベータ提供スタート | マイナビニュース

32-bit LPAEカーネルと32-bitユーザーランドを用いている32-bit版OSでも、複数のプロセスで8GBメモリーの全てを利用できる。
シングルプロセスで使えるのは3GBまでになるが、その制限の影響を受ける利用ケースは少ない。