Hauptmenü öffnen

Vu+ WIKI β

RAM

Version vom 31. Oktober 2022, 09:41 Uhr von Rdamas (Diskussion | Beiträge) (Erläuterungen zum nicht angezeigten RAM in den 4K-Boxen)

RAM

Random-Access-Memory, zu Deutsch, Speicher mit wahlfreiem/direktem Zugriff, Direktzugriffsspeicher, abgekürzt RAM, ist ein Informations-Speicher, der besonders bei Computern als Arbeitsspeicher Verwendung findet.

Besonderheiten bei den 4K-Boxen mit ARM-Prozessor

Der SoC von Broadcom, der in den 4K-Boxen von VU+ verbaut ist, zweigt einen Teil des Hauptspeichers für Audio-/Video-Buffering-Zwecke ab. Dieser Speicher steht dem Betriebssystem für andere Aufgaben nicht zur Verfügung und wird konsequent auch nicht mit den bekannten Tools angezeigt (free, cat /proc/meminfo, top, htop, ...).

Zum Beispiel wird für die Vu+ Solo 4k, in der 2 GB RAM verbaut sind, folgendes angezeigt:

 # free -h
               total        used        free      shared  buff/cache   available
 Mem:           887M        156M         94M        656K        637M        709M
 Swap:            0B          0B          0B

Dem vermeintlich fehlenden Speicher kommen wir in folgende Dateien und Ausgaben auf die Spur:

In /var/log/messages oder mit dem Befehl dmesg wird direkt beim Booten folgendes angezeigt (umgebrochen, um's lesbarer zu machen):

 [    0.000000] Memory: 892100K/2097152K available 
      (5849K kernel code, 
        320K rwdata, 
       1904K rodata, 
        248K init, 
        184K bss, 
    1188668K reserved, 
      16384K cma-reserved, 
     671744K highmem)

Hier sieht man schon, dass von den 2GB (2097152K) der Box dem Linux nur knapp 1GB (892100K) zur Verfügung stehen. Mehr als die Hälfte (1188668K) sind reserviert, und zwar vom Chipsatz.

Verantwortlich dafür sind die Parameter, mit denen der Kernel initialisiert wird (direkt darüber, wieder umgebrochen):

 [    0.000000] Kernel command line:
 root=/dev/mmcblk0p4 rootwait rw rootflags=data=journal debug
 coherent_pool=2M
 bmem=633m@387m
 bmem=499m@2573m

Die beiden "bmem"-Parameter zwacken Speicher für den Broadcom-Chipsatz ab - es gibt dafür einen Treiber linux/drivers/soc/brcmstb/bmem.c, der diesen Parameter dafür auswertet. Im Code für diesen Treiber finden wir auch, was die Abkürzung "bmem" bedeutet:

 /***********************************************************************
  * BMEM (reserved A/V buffer memory) support
  ***********************************************************************/

Die Speicherbereiche sind unter /proc/iomem aufgeführt:

 # cat /proc/iomem
 00000000-3fffffff : System RAM
    00008000-0079a7ff : Kernel code
    007da000-0085861b : Kernel data
    18300000-3fbfffff : bmem.0
 80000000-bfffffff : System RAM
    a0d00000-bfffffff : bmem.1
 ...

Noch ein wenig rechnen und wir erhalten:

  • 0x3fffffff ist dezimal 1073741823 - also 1GB.
  • 0xbfffffff - 0x80000000 ist ebenfalls dezimal 1073741823 - also 1GB.
  • der Bereich für bmem.0 ist 663748607 Bytes groß (633MB)
  • der Bereich für bmem.1 entspricht 523239424 Bytes (499MB)

Damit sollte das Geheimnis des fehlenden Speichers gelüftet sein.