Ich wurde in Bezug auf diesen Blog-Eintrag gefragt, was es für Zoneneigenschaften gibt, welche man für Regelmentierungen verwenden kann.
Als ersten möchte ich zeigen, wie man den Hauptspeicher limitieren kann.
root@global$ zonecfg -z myzone zonecfg:myzone> add capped-memory zonecfg:myzone:capped-memory> set physical=500m zonecfg:myzone:capped-memory> set swap=1g zonecfg:myzone:capped-memory> set locked=100m zonecfg:myzone:capped-memory> end zonecfg:myzone> exit |
- physical
Hierbei handelt es sich um eine Limitierung des physischen Hauptspeicher. Wenn mehr Speicher angefordert wird, dann kann dieser ausgelagert werden.
Eine Zone kann diesen Wert überschreiten und mehr Speicher anfordern.
- swap
Das ist eine Begrenzung des virtuellen Speicher, d.h. eine Zone kann nicht mehr Speicher anfordern. Wenn ein Prozess in der Zone mehr Speicher anfordert, so schlägt diese Speicheranforderung fehl.
- locked
Der allokierte Speicher ein Zone kann bis auf diesen Wert ausgelagert werden
Neben dem Hauptspeicher kann man auch die CPUs regelmentieren. Man dedizierter CPUs zuweisen oder das Scheduling verändern. Hier gibt eine gute Übersicht, bzgl. der Definition der CPU Shares.
root@global$ zonecfg -z myzone zonecfg:myzone> add dedicated-cpu zonecfg:myzone:dedicated-cpu> set ncpus=1-4 zonecfg:myzone:dedicated-cpu> end zonecfg:myzone> exit |
Was passiert nun?
- Beim booten der Zone werden die CPUs 1-4 werden aus dem default-Pool entfernt
- Es wird ein temporäer Pool erstellt mit den CPUs 1-4
- Beim stoppen der Zone werden die CPUs 1-4 wieder dem default-Pool zur verfügung gestellt.
Man kann auch sagen, dass eine Zone z.B. maximal 2,5 CPUs benutzen kann. Das sieht wie folgt aus:
root@global$ zonecfg -z myzone zonecfg:myzone> add capped-cpu zonecfg:myzone:capped-cpu> set ncpus=2.5 zonecfg:myzone:capped-cpu> end zonecfg:myzone> exit |
Nun möchte ich zeigen, wie man eine Zone 200 CPU-Shares und die FSS (Fair Share Scheduling) Klasse zuweist
root@global$ zonecfg -z myzone zonecfg:myzone> set cpu-shares=200 zonecfg:myzone> set scheduling-class=FSS zonecfg:myzone> exit |
Als letztes Quota zum Thema CPU möchte ich zeigen, wie man die Anzahl der Threads/Prozesse begrenzt. Die folgende Zone kann maximal 250 Threads ausführen. Ein einzelner Prozess ohne Thredas zählt als ein Thread.
root@global$ zonecfg -z myzone zonecfg:myzone> add rctl zonecfg:myzone:rctl> set name=zone.max-lwps zonecfg:myzone:rctl> add value (priv=privileged,limit=250,action=deny) zonecfg:myzone:rctl> end |
Man kann auf diese Weise auch noch andere Resourcen kontrollieren. Hier findet man eine Übersicher über die Resource Controls
Für Zonen kann es auch interssant sein, den Plattenpatz zu begrenzen. Da in Open Solaris zfs das default-Dateisystem ist, kann man Quotas und Reservations über die entsprechenden zfs-Eigenschaften machen. Die Wurzel der Zone liegt auf dem Dateisystem zones/myzone
root@global$ zonecfg -z myzone zfs set quota=10g zones/myzone root@global$ zonecfg -z myzone zfs set reservation=5g zones/myzone |