Das leistungsstarke Tool cgroup im Kernel kann nicht nur die durch NameSpace isolierten Ressourcen begrenzen, sondern auch Gewichte für Ressourcen festlegen, die Nutzung berechnen usw. Was ist cgroupDer vollständige Name der Kontrollgruppe lautet Kontrollgruppen Kontrollgruppen: Kontrollgruppen sind in den Linux-Kernel integriert. Sie fassen Prozesse (Aufgaben) in Gruppen zusammen, legen Berechtigungen für Gruppen fest und steuern Prozesse. Es kann als das Konzept von Benutzern und Gruppen verstanden werden. Ein Benutzer erbt die Berechtigungen der Gruppe, zu der er gehört. cgroups ist ein Mechanismus im Linux-Kernel. Dieser Mechanismus kann eine Reihe von Aufgaben und Unteraufgaben entsprechend bestimmten Verhaltensweisen integrieren oder trennen und ein Framework für eine einheitliche Ressourcensteuerung entsprechend den verschiedenen Ebenen der Ressourcenaufteilung implementieren. cgroup kann die vom Prozess benötigten physischen Ressourcen, einschließlich CPU, Speicher und IO, steuern, begrenzen und isolieren und bietet so die grundlegendste Garantie für die Containervirtualisierung. Es ist ein Verwaltungstool zum Erstellen einer Reihe von Docker-Virtualisierungen Merkmale der Entwicklung von Cgroups
Die Rolle der cgroupDer cgroup-Kernel verwaltet Prozessressourcen über Hooks und bietet eine einheitliche Schnittstelle für den Übergang von der Ressourcensteuerung eines einzelnen Prozesses zu virtuellen Karten auf Betriebssystemebene. Cgroup bietet vier Funktionen:
Glossar
Beziehung: Eine Kontrollgruppe kann mehrere Aufgaben haben, ein Subsystem entspricht der Art der Steuerung von Kontrollgruppenbeschränkungen, es können mehrere Kontrollgruppen in einer Hierarchie vorhanden sein und ein System kann mehrere Hierarchien haben. Vier Regeln des HierarchiebaumsDer herkömmliche Prozessstart verwendet init als Stammknoten, auch übergeordneter Prozess genannt, der untergeordnete Prozesse als untergeordnete Knoten erstellt, und jeder untergeordnete Knoten kann auch neue untergeordnete Knoten erstellen, wodurch eine Baumstruktur entsteht. Die Struktur der cgroup ist ähnlich. Untergeordnete Knoten erben die Eigenschaften ihrer übergeordneten Knoten. Der größte Unterschied zwischen ihnen besteht darin, dass der hierarchische Baum, der aus der Cgroup des Systems besteht, mehrere Existenzen zulässt. Wenn das Prozessmodell ein Baum ist, der mit init als Stammknoten gebildet wird, besteht das Cgroup-Modell aus mehreren hierarchischen Bäumen. Wenn nur ein hierarchischer Baum vorhanden ist, unterliegen alle Aufgaben denselben Beschränkungen eines Subsystems. Dies führt zu Problemen bei Aufgaben, die solche Beschränkungen nicht benötigen. 1. Ein oder mehrere Subsysteme können an dieselbe Hierarchie angehängt werden
2. Ein Subsystem kann an mehrere Hierarchien angehängt werden, jedoch nur an Hierarchien, die keine Subsysteme haben. Wie in der Abbildung gezeigt, wird das CPU-Subsystem zuerst an den Hierarchiebaum A angehängt und kann nicht gleichzeitig an den Hierarchiebaum B angehängt werden, da B bereits ein Mem-Subsystem hat. Wenn weder B noch A über Subsysteme verfügen, kann das CPU-Subsystem gleichzeitig an die Hierarchiebäume A und B angehängt werden. Das bedeutet, dass, wenn in mehreren hierarchischen Bäumen keine Subsysteme vorhanden sind, diesen hierarchischen Bäumen nacheinander ein CPU-Subsystem hinzugefügt werden kann. 3. Ein Prozess (Task) kann nicht zu verschiedenen Kontrollgruppen in derselben Hierarchie gehören Jedes Mal, wenn das System eine neue Hierarchie erstellt, wird die Standard-Cgroup, die die Initialisierung der neuen Hierarchie darstellt, als Stamm-Cgroup bezeichnet. Für Ihre eigene erfolgreiche Hierarchie kann eine Aufgabe nur in einer Cgroup dieser Hierarchie vorhanden sein, was bedeutet, dass es in einer Hierarchie nicht zwei identische Aufgaben geben kann, sie jedoch in anderen Cgroups in verschiedenen Hierarchien vorhanden sein können. Wenn Sie eine Aufgabe in einer Kontrollgruppe mit hierarchischem Baum zu einer anderen Kontrollgruppe im hierarchischen Baum hinzufügen möchten, wird sie aus der Kontrollgruppe entfernt, in der sich die vorherige Aufgabe befindet. Wie im obigen Beispiel gezeigt: httpd wurde zu cg1 in Hierarchie A hinzugefügt und seine PID ist 58950. Zu diesem Zeitpunkt kann dieser httpd-Prozess nicht in cg2 eingefügt werden, da sonst der httpd-Prozess in cg1 gelöscht wird. Er kann jedoch in die Kontrollgruppe cg3 in Hierarchie B eingefügt werden. Tatsächlich dient es dazu, Prozesskonflikte zu vermeiden. Beispielsweise gibt es in cg1 im hierarchischen Baum A einen httpd-Prozess. Zu diesem Zeitpunkt beträgt die CPU-Auslastungsgrenze für cg1 30 % und die CPU-Auslastungsgrenze für cg2 50 %. Wenn der httpd-Prozess zu cg2 hinzugefügt wird, tritt ein Konflikt bei der CPU-Auslastungsgrenze von httpd auf. 4. Der neu gegabelte untergeordnete Prozess befindet sich im Anfangszustand in derselben Kontrollgruppe wie der übergeordnete Prozess Ein neuer untergeordneter Prozess (child_task), der von der Prozessaufgabe geöffnet wird, befindet sich standardmäßig in derselben Kontrollgruppe wie die ursprüngliche Aufgabe, die child_task kann jedoch in andere Kontrollgruppen im Hierarchiebaum verschoben werden. Wenn die Fork gerade abgeschlossen ist, sind der übergeordnete Prozess und der untergeordnete Prozess völlig unabhängig Wie in der Abbildung gezeigt, wird beim Aufrufen des Prozesses httpd58950 ein weiterer untergeordneter Prozess httpd58951 ausgegeben. Zu diesem Zeitpunkt befinden sich httpd58951 und httpd58950 standardmäßig beide in cg1, und ihre Beziehung ist ebenfalls ein übergeordneter/untergeordneter Prozess. httpd58951 kann zu cg2 verschoben werden, und ihre Beziehung wird zu diesem Zeitpunkt geändert, und sie werden beide zu unabhängigen Prozessen. TeilsystemWas genau kann ein Subsystem steuern? Überprüfen Sie dies wie folgt [root@localhost ~]# yum -y installiere libcgroup-tools Nach der Installation dieses Tools können Sie es mit dem Befehl cgroup anzeigen Listen Sie alle Cgroup-Kontrollgruppen im System auf [root@localhost ~]# lscgroup net_cls,net_prio:/ Gefrierschrank:/ riesigeslb:/ CPU, CPU-Zugriff:/ cpu,cpuacct:/Maschine.Slice cpu,cpuacct:/Benutzer.slice cpu,cpuacct:/system.slice cpu,cpuacct:/system.slice/netzwerk.dienst cpu,cpuacct:/system.slice/docker.service ... Zeigen Sie die Hardware an, die das Subsystem steuern kann [root@localhost ~]# lssubsys -a CPU-Satz CPU, CPU-Zugriff Erinnerung Geräte Gefrierschrank net_cls,net_prio Abonnieren Leistungsereignis thomas_s pids Wie oben zu sehen ist, gibt es ein entsprechendes Verzeichnis, [root@localhost ~]# ll /sys/fs/cgroup/ gesamt 0 drwxr-xr-x. 5 root root 0 25. März 04:50 blkio lrwxrwxrwx. 1 root root 11. März 25 04:50 cpu -> cpu,cpuacct lrwxrwxrwx. 1 root root 11. März 25 04:50 cpuacct -> cpu,cpuacct drwxr-xr-x. 5 root root 0 25. März 04:50 cpu,cpuacct drwxr-xr-x. 2 root root 0 25. März 04:50 cpuset drwxr-xr-x. 5 root root 0 25. März 04:50 Geräte drwxr-xr-x. 2 root root 0 25. März 04:50 Gefrierschrank drwxr-xr-x. 2 root root 0 25. März 04:50 hugetlb drwxr-xr-x. 5 root root 0 25. März 04:50 Speicher lrwxrwxrwx. 1 root root 16. März 25 04:50 net_cls -> net_cls,net_prio drwxr-xr-x. 2 root root 0 25. März 04:50 net_cls,net_prio lrwxrwxrwx. 1 root root 16. März 25 04:50 net_prio -> net_cls,net_prio drwxr-xr-x. 2 root root 0 25. März 04:50 perf_event drwxr-xr-x. 5 root root 0 25. März 04:50 pids drwxr-xr-x. 5 root root 0 25. März 04:50 systemd Sie können sehen, dass der Inhalt des Verzeichnisses mehr ist als das, was der Befehl anzeigt, da es mehrere Softlink-Dateien gibt # Die folgenden drei gehören alle zu cpu,cpuacct CPU -> CPU, CPU-Zugriff cpuacct -> CPU, cpuacct CPU, CPU-Zugriff # Die folgenden drei gehören alle zu net_cls, net_prio net_cls -> net_cls,net_prio net_prio -> net_cls,net_prio net_cls,net_prio Was stellen die Inhalte dar, die das Subsystem steuern kann?
Hinweis: Bisher gibt es kein Tool, mit dem man die Größe der Containerfestplatte begrenzen kann. Man kann lediglich die Lese- und Schreibfrequenz der Festplatte begrenzen. So funktionieren KontrollgruppenÜberprüfen Sie die Aufgabendatei in der CPU-Steuerung der Kontrollgruppe, in der die Steuerung der CPU der Prozesse in der Datei gespeichert ist. Wenn Sie einen Prozess zur Steuerung der CPU hinzufügen möchten, fügen Sie einfach die PID des Prozesses zur Aufgabendatei hinzu, einschließlich anderer Steuerungen für Hardwareressourcen. [root@localhost ~]# cat /sys/fs/cgroup/cpu/tasks 1 2 4 5 6 7 8 9 ... 68469 68508 68526 68567 In einer Produktionsumgebung wird es automatisch erhöht, da es sich im Kernel befindet. Das eigentliche Funktionsprinzip von cgroup ist Hook. Die Implementierung von cgroup besteht im Wesentlichen darin, den Systemprozess anzuhängen. Wenn der Task-Prozess ausgeführt wird und eine bestimmte Ressource entworfen wird, wird das an den Hook angeschlossene Subsystem ausgelöst, um eine Ressourcenerkennung durchzuführen. Schließlich wird die entsprechende Technologie verwendet, um Ressourcen zu begrenzen und Prioritäten entsprechend unterschiedlicher Ressourcenkategorien zuzuweisen. Wie ist der Hook implementiert? Einfach ausgedrückt legt die Datenstruktur zum Verwalten von Task-Prozessen in Linux für jede Aufgabe in der Cgroup ein Schlüsselwort fest und verweist mit dem Schlüsselwort auf den Hook, der als Zeiger bezeichnet wird. Wenn einer Aufgabe nur eine Zeigerstruktur entspricht, kann eine Zeigerstruktur von mehreren Aufgaben verwendet werden. Sobald ein Zeiger den Inhalt der eindeutigen Zeigerdaten liest, wird die Aufgabe ausgelöst und die Ressourcensteuerung kann durchgeführt werden. Bei der tatsächlichen Verwendung müssen Benutzer mount verwenden, um die cgroup-Kontrollgruppe zu mounten Im Verzeichnis können Sie sehen, dass beispielsweise das httpd-Programm eine PID-Nummer von 69060 hat [root@localhost ~]# yum -y installiere httpd^C [root@localhost ~]# systemctl start httpd^C [root@localhost ~]# netstat -anput | grep 80 tcp6 0 0 :::80 :::* LISTEN 69060/httpd Überprüfen Sie die Mounts-Datei in ihrem PID-Verzeichnis, das eine große Anzahl von Cgroup-Mounts enthält. Sie können das Verzeichnis hinter jeder C-Gruppe sehen, z. B. [root@localhost ~]# cat /proc/69060/mounts rootfs / rootfs rw 0 0 /dev/mapper/centos-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=914476k,nr_inodes=228619,mode=755 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0 ... cgroup /sys/fs/cgroup/systemd cgroup rw,seclabel,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,seclabel,nosuid,nodev,noexec,relatime,net_prio,net_cls 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,seclabel,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/hugetlb cgroup rw,seclabel,nosuid,nodev,noexec,relatime,hugetlb 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/Geräte cgroup rw,seclabel,nosuid,nodev,noexec,relatime,Geräte 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,seclabel,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,seclabel,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/pids cgroup rw,seclabel,nosuid,nodev,noexec,relatime,pids 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,seclabel,nosuid,nodev,noexec,relatime,perf_event 0 0 ... So wird cgroup durch Mount gesteuert. Alle Programme sind so. Nachdem alle Systeme auf dem Subsystem die Dateien gemountet haben, können sie cgroup und Hierarchiebaum zur Verwaltung wie das Betriebssystem betreiben, einschließlich Berechtigungsverwaltung und Unterdateisysteme. Außer dem cgroup-Dateisystem bietet der Kernel keine weiteren Operationen für den cgroup-Zugriff. Wenn Sie cgroup betreiben möchten, müssen Sie mount verwenden, um an einer cgroup-Kontrollgruppe festzuhalten. RessourcenkontrollvorgängeWir müssen wissen, wie wir jede Hardwareressource steuern. wie: Die spezifische Bedeutung jedes Elements im CPU-Verzeichnis der Cgroup-Gruppe sind die Details der spezifischen Steuerung der CPU [root@localhost ~]# cd /sys/fs/cgroup/cpu [root@localhost cpu]# ls cgroup.clone_children cpuacct.stat cpu.cfs_quota_us cpu.stat system.slice cgroup.event_control cpuacct.usage cpu.rt_period_us machine.slice Aufgaben cgroup.procs cpuacct.usage_percpu cpu.rt_runtime_us Benachrichtigung bei Freigabe Benutzer.slice cgroup.sane_behavior cpu.cfs_perioden_us cpu.shares release_agent Diese spezifischen Verwendungsmethoden werden im nächsten Artikel einzeln erläutert Einschränkungen der Docker-Befehlszeile-c/--cpu-shares: CPU-Priorität begrenzen -m/--memory: Speichernutzung begrenzen --memory-swap: Größe von Speicher + Swap begrenzen --blkil-weight Bit/s/IOP --device-read-bps --device-write-bps --device-read-iops --device-write-iops Spezifische Verwendung: CPU, Speicher, blkio Die cgroup-Verzeichnisstruktur ist wie folgt Die standardmäßigen Nicht-Docker-Prozesssteuerungen für bestimmte Hardwareressourcen werden im Verzeichnis Die Steuerung des von Docker generierten Containers wird im Verzeichnis Dies ist das Ende dieses Artikels mit der detaillierten Erklärung von Cgroup, dem Kernprinzip von Docker. Weitere Informationen zum Kernprinzip von Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Beispiel für die Verwendung von UserMap in IMG
>>: So verwenden Sie CSS, um mehrere Bilder horizontal in der Mitte anzuzeigen
Vorwort: Wenn wir Vue verwenden, verwenden und sc...
Inhaltsverzeichnis 1. Titel 2. Code 3. Ergebnisse...
In HTML-Seiten müssen wir manchmal automatisch ein...
Nehmen Sie als Beispiel drei aufeinanderfolgende ...
MySQL ist eine sehr leistungsfähige relationale D...
React tsx generiert einen zufälligen Bestätigungs...
Inhaltsverzeichnis Herkunft Umweltinformationen F...
Inhaltsverzeichnis Speicherpoolübersicht 1. Nginx...
Inhaltsverzeichnis Vorwort Einführung in Closures...
1. Bedeutung der Partitionstabelle Eine Partition...
Um beispielsweise die gestern neu registrierten B...
Trennlinien sind eine gängige Gestaltungsart auf ...
Inhaltsverzeichnis Schritte zum Erstellen von TCP...
Kontrollkästchen sind auf Webseiten sehr verbreit...
In diesem Artikel wird der spezifische Code des o...