Perjuangan untuk Sumber Daya, Bagian 1: Dasar-Dasar Kelompok

Komputer adalah perangkat keras. Dan hari ini kami kembali ke titik awal, dalam arti sekarang Anda jarang menemukan host fisik di mana satu tugas tunggal dilakukan. Bahkan jika hanya satu aplikasi yang berjalan di server, kemungkinan besar terdiri dari beberapa proses, wadah, atau bahkan mesin virtual (VM), dan mereka semua bekerja di server yang sama. Red Hat Enterprise Linux 7 berupaya dengan baik dengan distribusi sumber daya sistem dalam situasi seperti itu, tetapi secara default berperilaku seperti nenek yang baik hati, memperlakukan cucunya dengan kue buatan sendiri dan berkata: "Sama untuk semua orang, sama untuk semua orang."



Secara teori, prinsip "dibagi rata" tentu saja indah, tetapi dalam praktiknya, beberapa proses, wadah atau VM lebih penting daripada yang lain, dan karenanya harus menerima lebih banyak.

Linux telah lama memiliki alat manajemen sumber daya (baik, ulimit, dll.), Tetapi dengan munculnya Red Hat Enterprise Linux 7 dan systemd, kami akhirnya memiliki seperangkat alat yang kuat yang dibangun ke dalam OS itu sendiri. Faktanya adalah bahwa komponen kunci dari systemd adalah sekumpulan cgroup yang siap pakai dan disesuaikan yang sepenuhnya digunakan pada level OS.

Nah, cgroup macam apa ini, dan kemana perginya sumber daya atau manajemen kinerja?

Kontrol level kernel


Dimulai dengan versi 2.6.24, dirilis pada Januari 2008, kernel Linux memperkenalkan apa yang awalnya diciptakan dan dibuat oleh Google dengan nama "wadah proses", dan di Linux dikenal sebagai "kelompok kontrol", disingkat cgroup. Singkatnya, cgroup adalah mekanisme kernel yang memungkinkan Anda membatasi penggunaan, menyimpan catatan, dan mengisolasi konsumsi sumber daya sistem (CPU, memori, disk I / O, jaringan, dll.) Pada tingkat pengumpulan proses. Cgroup juga dapat membekukan proses untuk memeriksa dan memulai kembali. Pengontrol Cgroup pertama kali muncul di versi 6 dari Red Hat Enterprise Linux, tetapi di sana mereka harus dikonfigurasi secara manual. Tetapi dengan munculnya Red Hat Enterprise Linux 7 dan systemd, kumpulan cgroup yang telah dikonfigurasikan hadir bersama dengan OS.

Semua ini bekerja pada level kernel OS dan karenanya menjamin kontrol ketat atas setiap proses. Jadi sekarang sangat sulit bagi malware mana pun untuk memuat sistem sehingga berhenti merespons dan membeku. Meskipun, tentu saja, kode kereta dengan akses langsung ke perangkat keras (misalnya, driver) masih mampu melakukan ini. Pada saat yang sama, Red Hat Enterprise Linux 7 menyediakan antarmuka untuk berinteraksi dengan cgroup, dan semua pekerjaan dengan mereka terutama dilakukan melalui perintah systemd.

Kue Anda


Diagram di bawah ini, mengingatkan pada irisan pie, menunjukkan tiga cgroup yang secara default di server Red Hat Enterprise Linux 7 - System, User, and Machine. Masing-masing kelompok ini disebut "slice" (sektor slice). Seperti yang Anda lihat pada gambar, setiap irisan dapat memiliki sektor pengiris anak. Dan, seperti dalam kasus kue, secara total, semua irisan memberikan 100% dari sumber daya yang sesuai.



Sekarang mari kita lihat beberapa konsep kelompok menggunakan sumber daya prosesor sebagai contoh.

Gambar di atas menunjukkan bahwa waktu prosesor dibagi rata antara tiga irisan tingkat atas (Sistem, Pengguna, dan Mesin). Tetapi ini hanya terjadi di bawah beban. Jika beberapa proses dari irisan Pengguna meminta 100% sumber daya prosesor, dan tidak ada orang lain yang membutuhkan sumber daya ini saat ini, maka itu akan menerima semua 100% waktu prosesor.

Masing-masing dari tiga irisan tingkat atas dirancang untuk jenis beban kerjanya, yang mengiris sektor anak dalam irisan induk:

  • Sistem - daemon dan layanan.
  • Pengguna - sesi pengguna. Setiap pengguna menerima irisan anak, dan semua sesi dengan UID yang sama "hidup" di irisan yang sama, sehingga orang bijak yang licik tidak bisa mendapatkan sumber daya lebih dari yang seharusnya.
  • Mesin - mesin virtual, seperti tamu KVM.

