X

News, tips, partners, and perspectives for the Oracle Solaris operating system

CPU-DR fuer Zonen

In meinem letzten Beitrag habe ich beschrieben, wie man die Memory-Konfiguration einer Zone im laufenden Betrieb veraendert.  Die naheliegende Frage ist natuerlich, ob das auch mit einer eventuellen CPU-Begrenzung funktioniert.  Die Antwort lautet natuerlich "Ja".

Manch einer wird sich fragen, warum das ueberhaupt notwendig ist, kann man Zonen doch bspw. mit dem Fair-Share Scheduler ganz hervoragend mit CPU versorgen und gleichzeitig unter Kontrolle halten.  Es gibt jedoch auch Gruende, Zonen mit exklusiven CPUs auszustatten - Lizenzierung oder  SLAs, die eine eher physische Partitionierung der Resourcen vorschreiben.  In solchen Faellen werden Zonen mit einer festen Anzahl von CPUs (oder vielmehr Strands) konfiguiert.  Und dann kann es natuerlich auch wuenschenswert sein, diese Konfiguration zu aendern, ohne die Zone dabei zu booten.  Wie das geht, soll hier beschrieben werden.

Grundsaetzlich gibt es zwei Moeglichkeiten, eine Zone mit einer festen Anzahl von CPUs zu betreiben.  Die klassische ist ein Resource Pool mit einem dazu gehoerenden Prozessorset, an den die Zone gebunden wird.  Eleganter geht das mit der Einstellung "dedicated-cpu" direkt in der Zonenkonfiguration.  In diesem zweiten Fall wird beim Start der Zone ein temporaerer Pool angelegt.  D.h. in beiden Faellen ist die Umsetzung die gleiche.  Und damit ist auch klar, wie die Loesung in beiden Faellen aussieht:  Die Konfiguration des Pools wird geaendert.  In der klassischen Variante ist diese Aenderung persistent.  In der zweiten Variante muss zusaetzlich die Konfiguration der Zone angepasst werden, damit die neue Anzahl von CPUs auch nach einem Zonen-Neustart erhalten bleibt.

Wird eine Zone mit "dedicated-cpu" konfiguriert, wird beim Start der Zone ein temporaerer Pool angelegt.  Dieser, und auch das dazu gehoerende Prozessorset, heisst idR. SUNWtmp_<zonenname>.  Das weitere Vorgehen ist damit fuer beide Faelle gleich:

Nehmen wir an, unsere Zone heisst orazone und hat derzeit 1 CPU.  Sie soll auf 2 CPUs erweitert werden.  Die aktuelle Pool-Konfiguration sieht wie folgt aus:

root@benjaminchen:~# pooladm                
system default

string

system.comment

int

system.version 1

boolean

system.bind-default true

string

system.poold.objectives wt-load

pool pool_default

int

pool.sys_id 0

boolean

pool.active true

boolean

pool.default true

int

pool.importance 1

string

pool.comment

pset

pset_default

pool SUNWtmp_orazone

int

pool.sys_id 5

boolean

pool.active true

boolean

pool.default false

int

pool.importance 1

string

pool.comment

boolean

pool.temporary true

pset

SUNWtmp_orazone

pset pset_default

int

pset.sys_id -1

boolean

pset.default true

uint

pset.min 1

uint

pset.max 65536

string

pset.units population

uint

pset.load 687

uint

pset.size 3

string

pset.comment

cpu

int

cpu.sys_id 1

string

cpu.comment

string

cpu.status on-line

cpu

int

cpu.sys_id 3

string

cpu.comment

string

cpu.status on-line

cpu

int

cpu.sys_id 2

string

cpu.comment

string

cpu.status on-line

pset SUNWtmp_orazone

int

pset.sys_id 2

boolean

pset.default false

uint

pset.min 1

uint

pset.max 1

string

pset.units population

uint

pset.load 478

uint

pset.size 1

string

pset.comment

boolean

pset.temporary true

cpu

int

cpu.sys_id 0

string

cpu.comment

string

cpu.status on-line

Wir sehen in der Definition von pset SUNWtmp_orazone, dass CPU #0 diesem zugeordnet ist. Um den Pool um CPU #1 zu erweitern, sind folgende Kommandos notwendig:
root@benjaminchen:~# poolcfg -dc 'modify pset SUNWtmp_orapset \
(uint pset.max=2)'
root@benjaminchen:~# poolcfg -dc 'transfer to pset \
orapset (cpu 1)'

Um umgekehrt diese CPU wieder aus dem Pool zu entfernen, diese Kommandos:

root@benjaminchen:~# poolcfg -dc 'transfer to pset pset_default \
(cpu 1)'
root@benjaminchen:~# poolcfg -dc 'modify pset SUNWtmp_orapset \
(uint pset.max=1)'

Nun bleibt nur noch, die korrekte Anzahl von CPUs fuer den naechsten Zonen-Neustart in die Zonenkonfiguration einzutragen.

Fuer den Fall eines eigenen Pools fuer die Zone (klassische Variante) ist in diesem Verfahren lediglich der entsprechende Poolname zu verwenden.

Literatur:

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.Captcha