shmcntl(1M) shmcntl(1M)
NAME
shmcntl - Auswahl des Allokierungsverfahrens für gemeinsam benutzten
Speicher und dessen Justierung ("shared memory alignment")
SYNTAX
shmcntl [-a {-l|-g}] command
BESCHREIBUNG
Das Kommando shmcntl beeinflußt die Allokierungsstrategie und Justie-
rung von gemeinsam benutzten Speicher ("shared memory") auf 64 MB vir-
tuelle Speicheradressen und führt dann das Kommando command unter den
angegebenen Allokierungsbedingungen im geforderten Justierungsmodus
aus. Auf einer RM600-E kann der gemeinsam benutzten Speicher global
(round robin, gleichmäßig verteilt über alle Boards) oder lokal von
einem Board angefordert werden. Wird shmcntl ohne Optionen aufgerufen
oder explizit mit der Option -a, so wird der gemeinsam genutzte Spei-
cher auf eine 64 MB-Adresse justiert.
Justierung
Unter Justierung wird hier verstanden, daß sowohl die Startadresse als
auch die Länge des gemeinsam benutzten Speicherbereichs ganzzahlig
durch 64 MB teilbar sind.
Die Justierung von gemeinsam benutzten Speicher ist sehr wichtig für
die Reduzierung des Speicherverbrauchs im Betriebssystem, weil für den
angeforderten gemeinsamen Speicher nur einmal Adreßübersetzungstabel-
len für alle Prozesse, die den gemeinsamen Speicherbereich nutzen,
erzeugt werden müssen. Darüber hinaus können die Adreßübersetzungsta-
bellen bei Betriebssystem-Versionen kleiner V5.44 nur im physischen
Speicherbereich von 0 bis 512 MB angelegt werden; nach Erreichen die-
ser Grenze ist eine weitere Leistungssteigerung des Systems nicht mög-
lich.
Ohne eine Justierung ist der Speicherverbrauch für diese Tabellen pro-
portional zum Produkt aus gemeinsam benutzter Speichergröße und Anzahl
der Nutzerprozesse und kann in großen Konfigurationen leicht mehrere
hundert MB ausmachen. Eine solche kritische Auslastung des unteren
Speicherbereichs wird durch Justierung der gemeinsam benutzten Spei-
cherbereiche wirksam vermieden.
Eine Justierung kann auf 2 Arten erzeugt werden:
1) Explizit durch entsprechende Parametrisierung der shmat-Aufrufe
innerhalb von Applikationen [siehe shmat(2) in shmop(2)]. Dies Ver-
fahren muß direkt bei der Erstellung einer gemeinsam benutzten
Speicherapplikation angewendet werden.
2) Automatisch durch Aufruf von Applikationen unter Kontrolle von
shmcntl. Der Vorteil dieses Verfahrens ist die nachträgliche
Anwendbarkeit ohne Eingriffe in bereits bestehende Applikationen.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
shmcntl(1M) shmcntl(1M)
Zwei Aspekte sind dabei jedoch zu beachten:
a) Der Systemaufruf shmat(2) verhält sich zugunsten einer automati-
schen Justierung nicht mehr völlig konform zur Festlegung im
X/OPEN-Standard.
b) Es entsteht eine Vergrößerung des virtuellen Adreßraums bei den
betroffenen Prozessen mit folgenden Eigenarten:
- Die automatische Justierung der virtuelle Speicheradresse auf 64
MB-Grenzen wird durchgeführt, wenn bei der Belegung des gemein-
sam benutzten Speicherbereichs eine Adreßvorbelegung mit Null
oder einer durch 64 MB teilbaren Adresse erfolgt. Der Justie-
rungsmodus wird innerhalb der Prozeßgruppe des angegebenen Kom-
mandos command über fork(2) und exec(2) vererbt.
- Die Größe des gemeinsam benutzten Speicherbereichs wird dabei
gleichzeitig auf das nächst höhere Vielfache von 64 MB erwei-
tert. Dies kann zu einer erheblichen Steigerung der virtuellen
Prozeßgröße führen. Für betroffene Prozesse können daher Erhö-
hungen der "ulimit"-Grenzen erforderlich werden. Außerdem ist
systemweit gegebenenfalls der Swap-Bereich zu vergrößern.
- Bei mehreren benachbarten gemeinsam benutzten Speicherbereiche
verschieben sich durch die Justierung der Startadressen die dar-
auf folgenden Speicherbereiche.
- Innerhalb der gemeinsam benutzten Speicherbereiche sind alle
Zugriffe legal, auch auf die implizit belegten Speicherbereiche.
Daher werden eventuell Adressierungsfehler von Applikationen
dann nicht mehr gemeldet.
OPTIONEN
Keine Option angegeben:
Der gemeinsam genutzte Speicher wird gemäß der zuvor beschriebe-
nen Justierung angelegt.
-a Der gemeinsam genutzte Speicher wird gemäß der zuvor beschriebe-
nen Justierung angelegt.
-l (nur RM600-E) Der gemeinsam genutzte Speicher wird lokal von
einem Board, auf dem das Kommando command läuft, allokiert.
-g (nur RM600-E) Der gemeinsam genutzte Speicher wird gleichmäßig
verteilt (round robin) über alle Boards allokiert.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
shmcntl(1M) shmcntl(1M)
BEISPIELE
shmcntl quickdd if=file of=/dev/ios0/rstape004
In diesem Beispiel wird das angegebene Kommando quickdd mit aktivier-
ter Kontrolle der 64 MB-Justierung ausgeführt. Für die im Kommando
quickdd erzeugten gemeinsamen Speicherbereiche wird nur einmal eine
Adreßübersetzungstabelle aufgebaut, obwohl quickdd intern mehrere Pro-
zesse erzeugt (Lese- und Schreibprozeß).
Das Kommando wird in diesem Modus nur ausgeführt, wenn zuvor mit
ulimit -v der virtuelle Adreßraum > 128 MB eingestellt wird.
SIEHE AUCH
ulimit(1), quickdd(1M), swap(1M), execv(2), shmop(2).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98