Selain itu, konsep yang disebut "bola" (berbagi) digunakan untuk mengontrol penggunaan sumber daya. Bola adalah parameter numerik relatif; nilainya masuk akal hanya dibandingkan dengan nilai-nilai bola lain yang termasuk dalam kelompok yang sama. Secara default, semua irisan memiliki bola sama dengan 1024. Dalam irisan Sistem pada gambar di atas, bola CPU sama dengan 1024 ditetapkan untuk httpd, sshd, crond, dan gdm. Nilai bola untuk irisan Sistem, Pengguna, dan Mesin juga 1024. Apakah agak membingungkan? Bahkan, ini dapat direpresentasikan sebagai pohon:

  • Sistem - 1024
    • httpd - 1024
    • sshd - 1024
    • crond - 1024
    • gdm - 1024
  • Pengguna - 1024
    • bash (mrichter) - 1024
    • bash (dorf) - 1024
  • Mesin - 1024
    • testvm - 1024

Dalam daftar ini, kami memiliki beberapa daemon yang berjalan, beberapa pengguna, dan satu mesin virtual. Sekarang bayangkan bahwa mereka semua secara bersamaan meminta semua waktu prosesor yang dapat diperoleh.

Singkatnya:

  • Sistem Slice menerima 33,333% dari waktu prosesor dan membagikannya secara merata di antara empat setan, yang masing-masing memberikan 8,25% dari sumber daya CPU.
  • Irisan Pengguna menerima 33,333% dari waktu prosesor dan membagikannya di antara dua pengguna, yang masing-masing memiliki 16,5% dari sumber daya CPU. Jika pengguna log keluar atau menghentikan semua proses yang berjalan, maka dorf akan memiliki akses ke 33% dari sumber daya CPU.
  • Mesin Iris menerima 33,333% dari waktu prosesor. Jika Anda mematikan VM atau mengubahnya ke mode siaga, maka irisan Sistem dan Pengguna akan menerima sekitar 50% dari sumber daya CPU, yang kemudian akan dibagi di antara irisan anak mereka.

Selain itu, untuk setiap daemon, pengguna, atau mesin virtual, Anda dapat memasukkan tidak hanya relatif, tetapi juga pembatasan absolut pada konsumsi waktu prosesor, tidak hanya satu, tetapi juga beberapa prosesor. Misalnya, slice mrichter pengguna memiliki properti CPUQuota. Jika Anda menetapkannya menjadi 20%, maka mrichter dalam keadaan apa pun tidak akan menerima lebih dari 20% sumber daya dari satu CPU. Pada server multi-core, CPUQuota dapat lebih dari 100% sehingga slice dapat menggunakan sumber daya lebih dari satu prosesor. Misalnya, dengan CPUQuota = 200%, sepotong dapat sepenuhnya memanfaatkan dua inti prosesor. Penting untuk memahami bahwa CPUQuota tidak cadangan, dengan kata lain, itu tidak menjamin persentase waktu prosesor untuk setiap beban sistem - ini hanya maksimum yang dapat dialokasikan untuk sebuah slice dengan mempertimbangkan semua irisan dan pengaturan lainnya.

Putar sampai penuh!


Bagaimana saya bisa mengubah pengaturan slice?

Untuk ini, setiap irisan memiliki properti khusus. Dan karena itu adalah Linux, kita dapat secara manual menulis pengaturan dalam file konfigurasi atau mengatur dari baris perintah.

Dalam kasus kedua, perintah set-properti systemctl digunakan. Inilah yang akan terjadi di layar jika Anda mengetik perintah ini, tambahkan nama irisan di akhir (dalam kasus kami, Pengguna) dan kemudian tekan tombol Tab untuk menampilkan opsi:



Tidak semua properti di tangkapan layar ini adalah pengaturan cgroup. Kami terutama tertarik pada mereka yang mulai pada Block, CPU dan Memory.

Jika Anda lebih suka bukan baris perintah, tetapi file konfigurasi (misalnya, untuk penyebaran otomatis pada beberapa host), maka Anda harus berurusan dengan file di folder / etc / systemd / system. File-file ini secara otomatis dibuat ketika Anda menetapkan properti menggunakan perintah systemctl, tetapi mereka juga dapat dibuat dalam editor teks, dicap melalui Wayang, atau bahkan dihasilkan oleh skrip saat itu juga.

Jadi, dengan konsep dasar cgroup, semuanya harus jelas. Lain kali kita akan melalui beberapa skenario dan melihat bagaimana perubahan pada properti tertentu mempengaruhi kinerja.

Dan secara harfiah besok, kami mengundang semua orang ke Red Hat Forum Russia 2018 - akan ada kesempatan untuk mengajukan pertanyaan langsung ke insinyur Red Hat.

Posting cgroup lain dari seri Resource Fight kami tersedia di:

Source: https://habr.com/ru/post/id423051/


All Articles