Armadilloフォーラム

Linuxで認識されるメモリサイズについて

tokita.shinichi

2023年4月27日 18時25分

お世話になります。
Armadillo Base OSにおいてfreeコマンドを使用した際に、認識されるメモリサイズが2GBよりも少ないですがなぜでしょうか。
以下にfreeコマンドの結果を記載します。

armadillo:~# free
              total        used        free      shared  buff/cache   available
Mem:        1703768      352616     1303724         956       47428     1293180
Swap:       1048572           0     1048572

また、/proc/iomemを確認すると、DRAM領域においてはOP-TEEで使用される領域以外はマップされているように見えるため、上記の認識されているメモリサイズとは矛盾が生じると思うのですがどうでしょうか。

40000000-55ffffff : System RAM
  40600000-41d7ffff : Kernel code
  41d80000-41ffffff : reserved
  42000000-4220ffff : Kernel data
  52bbf000-52bd2fff : reserved
58000000-923fffff : System RAM
  62000000-91ffffff : reserved
92400000-a43fffff : reserved
a4400000-bfffffff : System RAM
  bd8f4000-bdbf4fff : reserved
  bdbf5000-bdc4cfff : reserved
  bdc4f000-bdc4ffff : reserved
  bdc50000-be1d0fff : reserved
  be250000-bfc50fff : reserved
  bfc51000-bfffffff : reserved

以上、宜しくお願い申し上げます。

コメント

at_dominique.m…

2023年4月28日 11時19分

tokita.shinichiさん

お世話になっています、
アットマークテクノのマルティネです。

> Armadillo Base OSにおいてfreeコマンドを使用した際に、認識されるメモリサイズが2GBよりも少ないですがなぜでしょうか。

そうですね、0x40000000 ~ 0xbfffffff まででみたら 2GB のメモリありますが、お気遣いのとおりに色々 reserved されています。

具体的に(3桁を省略します):
56000-57fff: OPTEE (32MB)
92400-a43ff: 確認したところ、arch/arm64/boot/dts/freescale/imx8mp.dtsi の dsp_reserved から isp0_reserved までの 300MB です。
最後のisp0_reserved の上に「used only by tuning tool, can be removed for normal case」のコメントがあって、isp0 が無効のままなので予約されてないと考えていましたが、どうやら間違っていました…

5月のリリースで修正しますが、以下のパッチで 256MB を取り戻せます:

diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
index dccf24c90862..9038ac67459d 100755
--- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
@@ -212,12 +212,6 @@ dsp_vdev0buffer: vdev0buffer@94300000 {
 			reg = <0 0x94300000 0 0x100000>;
 			no-map;
 		};
-
-		/* used only by tuning tool, can be removed for normal case */
-		isp0_reserved: isp0@94400000 {
-			no-map;
-			reg = <0 0x94400000 0 0x10000000>;
-		};
 	};
 
 	osc_32k: clock-osc-32k {
@@ -1530,7 +1524,6 @@ isp_0: isp@32e10000 {
 					power-domains = <&ispdwp_pd>;
 					id = <0>;
 					gpr = <&media_blk_ctrl>;
-					memory-region = <&isp0_reserved>;
 					status = "disabled";
 				};
 

その確認:

armadillo:~# free -m
              total        used        free      shared  buff/cache   available
Mem:           1924         336        1532           4          55        1525
Swap:          1024           0        1024

大変申し訳ございません、連絡助かりました!
残りの dsp の領域(32MB)も実際に使われているかどうかを確認して、取り戻せそうでしたら取り戻します。

最後に大きい領域のは「 62000000-91ffffff : reserved」で 768MB がありますが、linux,cma の VPU で使える領域で「reusable」になっていて、reserved されても普通のメモリとして使えます。
他の小さい reserved 領域を一つ一つ確認するに少し時間かかりますが、これから確認致します。カーネルの領域を引いたら後は 40MB ぐらいの予約領域はどこかにありますね。(1924+TEE(32)+dsp(上記の残り32MB)+kernel(~20)= 2008MB)

よろしくお願いします。

tokita.shinichi

2023年5月1日 18時39分

お世話になっております。
ご確認ありがとうございます。
こちらでもisp0の256MB分を認識できることを確認できました。

以上、よろしくお願いいたします。