Dalam angsuran terakhir dari seri artikel cgroups empat bagian saya, saya membahas integrasi cgroup dengan systemd. Pastikan Anda juga melihat bagian satu, dua, dan tiga dalam seri ini.
Grup dengan systemd
Secara default, systemd membuat cgroup baru di bawah system.slice
untuk setiap layanan yang dipantaunya. Kembali ke host OpenShift Control Plane kami, menjalankan systemd-cgls
menunjukkan layanan berikut di bawah system.slice
(keluaran dipotong untuk singkatnya):
└─system.slice
├─sssd.service
├─lvm2-lvmetad.service
├─rsyslog.service
├─systemd-udevd.service
├─systemd-logind.service
├─systemd-journald.service
├─crond.service
├─origin-node.service
├─docker.service
├─dnsmasq.service
├─tuned.service
├─sshd.service
├─NetworkManager.service
├─dbus.service
├─polkit.service
├─chronyd.service
├─auditd.service
└─[email protected]
Anda dapat mengubah perilaku ini dengan mengedit file layanan systemd. Ada tiga opsi yang berkaitan dengan manajemen cgroup dengan systemd:
- Mengedit file layanan itu sendiri.
- Menggunakan file drop-in.
- Menggunakan
systemctl set-property
perintah, yang sama dengan mengedit file secara manual, tetapisystemctl
membuat entri yang diperlukan untuk Anda.
Saya membahasnya secara lebih rinci di bawah ini.
Mengedit file layanan
Mari kita edit file unit itu sendiri. Untuk melakukan ini, saya membuat file unit yang sangat sederhana yang menjalankan skrip:
[Service]
Type=oneshot
ExecStart=/root/generate_load.sh
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Skrip bash hanya memiliki dua baris:
#!/bin/bash
/usr/bin/cat /dev/urandom > /dev/null &
Saat Anda memeriksa keluaran systemd-cgls
, Anda melihat bahwa layanan baru kami bersarang di bawah system.slice
(keluaran terpotong):
└─system.slice
├─cat.service
├─tuned.service
├─sshd.service
├─NetworkManager.service
├─sssd.service
├─dbus.service
│ └─[email protected]
└─systemd-logind.service
Apa yang terjadi jika saya menambahkan baris berikut ke file layanan systemd?
Slice=my-beautiful-slice.slice
Keluaran dari systemd-cgls
menunjukkan sesuatu yang penasaran. cat.service
file sekarang sangat bersarang:
Control group /:
├─my.slice
│ └─my-beautiful.slice
│ └─my-beautiful-slice.slice
│ └─cat.service
│ └─4010 /usr/bin/cat /dev/urandom
Kenapa ini? Jawabannya berkaitan dengan cara systemd menginterpretasikan kelompok-kelompok bersarang. Anak-anak dideklarasikan dengan cara berikut:
. Karena systemd mencoba membantu, jika orang tua tidak ada, systemd membuatnya untuk Anda. Jika saya menggunakan garis bawah _
bukannya tanda hubung -
hasilnya akan seperti yang Anda harapkan:
Control group /:
├─my_beautiful_slice.slice
│ └─cat.service
│ └─4123 /usr/bin/cat /dev/urandom
Menggunakan file drop-in
File drop-in untuk systemd cukup sepele untuk diatur. Mulailah dengan membuat direktori yang sesuai berdasarkan nama layanan Anda di /etc/systemd/system
. Dalam cat
contoh, jalankan perintah berikut:
# mkdir -p /etc/systemd/system/cat.service.d/
File-file ini dapat diatur sesuai keinginan Anda. Mereka ditindaklanjuti berdasarkan urutan numerik, jadi Anda harus memberi nama file konfigurasi Anda seperti 10-CPUSettings.conf
. Semua file dalam direktori ini harus memiliki ekstensi file .conf
dan mengharuskan Anda untuk menjalankan systemctl daemon-reload
setiap kali Anda menyesuaikan salah satu file ini.
Saya telah membuat dua file drop-in untuk menunjukkan bagaimana Anda dapat membagi konfigurasi yang berbeda. Yang pertama adalah 00-slice.conf
. Seperti yang terlihat di bawah, ia menyiapkan opsi default untuk irisan terpisah untuk cat
layanan:
[Service]
Slice=AWESOME.slice
MemoryAccounting=yes
CPUAccounting=yes
File lain mengatur jumlah CPUShares, dan itu disebut 10-CPUSettings.conf
.
[Service]
CPUShares=256
Untuk menunjukkan bahwa metode ini berfungsi, saya membuat layanan kedua di irisan yang sama. Untuk memudahkan membedakan prosesnya, skrip kedua sedikit berbeda:
#!/bin/bash
/usr/bin/sha256sum /dev/urandom > /dev/null &
Saya kemudian membuat salinan cat
file, mengganti skrip dan mengubah nilai CPUShares:
# sed 's/load\.sh/load2\.sh/g' cat.service > sha256sum.service
# cp -r cat.service.d sha256sum.service.d
# sed -i 's/256/2048/g' sha256sum.service.d/10-CPUSettings.conf
Terakhir, muat ulang daemon dan mulai layanan:
# systemctl daemon-reload
# systemctl start cat.service
# systemctl start sha256sum.service
[ Pembaca juga menyukai:Apa yang terjadi di balik layar wadah Podman tanpa akar? ]
Alih-alih menunjukkan kepada Anda output dari top
, sekarang adalah saat yang tepat untuk memperkenalkan Anda ke systemd-cgtop
. Ini bekerja dengan cara yang mirip dengan top
biasa kecuali itu memberi Anda perincian per irisan, dan sekali lagi oleh layanan di setiap irisan. Ini sangat membantu dalam menentukan apakah Anda memanfaatkan cgroups secara umum di sistem Anda dengan baik. Seperti yang terlihat di bawah, systemd-cgtop
menunjukkan agregasi untuk semua layanan dalam irisan tertentu sebagai bagian dari sistem keseluruhan dan pemanfaatan sumber daya setiap layanan dalam irisan:
Menggunakan systemctl set-property
Metode terakhir yang dapat digunakan untuk mengkonfigurasi cgroups adalah systemctl set-property
memerintah. Saya akan mulai dengan file layanan dasar md5sum.service
:
[Service]
Type=oneshot
ExecStart=/root/generate_load3.sh
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
Slice=AWESOME.slice
[Install]
WantedBy=multi-user.target
Menggunakan systemctl set-property
perintah menempatkan file di /etc/systemd/system.control
. File-file ini tidak boleh diedit dengan tangan. Tidak setiap properti dikenali oleh set-property
perintah, jadi Slice
definisi dimasukkan ke dalam file layanan itu sendiri.
Setelah saya menyiapkan file unit dan memuat ulang daemon, saya menggunakan systemctl
perintah yang mirip dengan berikut ini:
# systemctl set-property md5sum.service CPUShares=1024
Ini membuat file drop-in untuk Anda yang terletak di /etc/systemd/system.control/md5sum.service.d/50-CPUShares.conf
. Jangan ragu untuk melihat file jika Anda penasaran dengan isinya. Karena file ini tidak dimaksudkan untuk diedit dengan tangan, saya tidak akan menghabiskan waktu untuk itu.
Anda dapat menguji untuk melihat apakah perubahan telah diterapkan dengan menjalankan:
systemctl start md5sum.service cat.service sha256sum.service
Seperti yang Anda lihat pada tangkapan layar di bawah, perubahan tampaknya berhasil. sha256sum.service
dikonfigurasi untuk 2048 CPUShares, sedangkan md5sum.service
memiliki 1024. Terakhir, cat.service
memiliki 256.
[ Memikirkan keamanan? Lihat panduan gratis ini untuk meningkatkan keamanan cloud hybrid dan melindungi bisnis Anda. ]
Menutup
Semoga, Anda belajar sesuatu yang baru sepanjang perjalanan kita bersama. Ada banyak hal yang harus ditangani, dan kami bahkan hampir tidak memahami apa yang mungkin dilakukan dengan cgroups. Selain peran yang dimainkan cgroup dalam menjaga sistem Anda tetap sehat, mereka juga berperan dalam strategi "pertahanan mendalam". Selain itu, cgroup adalah komponen penting untuk beban kerja Kubernetes modern, di mana mereka membantu dalam menjalankan proses dalam container dengan benar. Cgroup bertanggung jawab atas banyak hal, termasuk:
- Membatasi sumber daya proses.
- Memutuskan prioritas ketika perselisihan muncul.
- Mengontrol akses ke perangkat baca/tulis dan mknod.
- Menyediakan akuntansi tingkat tinggi untuk proses yang berjalan di sistem.
Orang dapat berargumen bahwa containerisasi, Kubernetes, dan sejumlah implementasi penting bisnis lainnya tidak akan mungkin terjadi tanpa memanfaatkan cgroups.
Jika Anda memiliki pertanyaan atau komentar atau mungkin ide artikel lainnya, jangan ragu untuk menghubungi saya di Twitter. Saya berharap untuk mendengar semua tanggapan Anda.
Sumber
https://0xax.gitbooks.io/linux-insides/content/Cgroups/linux-cgroups-1.html
https://sysadmincasts.com/episodes/14-introduction-to-linux-control-groups -cgroups
https://itnext.io/chroot-cgroups-and-namespaces-an-overview-37124d995e3d
https://www.certdepot.net/rhel7-get-started-cgroups/
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/chap-introduction_to_control_groups
https://oakbytes.wordpress.com/2012/09/02/ cgroup-cpu-allocation-cpu-shares-examples/
https://www.redhat.com/en/blog/world-domination-cgroups-part-1-cgroup-basics
https:// /www.redhat.com/en/blog/world-domination-cgroups-rhel-8-welcome-cgroups-v2
https://youtu.be/z7mgaWqiV90
https://youtu.be /el7768BNUPw
https://youtu.be/sK5i-N34im8
https://youtu.be/_AODvcO5Q_8
https://youtu.be/x1npPrzyKfs
https:/ /youtu.be/yZpNsDe4Qzg
https://access.redhat.com/solutions/4489171