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?

  1. Beim booten der Zone werden die CPUs 1-4 werden aus dem default-Pool entfernt
  2. Es wird ein temporäer Pool erstellt mit den CPUs 1-4
  3. 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