Rumah >Operasi dan penyelenggaraan >Nginx >Lima minit keseronokan teknikal |. Analisis ringkas peraturan hierarki Linux Cgroup

Lima minit keseronokan teknikal |. Analisis ringkas peraturan hierarki Linux Cgroup

WBOY
WBOYke hadapan
2023-06-09 14:18:482075semak imbas

五分钟技术趣谈 | Linux Cgroup层级规则简析

Bahagian 01 gambaran keseluruhan ckumpulan

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:

  • Tugas: Alias ​​untuk proses;
  • Kumpulan kawalan: Mengikut A tertentu set proses dibahagikan dengan standard. Kawalan sumber dalam Cgroup dilaksanakan dalam unit kumpulan kawalan. Sesuatu proses boleh ditambah kepada kumpulan kawalan atau dipindahkan dari satu kumpulan proses ke kumpulan proses yang lain. Proses dalam kumpulan proses boleh menggunakan sumber yang diperuntukkan oleh cgroup dalam unit kumpulan kawalan dan tertakluk kepada had sumber yang ditetapkan oleh cgroup dalam unit kumpulan kawalan.
  • Hierarki: Kawal perhubungan hierarki kumpulan, menggunakan pepohon Tersusun secara berstruktur, kumpulan kawalan nod anak mewarisi atribut tetapan sumber nod induk.
  • Subsistem: Subsistem ialah kawalan sumber Contohnya, subsistem CPU boleh mengawal peruntukan masa penggunaan CPU bagi proses tersebut, seperti yang ditunjukkan dalam Rajah 1. Subsistem mesti dilampirkan pada tahap untuk berfungsi Selepas subsistem dilampirkan pada tahap tertentu, semua kumpulan kawalan pada tahap ini dikawal oleh subsistem ini.

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.

Bahagian 03 peraturan peringkat cgroup

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.

五分钟技术趣谈 | Linux Cgroup层级规则简析

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.

五分钟技术趣谈 | Linux Cgroup层级规则简析

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.

五分钟技术趣谈 | Linux Cgroup层级规则简析

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.

五分钟技术趣谈 | Linux Cgroup层级规则简析

Rajah 4 cperaturan hierarki kumpulan 4


Bahagian 04 analisis perhubungan hierarki ckumpulan

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:

五分钟技术趣谈 | Linux Cgroup层级规则简析

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:

五分钟技术趣谈 | Linux Cgroup层级规则简析

struktur Maklumat elemen badan dijelaskan seperti berikut:

  • refcount ialah kiraan rujukan css_set, yang boleh dikongsi oleh pelbagai proses , selagi maklumat kumpulan bagi proses ini adalah sama . Contohnya, proses dalam kumpulan c yang sama dalam semua hierarki yang dibuat.
  • hlist digunakan untuk membina semua set_css ke dalam jadual cincang, dan kernel boleh mencari set_css tertentu dengan cepat.
  • tugas memautkan semua proses yang merujuk css_set ini ke dalam senarai terpaut.
  • cg_links menghala ke senarai terpaut yang terdiri daripada struct cg_group_link
  • subsys ialah tatasusunan daripada penunjuk , menyimpan satu set penunjuk ke cgroup_subsys_state. Cgroup_subsys_state ialah maklumat yang berkaitan dengan proses dan subsistem tertentu. Melalui penunjuk ini, proses boleh mendapatkan maklumat kawalan cgroup yang sepadan.

Seterusnya mari kita lihat struktur cgroup_subsys_state:

五分钟技术趣谈 | Linux Cgroup层级规则简析

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,

  • adik-beradik , kanak-kanak Tiga senarai yang dipautkan dengan ibu bapa bertanggungjawab untuk menghubungkan cgroup pada tahap yang sama ke dalam pokok.
  • susys ialah tatasusunan penuding subsistem yang diterangkan sebelum ini.
  • akar menghala ke struktur cgroupfs_root, iaitu struktur yang sepadan dengan tahap di mana cgroup berada.
  • root->top_cgroup menghala ke cgroup akar tahap semasa, iaitu cgroup yang dicipta secara automatik pada tahap Fantasy Sword. Anda boleh mendapatkan cgroup akar hierarki melalui cgroup->root->top_cgroup.
  • css_sets menghala ke senarai terpaut cg_cgroup_link, yang konsisten dengan cg_links dalam css_set.

五分钟技术趣谈 | Linux 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:

.

五分钟技术趣谈 | Linux Cgroup层级规则简析

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.

五分钟技术趣谈 | Linux Cgroup层级规则简析

Rajah 5 Proses dan ckumpulan rajah hubungan banyak-ke-banyak

Bahagian 05 Kesimpulan

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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam