RAM

Aus Vu+ WIKI
Wechseln zu: Navigation, Suche

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:

  • Der System RAM Bereich von 0x00000000 bis 0x3fffffff umfasst somit 1.073.741.824 Bytes - also 1GB.
  • Der System RAM Bereich von 0x80000000 bis 0xbfffffff umfasst ebenfalls 1.073.741.824 Bytes - also 1GB.
  • Der Bereich für bmem.0 umfasst 663.748.608 Bytes (633MB)
  • Der Bereich für bmem.1 umfasst 523.239.424 Bytes (499MB)

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