# was macht /proc/sys/kernel/shmmax ? [erklärt]

## hitachi

Hallo,

Wenn ich cinelerra starte wird mir mitgeteilt:

 *Quote:*   

> void MWindow::init_shm(): WARNING /proc/sys/kernel/shmmax is 0x2000000, which is too low.
> 
> Before running Cinelerra do the following as root:
> 
> echo "0x7fffffff" > /proc/sys/kernel/shmmax

 

Was macht die shmmax Datei und was wird durch den Befehl verändert? Ist das sicher?

DankeLast edited by hitachi on Wed Apr 23, 2008 6:39 am; edited 1 time in total

----------

## Mr_Maniac

Hmm... Ich kann ATM leider nicht nachschauen, aber mein Tipp wäre, dass es die Größe einer "RAM-Disk" ändert.

Also nicht direkt eine RAM-Disk, aber wenn du mal mit "df -h" nachschaust, gibt es dort einen eintrag /dev/shm (wenn ich mich recht erinnere).

Wenn diese Hex-Angaben die größe in Bits bestimmen (ich weiß es leider nicht genau), wären 0x2000000 gerade mal 4MB (was wirklich nicht allzu viel ist).

0x7fffffff wären immerhin 256 MB.

EDIT: Ah, gerade etwas gefunden

 *Quote:*   

> shmmax controls the maximum amount of memory to be allocated for shared memory, 

 

Auf: http://ps-ax.com/shared-mem.html

----------

## hitachi

Hallo,

Danke für Deine Antwort. 

```
df -h
```

 *Quote:*   

> shm                   1,5G     0  1,5G   0% /dev/shm

 

```
vim /proc/sys/kernel/shmmax
```

Hier gibt es nur einen Eintrag. *Quote:*   

> 33554432

 Kann man diesen Wert verändern? Ist das sicher? Ist grösser besser?

Gruß

----------

## c_m

ja kann man. Allerdings solltes dafür auch nen konkretes COnfigfile geben (von welchem mir grade der Name nicht einfällt  :Wink:  )

Was sollte daran unsicher sein? Der wert bestimt AFAIk lediglich die größe des RAMs, den du wie ein normales Filesystem mounten und nutzen kannst. Bei uns im Betrieb ist SAP z.B. ganz heiß drauf und verbrät damit unsäglich große Mengen an Ram ^^

Ob größer besser ist kann ich nicht genau sagen. Wenn ne applikation möglichst viel braucht wird größer wohl auch besser sein ;->

An sonsten bleibt der Ram frei (wenn du z.B. 1,5GB reserviert hast, aber der shared memory nicht genutzt wird, ist afaik auch der RAM für anderes Zeugs frei),

----------

## Randy Andy

Hai Hitachi,

also ich folge stets dem Vorschlag von Cinelerra, damit der lästige Hinweis verschwindet, und weil das gut für Cinelerras Performance sein soll.

Um den SHMMAX (shared memory segment) Wert permanent auf 2GB zu setzen oder 2147483648 KB = 0x7fffffff (Hex-Wert, sind übrigens genau 7f's, lässt sich leichter eingeben!) gebe ich einmalig folgendes auf der Kommandozeile ein, als root versteht sich.

# echo "kernel.shmmax=0x7fffffff" >> /etc/sysctl.conf

Verwendest du statt dessen echo "0x7fffffff" > /proc/sys/kernel/shmmax, ist die Einstellung nach dem nächsten reboot futsch, aber zum Testen ggf. erwünscht, bzw zum dynamischen verändern.

Solange du diesen Wert verwendest ist das sicher und problemlos, du solltest ihn nur nicht noch mehr vergrößern, ich glaub der Kernel kann auf'm 32Bit system nicht mehr als 4GB verwalten, und ihn Höher als 2G zu schrauben bringt der Performance auch keinen Gewinn. Mein Tipp: lass ihn so.

Dieser Wert hat auch nichts mit dem physikalischen Speicherausbau zu tun, sondern dient nur der Zuweisung des Kernels zum Verwalten der logischen Speicherseiten.

Good luck, Andy.

----------

## hitachi

Hallo,

nachdem ich folgendes eingegeben habe, bekomme ich keine Fehlermeldung mehr.

```
echo "kernel.shmmax=0x7fffffff" >> /etc/sysctl.conf
```

Danke Randy Andy.

Dennoch sehen ich bei df -h keine Unterschiede: *Quote:*   

> shm                   1,5G     0  1,5G   0% /dev/shm

 Danke an alle!

----------

## c_m

hast du zwischendrin mal rebootet oder /de v/shm remountet?

allein das ändern der configdatei reicht natürlich nicht ^^

----------

## hitachi

 *c_m wrote:*   

> hast du zwischendrin mal rebootet oder /de v/shm remountet?
> 
> allein das ändern der configdatei reicht natürlich nicht ^^

 Ja habe ich. Mein Fehler, dass ich das nicht geschrieben habe. Cinelerra gibt auch keine Fehlermeldung mehr aus.

----------

## DarKRaveR

 *hitachi wrote:*   

> Hallo,
> 
> nachdem ich folgendes eingegeben habe, bekomme ich keine Fehlermeldung mehr.
> 
> ```
> ...

 

Das liegt daran, daß die beiden nur bedingt etwas miteinander zu tun haben. Normalerweise ist /dev/shm ein tmpfs, wobei die Größe das Maximum des tmpfs darstellt. Üblicherweise werden dort posix semaphores und shared memory reingepackt, eben bis zu einer Größe von 1.5GB in deinem Fall.

shmmax ist ein hardlimit und besagt, das ein SYSV Shared Memory Segment maximale shmmax bytes groß sein darf und alle SYSV shared memmory Segmente dürfen nicht größer als shmall Pages sein (Wobei eine Page üblicherweise 4kb groß ist). SYSV Shared Memory wird auch in ein 'unsichtbares' tmpfs gelegt. Insofern ist es nicht verwunderlich, daß eine Veränderung des Hardlimits für die Segmentegröße keine Auswirkungen auf das tmpfs für Posix Shared Memory hat.

----------

