Rumah >Operasi dan penyelenggaraan >Nginx >Lima minit keseronokan teknikal |. Analisis ringkas peraturan hierarki Linux Cgroup
cgroup ialah Kumpulan Kawalan Singkatan , ialah mekanisme yang disediakan oleh kernel Linux yang boleh mengehadkan, mengasingkan dan mengira sumber fizikal (seperti CPU, memori, peranti IO, dll.) untuk proses atau kumpulan proses. Pengurusan ruang pengguna cgroup direalisasikan melalui sistem fail cgroup Terima kasih kepada sistem fail maya Linux, butiran sistem fail disembunyikan, dan pengguna menyedari penggunaan fungsi ini melalui fail kawalan yang berkaitan.
cgroup telah diperkenalkan oleh Google semasa tempoh kernel 2.6 Ia merupakan asas teknikal untuk virtualisasi sumber dalam kernel Linux dan merupakan asas untuk LXC (Linux Containers. ) dan bekas Docker. Terdapat konsep berkaitan berikut dalam cgroup:
Bahagian 02 subsistem cgroup
Subsistem cgroup adalah berkaitan dengan versi kernel kernel, Terdapat lebih banyak sumber yang boleh dihadkan, secara amnya termasuk subsistem berikut.
➤ blkio: Tetapkan sekatan pada akses I/O untuk menyekat peranti, seperti peranti fizikal (cakera, SSD, USB, dsb.).
➤ cpu: Hadkan penggunaan cpu proses, melibatkan peruntukan potongan masa penjadualan cpu.
➤ cpuacct: Menjana laporan secara automatik mengenai CPU yang digunakan oleh tugasan dalam cgroup.
➤ cpuset: Peruntukkan CPU bebas (sistem berbilang teras) dan nod memori kepada tugasan dalam cgroup.
➤ peranti: Benarkan atau tolak akses tugas dalam cgroup peralatan.
➤ penyejuk beku: Gantung atau sambung semula tugas dalam kumpulan c.
➤ ingatan: Tetapkan had memori yang digunakan oleh tugasan dalam kumpulan c dan jana laporan secara automatik tentang sumber memori yang digunakan oleh tugasan tersebut.
➤ net_cls: Menandai paket rangkaian dengan pengecam kelas membolehkan program kawalan gelandangan Linux mengenal pasti paket yang dijana daripada cgroup tertentu.
➤ ns: subsistem ruang nama.
Digabungkan dengan hierarki cgroup, ia boleh difahami sebagai pokok Setiap nod pokok ialah kumpulan proses dan setiap pokok dikaitkan dengan satu atau lebih subsistem. Dalam pokok, semua proses dalam sistem Linux akan disertakan, tetapi setiap proses hanya boleh dimiliki oleh satu nod (kumpulan proses). Terdapat banyak pokok cgroup dalam sistem, dan setiap pokok dikaitkan dengan subsistem yang berbeza Sesuatu proses boleh tergolong dalam berbilang pokok, iaitu, proses boleh tergolong dalam berbilang kumpulan proses, tetapi kumpulan proses ini dikaitkan dengan subsistem yang berbeza. Pada masa ini, Linux boleh membina sehingga dua belas pokok cgroup, dan setiap pokok dikaitkan dengan subsistem Sudah tentu, anda juga boleh membina hanya satu pokok dan kemudian mengaitkan pokok ini dengan semua subsistem. Apabila pokok cgroup tidak dikaitkan dengan mana-mana subsistem, ia bermakna pokok itu hanya mengelompokkan proses Bagi perkara yang perlu dilakukan berdasarkan pengelompokan, ia akan diputuskan oleh aplikasi itu sendiri.
Terdapat empat peraturan gubahan untuk tahap, yang diterangkan seperti berikut:
Peraturan 1: Satu hierarki boleh mempunyai satu atau lebih subsistem. Seperti yang ditunjukkan dalam Rajah 1, tahap /cpu_memory_cg menyediakan dua subsistem, cpu dan memori, untuk cgroup1 dan cgroup2.
Rajah 1 Tahap Peraturan 1
Peraturan 2: Jika mana-mana subsistem sudah dilampirkan pada satu tahap, ia tidak boleh dilampirkan pada struktur tahap lain. Seperti yang ditunjukkan dalam Rajah 2, cpu_cg pada tahap A mula-mula menguruskan subsistem cpu, kemudian cpu_mem_cg pada tahap B tidak boleh mengurus subsistem cpu.
Rajah 2 cperaturan hierarki kumpulan 2
Peraturan 3: Setiap kali hierarki baharu dicipta pada sistem, semua tugasan pada sistem pada mulanya adalah ahli kumpulan lalai hierarki tersebut (dipanggil cgroup akar). Untuk mana-mana hierarki tunggal yang dibuat, setiap tugas pada sistem boleh menjadi ahli kumpulan dalam hierarki tersebut. Tugasan boleh berada dalam berbilang cgroup, asalkan setiap cgroup tersebut berada dalam hierarki subsistem yang berbeza. Sebaik sahaja tugasan menjadi ahli cgroup kedua dalam hierarki yang sama, ia akan dipadamkan daripada cgroup pertama dalam hierarki Iaitu, dua cgroup yang tidak berkaitan dalam hierarki yang sama tidak akan mempunyai tugas yang sama hanya boleh menjadi satu cara untuk menyekat jenis subsistem cgroup tertentu untuk proses tertentu. Apabila anda mencipta hierarki pertama, setiap tugas pada sistem ialah ahli sekurang-kurangnya satu cgroup (cgroup akar), jadi apabila menggunakan cgroup, setiap tugas sistem sentiasa berada dalam sekurang-kurangnya satu cgroup, seperti yang ditunjukkan dalam Rajah 3.
Rajah 3 cperaturan hierarki kumpulan 3
Peraturan 4: Sebarang proses yang dihasilkan pada sistem mencipta proses anak (atau benang). Proses anak secara automatik mewarisi keahlian cgroup induknya, tetapi boleh dialihkan ke cgroup lain mengikut keperluan Selepas pemindahan, proses ibu bapa dan anak adalah bebas sepenuhnya, seperti yang ditunjukkan dalam Rajah 4.
Rajah 4 cperaturan hierarki kumpulan 4
Kami bermula dari perspektif proses dan menggabungkan struktur data dalam kod sumber untuk menganalisis hubungan antara data berkaitan cgroup. Pertama sekali, dalam Linux, struktur data proses pengurusan ialah task_struct, di mana ahli yang berkaitan dengan cgroup adalah seperti berikut:
di mana cgroup menunjuk kepada struktur css_set, yang menyimpan maklumat cgroup yang berkaitan dengan proses. cg_list ialah senarai terpaut proses menggunakan css_set yang sama. Struktur css_set adalah seperti berikut:
struktur Maklumat elemen badan dijelaskan seperti berikut:
Seterusnya mari kita lihat struktur cgroup_subsys_state:
Penunjuk cgroup dalam struktur menghala ke struktur cgroup, dan proses dipengaruhi oleh subsistem Kawalan sumber sebenarnya dicapai dengan menambah subsistem cgroup tertentu, kerana cgroup berada pada tahap tertentu, dan subsistem dilampirkan pada tahap.
Mari kita lihat struktur cgroup,
Untuk demi sebab Untuk memahami hubungan antara css_set dan cgroup, kita juga perlu menganalisis struktur cg_cgroup_link lapisan tengah Data struktur adalah seperti berikut:
.
Data dalam struktur diterangkan seperti berikut:
cgrp_link_list dipautkan ke cgroup- >Senarai terpaut ditunjuk oleh css_sets.
cgrp menunjuk kepada kumpulan yang berkaitan dengan cg_cgroup_link ini.
cg_link_list dipautkan ke senarai terpaut yang ditunjuk oleh css_set->cg_links.
cg menunjuk ke css_set yang berkaitan dengan cg_cgroup_link.
Ia boleh dilihat bahawa cgroup dan css_set sebenarnya adalah perhubungan banyak-ke-banyak, dan struktur perantaraan perlu ditambah untuk menggabungkan kedua-duanya, cgrp dan cg dalam cg_group_link Elemen ialah gabungan, dan dua senarai terpaut, cgrp_link_list dan cg_link_list, ialah entiti cgroup dan css_set yang dilampirkan, yang memudahkan pengundian.
Ia boleh dilihat daripada peraturan hierarki cgroup bahawa sekumpulan proses boleh tergolong dalam cgroup yang tidak berada pada tahap gabungan yang sama, set_css menyimpan sekumpulan Maklumat yang berkaitan dengan setiap subsistem akar proses Subsistem berasal daripada peringkat cgroup yang berbeza, jadi cgroup_subsys_state yang disimpan dalam css_set boleh sepadan dengan berbilang cgroup. Sebaliknya, tahap cgroup juga menyimpan satu set cgroup_subsys_state, yang diperoleh daripada subsistem yang dilampirkan pada tahap di mana cgroup terletak A cgroup boleh mempunyai berbilang proses, dan css_set proses itu tidak semestinya sama. kerana proses itu mungkin menggunakan pelbagai peringkat Oleh itu, cgroup juga perlu sepadan dengan berbilang css_sets. Rajah 5 menerangkan hubungan kait banyak-ke-banyak secara terperinci.
Rajah 5 Proses dan ckumpulan rajah hubungan banyak-ke-banyak
Artikel ini adalah berdasarkan konsep cgroup. Hubungan banyak-ke-banyak antaranya dan proses dibongkar, dan pelaksanaan kod khususnya dianalisis daripada pengaitan pembolehubah dalam struktur yang berkaitan, dengan harapan dapat membantu pembaca memahami perhubungan dan penggunaan hierarki cgroup.
Atas ialah kandungan terperinci Lima minit keseronokan teknikal |. Analisis ringkas peraturan hierarki Linux Cgroup. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!