Upgrade to Pro — share decks privately, control downloads, hide ads and more …

cgroup v1 の内部構造 / 13th CTStudy

2591343b244565d6199f61c4acd148f9?s=47 tenforward
December 05, 2020

cgroup v1 の内部構造 / 13th CTStudy

「第13回コンテナ技術の情報交換会@オンライン」の発表資料です。
参考となる情報にはPDF中からリンクをしていますが、資料中のリンクは Speaker Deck 上ではクリックできないので PDF をダウンロードしてご覧ください。

2591343b244565d6199f61c4acd148f9?s=128

tenforward

December 05, 2020
Tweet

Transcript

  1. cgroup v1 〣಺෦ߏ଄ Ճ౻ହจ 2020-12-05 1/37

  2. ࣗݾ঺հʢ1ʣ Ճ౻ହจ Twitter @ten_forward github https://github.com/tenforward ٕज़ϒϩά https://tenforward.hatenablog.com/ ॴଐ גࣜձࣾ

    IDC や゜アふくぎ / lxc-jp Project / Plamo Linux ゐアふべそ゚がゆ 2/37
  3. ࣗݾ঺հʢ2ʣ झຯ〜ぢアふべ〹〘〛〳『ɻぢアふべ〣ओ〠じがぼ゚पล〣࣮૷〠ڵຯ⿿⿴〿〳『ɻ 2007 ೥ ぢアふべぇ࢖〘〔つがもと։ൃʢVirtuozzoʣ 2009 ೥ OpenVZ/LXC ৮〿〕『 2013

    ೥ ୈ 1 ճぢアふべܕԾ૝Խ〣৘ใަ׵ձ։࠵ LXC ೔ຊޠ man pages ຋༁&ろがで ʢݱࡏ〤 LXD ؔ࿈〣຋༁ɺlinuxcontainers.org ຋༁〷〹〘〛〳『ʣ 2014 ೥ gihyo.jp 〜 ʮLXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ࣮ݱ『぀ٕज़ʯ ࿈ࡌ։࢝ ݱࡏ CloudNative 〣೾〠৐〿஗ぁ぀ 3/37
  4. ຊ೔〣಺༰ cgroup 〣ߏ଄ମؒ〣ؔ܎ぇத৺〠⿼࿩「〳『ɻ • cgroup v1 〣ぢがへぇཧղ『぀্〜෼⿾〘〛⿶぀〝ྑ《〒⿸〟 cgroup 〣಺෦ߏ଄〠〙⿶ 〛આ໌「〳『

    • cgroup v1 〜のとぜ⿿ cgroup ؒぇҠಈ『぀ࡍ〣ॲཧ〠ؔ܎『぀ߏ଄ମぇઆ໌「〳『 આ໌〣લఏ〝「〛: • جຊత〠〤 cgroup v1 〠〙⿶〛⿼࿩「〳『⿿ɺߏ଄ࣗମ〤 v2 〜〷มい〿〳【え〣〜 v2 ぇཧղ『぀ࡍ〠〷໾ཱ〙〤』〜『 • આ໌〣よがと〤 4.19 kernel 〜『 جຊత〟 cgroup v1 〣આ໌〠〙⿶〛〤ɺࢲ〣࿈ࡌぇ〉ཡ。〕《⿶ʢୈ 3ʙ5 ճʣ ɻ • LXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ࣮ݱ『぀ٕज़ ʢgihyo.jpʣ 4/37
  5. cgroup ⿼《〾⿶ cgroup • cgroup ༻〣ٙࣅやきぐ゚てとふわぇろげアぷ「〛࢖⿸ • び゙がߏ଄ぇ〝〿ɺぶく゛ぜぷ゙⿿ cgroup ぇද『ʢkernfs

    〣ػೳぇ࢖༻ʣ • ぶく゛ぜぷ゙த〠ग़ݱ『぀やきぐ゚〜ぢアぷ゜が゚ぇߦ〘〔〿ઃఆ஋ぇऔಘ「〔〿『぀ • ぢアぷ゜が゚「〔⿶゙ぬがと〉〝〠ʮぢアぷ゜が゘がʢつゅてとふわʣ ʯ⿿४උ《ぁ぀ cgroup v1 • ෳ਺֊૚ʢび゙がʣߏ଄ • び゙が〉〝〠ぢアぷ゜が゘がぇ〧〷〚々぀ • ೚ҙ〣 cgroup 〠のとぜʢゆ゜なとɺと゛ひへʣ⿿ॴଐ〜 ぀ • ෳ਺〣び゙が⿿⿴぀৔߹ɺてとふわ্〣のとぜ〤ඞ』֤び゙が〜〧〝〙〣 cgroup 〠ॴଐ 『぀ 5/37
  6. cgroup v1 び゙が • ֊૚ߏ଄ɻ֊૚〉〝〠ߏ଄⿿ҟ〟぀ • cgroup 〠のとぜ〝ぢアぷ゜が゘が⿿ඥ෇⿶〛⿶぀ 6/37

  7. cgroup 〝のとぜ〠ؔ『぀ॲཧ〣લఏ cgroup 〠ؔい぀ॲཧɿ 1. のとぜぇ cgroup 〠ׂ〿౰〛぀ɻのとぜ⿿ cgroup ؒぇҠಈ『぀

    2. cgroup 〠ॴଐ『぀のとぜぇऔಘ『぀ɻのとぜ〠ର『぀ cgroup ぇऔಘ『぀ɻのとぜ⿿ぢ アぷ゜が゘が〣ঢ়ଶ〠ぎぜなと『぀ ̍ʹൺ΂Δͱ̎ͷස౓͕ߴ͍ɻͳͷͰ͕̎ศརͳߏ଄Λऔ͍ͬͯΔʢ々〞ɺ〒ぁ〜〤ෆศ〟〣〜 てゖがぷじひぷ⿿ߏ଄ମ〠ؚ〳ぁ〛⿶〔〿『぀ˠ༨ܭ〹〹〈「⿶ʣ 7/37
  8. cgroup 〠ؔ܎『぀ॏཁ〟ߏ଄ମ〝 〒〣ؒ〣ؔ܎

  9. cgroupɺのとぜ〝゙ぬがと؅ཧ〟〞〣ؔ࿈ぇݟ぀લ〠ɺ〳』〤ぢアぷ゜が゘がʢつゅてとふわʣ ぇද『ߏ଄ମぇݟ〛〴〳「〼⿸ɻ ɹ ৽「⿶ぢアぷ゜が゘がぇ࣮૷「〽⿸〝『぀〝ɺ࣍〠঺հ『぀ߏ଄ମ〣֤ゐアみが〠ઃఆ『぀ؔ਺ ぇ࣮૷「〛⿶。ײ」〠〟〿〳『ɻ 8/37

  10. cgroup_subsys ߏ଄ମ ぢアぷ゜が゘が〒〣〷〣ɻぢアぷ゜が゘がぇ࣮૷『぀ࡍ〤ɺ〈〣ߏ଄ମぇఆٛ「〛ඞཁ〟ぢが゚ みひぜؔ਺〟〞ぇඞཁ〠Ԡ」〛࣮૷「〛⿶。ɻ • ぢアぷ゜が゘が〣৘ใぇఆٛ『぀ • cgroup 〠ؔい぀༷ʑ〟ॲཧぇߦ⿸৔໘〜࢖⿸ぢが゚みひぜؔ਺ぇఆٛ『぀ •

    てとふわ〜࢖⿺぀ぢアぷ゜が゘が〤ɺじがぼ゚〣 config ࣌〠ܾఆ《ぁ぀ Table 1: cgroup_subsys ߏ଄ମʢൈਮʣ ม਺໊ ઃఆ『぀ؔ਺〣ॲཧ name ぢアぷ゜が゘が໊ css_alloc cgroup_subsys_state ߏ଄ମ〣ゐゑ゙がぇ֬อ『぀ؔ਺ css_online ぢアぷ゜が゘が〣ઃఆぇ׬ྃ《【぀ؔ਺ can_attach ʢぢアぷ゜が゘が〝「〛ʣcgroup 〠のとぜ⿿Ҡಈ〜 ぀⿾ぇ֬ೝ『぀ؔ਺ attach cgroup 〠のとぜ⿿Ҡಈ「〔⿴〝〣ॲཧぇߦ⿸ؔ਺ legacy_cftypes cgroup v1 〣 cgroup 〜ग़ݱ『぀やきぐ゚৘ใ〠ؔ『぀ cftype ߏ଄ମ〣഑ྻ 9/37
  11. 〒ぁ〜〤⿶〽⿶〽 cgroup ぢぎ〣ߏ଄〠ؔい぀ߏ଄ମぇ〴〛⿶ 〳『ɻ 10/37

  12. cgroup v1 び゙がʢ࠶ܝʣ • ֊૚ߏ଄ɻ֊૚〉〝〠ߏ଄⿿ҟ〟぀ • cgroup 〠のとぜ〝ぢアぷ゜が゘が⿿ඥ෇⿶〛⿶぀ 11/37

  13. cgroup ߏ଄ମ 〳』〤 cgroup ߏ଄ମぇݟ〛〴〳「〼⿸ɻ Table 2: cgroup ߏ଄ମʢൈਮʣ ܕ

    ม਺໊ આ໌ cgroup_subsys_state self ࣗ਎〣ૢ࡞〠࢖⿸〔〶〣 cgroup_subsys_state ߏ଄ମ unsigned long flags ࣗ਎〣ڍಈぇઃఆ『぀や゘そ int id ֊૚಺〣 cgroup 〣 ID int nr_populated_csets ࣗ਎〠〧〷〚⿶〛⿶぀ۭ〜〟⿶ css_set 〣਺ kernfs_node kn ࣗ਎〣ぶく゛ぜぷ゙ぇද『 kernfs 〣ぽがへ cgroup_subsys_state* subsys ࣗ਎〠〧〷〚。 cgroup_subsys_state ߏ଄ମ〣഑ྻ cgroup_root root ࣗ਎⿿ॴଐ『぀֊૚〣 root cgroup list_head cset_links ࣗ਎〠ॴଐ『぀のとぜ〠ؔ܎『぀ css_set ぇࢦ『 cgrp_cset_links ߏ଄ ମ list_head pidlists tasksɺcgroup.procs やきぐ゚〠ॻ⿾ぁ぀ PID/TID 〣゙とぷ〜⿴぀ cgroup_pidlist ߏ଄ମ〣゙とぷ work_struct release_agent_work cgroup ಺〣のとぜ⿿〟。〟〘〔〝 〠࢖༻『぀ぢが゚みひぜؔ਺ぇొ࿥ 『぀ゞがぜずゔが) 12/37
  14. cgroup ߏ଄ମ • のとぜぇද『 task_struct ߏ଄ମ〠ؔ࿈『぀ゐアみ〤⿶〟⿶ • ぢアぷ゜が゘が〠ؔ࿈『぀ゐアみ〤ଘࡏ『぀ˠ cgroup_subsys_state ߏ଄ମ〣഑ྻ

    subsysʢޙड़ʣ • やきぐ゚てとふわ〝「〛〣֊૚ߏ଄〤 kernfs_node ߏ଄ମ〣 kn 〜؅ཧ《ぁ぀ • やきぐ゚てとふわ〝「〛〕々〜〟。ɺ゙ぬがと؅ཧ〣؍఺⿾〾֊૚ߏ଄ʢ૆ઌ〹ࢠଙʣぇ〔 〞぀ඞཁੑ⿿⿴぀ • subsys 〝〤ผ〠〷⿸〧〝〙 cgroup_subsys_state ߏ଄ମ self ⿿ଘࡏ『぀ˡॏཁ 13/37
  15. 〞〈〜のとぜ〝〣ؔ࿈〹゙ぬがと੍ޚ〠ؔ『぀৘ใ⿿؅ཧ《ぁ〛⿶぀〣〜「〼⿸? 〒〣⿴〔〿ぇॱ〠௥〘〛⿶ 〳『ɻ 14/37

  16. cgroup_subsys_state ߏ଄ମ • ໊લ௨〿ɺಛఆ〣ʮcgroupʯ〣ಛఆ〣ʮίϯτϩʔϥʔʢαϒγεςϜʣʯ ʢsubsysʣ〣 ʮঢ়ଶʯ ʢstateʣぇ؅ཧ『぀ • 〙〳〿 •

    〧〝〙〣 cgroup 〠ର『぀ • ʢ〒〣 cgroup 〜؅ཧ《ぁ぀ʣ〧〝〙〣ぢアぷ゜が゘が〉〝 〠〧〝〙 cgroup_subsys_state ߏ଄ମ⿿ଘࡏ『぀ 15/37
  17. ゆ゜なと〝 cgroup_subsys_state ߏ଄ମ〝 css_set ߏ଄ମ 16/37

  18. cgroup_subsys_state ߏ଄ମ Table 3: cgroup_subsys_state ߏ଄ମʢൈਮʣ ܕ ม਺໊ આ໌ cgroup

    cgroup ࣗ਎⿿〧〷〚。 cgroup ߏ଄ମ cgroup_subsys ss ࣗ਎〠〧〷〚。 cgroup_subsys ߏ଄ମʢ=ぢアぷ゜が゘がʣ percpu_ref refcnt ࢀরじげアのが cgroup_subsys_state parent ਌֊૚〣 cgroup_subsys_stateʢҎ߱ cssʣ list_head sibling ࣗ਎〣਌ css 〣ࢠ css 〣࿈゙݁とぷɻ〙〳〿ܑఋ〣゙とぷ list_head children ࣗ਎〣ࢠ cgroup 〣 css 〣࿈゙݁とぷ unsigned int flags ࣗ਎〣ঢ়ଶʢonline ⿾? ࢀর⿿⿴぀⿾? ऴྃ「⿾々⿾? 〟〞ʣ work_struct destroy_work css ぇ࡟আ『぀ࡍ〠࢓༷『぀ぢが゚みひぜؔ਺ぇొ࿥『぀ゞがぜずゔが • ࣮ࡍ〣ぢアぷ゜が゘が〭〣ࢀরぇ࣋〙 • cgroup 〣֊૚ߏ଄〠ؔ܎『぀ゐアみぇ࣋〙ʢparent, sibling, childrenʣ • cgroup ߏ଄ମ〠〤 self 〝⿶⿸໊લ〣 cgroup_subsys_state ߏ଄ମ⿿⿶〔ɻ〈〣 self 〤ぢ アぷ゜が゘が〭〣ࢀর⿿〟⿶ʢNULLʣঢ়ଶ〜ɺ֊૚ߏ଄ぇ〔〞〘〔〿『぀ࡍ〠࢖いぁ぀ ʢcgroup_subsys_state ߏ଄ମ〣。【〠ぢアぷ゜が゘が〠ؔ『぀ॲཧぇ「〟⿶࢖⿶ճ「త〟࢖ いぁํ〜〹〹〈「⿶ʂʣ 17/37
  19. css_set ߏ଄ମ • cgroup v1 〜〤ෳ਺〣 cgroupfs ぇろげアぷ〜 ぀ɻ֤び゙がʢろげアぷʣ〠ಛఆ〣ぢア ぷ゜が゘がぇ〧〷〚々〾ぁ぀ •

    ⿴぀のとぜ〠ؔ『぀゙ぬがとফඅ〣ঢ়ଶぇݟ〔⿶৔߹ɺෳ਺び゙が〠෼ࢄ「〛⿶぀ cgroup_subsys_state ߏ଄ମぇ〳〝〶〔ߏ଄ମ⿿⿴぀〝ศར ˠɹ〈〣໨త〣ߏ଄ମ⿿ css_set ߏ଄ମ • ಉҰ〣のとぜ〠ؔ࿈『぀ cgroup_subsys_state ߏ଄ମ〣૊ʢಉҰ〣 cgroup 〠〧〷〚。 ぢアぷ゜が゘が৘ใ〣૊ʣ〉〝〠 css_set ߏ଄ମ⿿࡞〾ぁ぀ • のとぜ⿾〾〤〈〣 css_set ぇࢀর『぀ɻෳ਺び゙が〠〳〔⿿〘〔ぢアぷ゜が゘が〣৘ใぇ ࢀর『぀〣⿿؆୯ 18/37
  20. ゆ゜なと〝 cgroup_subsys_state ߏ଄ମ〝 css_set ߏ଄ମʢ࠶ܝʣ 19/37

  21. css_set ߏ଄ମ〣ੜ੒ のとぜ⿿Ҡಈ『぀〝のとぜ⿿ࢀর『぀ css_set ߏ଄ମ⿿มい぀ • のとぜ⿿ cgroup ؒʢroot ˠ

    root Ҏ֎〣 cgroupɺroot Ҏ֎〣 cgroup ಉ࢜ʣぇҠಈ『 ぀ࡍ〠〤ɺのとぜ⿿ࢀর『぀ cgroup_subsys_state ߏ଄ମ〣૊⿿มԽ『぀ ˠ৽〔〟 css_set ߏ଄ମ⿿ඞཁ のとぜ〣਺〕々 css_set ߏ଄ମ⿿ඞཁʁ てとふわ্〠େྔ〣 css_set ߏ଄ମ⿿ੜ੒《ぁ぀ʁ • ಉ」 cgroup_subsys_state ߏ଄ମ〣૊ぇࢀর『぀のとぜ⿿『〜〠⿴぀⿾〷「ぁ〟⿶ ˠ৽〔〠 css_set ぇ࡞぀ඞཁ⿿〟⿶ʢಉ」૊ぇࢀর「〛぀৔߹〤࢖⿶ճ「ʣ • ࢖⿶ճ【぀ css_set ߏ଄ମ⿿てとふわ্〠ଘࡏ『぀⿾ぇݕࡧ『぀〔〶〠ɺてとふわ্〠ଘ ࡏ『぀『〮〛〣 css_set ߏ଄ମ〤まひてゔふがゅ゚಺〠゙アぜ《ぁ〛⿶぀ 20/37
  22. のとぜ〣Ҡಈ〠〽぀ css_set ߏ଄ମ〣ੜ੒ 21/37

  23. ࣮ࡍ〣てとふわ্〣 css_set ߏ଄ମ び゙が〉〝〠のとぜ⿿ॴଐ『぀ cgroup ぇ೚ҙ〠બ〮぀ˠてとふわ্〠 css_set ߏ଄ମ⿿େྔ 〠ੜ੒《ぁ぀Մೳੑ 〔〕ɺ࣮ࡍ〣てとふわ〜〤ɺ

    • ෳ਺び゙が⿿ଘࡏ「〛〷ɺ『〮〛〣び゙が⿿ಉ」び゙がߏ଄ぇ「〛⿶぀ • ぢアふべろぼがでをが〤ぢアふべ༻〣 cgroup ֊૚ߏ଄ぇશび゙が〜ಉ」〽⿸〠࡞੒『぀ ʢsystemd 〷ʣ • ろ゚ばと゛ひへ〣のとぜɺಉ」ゆ゜そ゘わ಺〣਌ࢠゆ゜なと〤〰〝え〞〣৔߹ಉ」 cgroup ʢ〣૊ʣ〠ॴଐ『぀ • ぢアふべろぼがでをが⿿ぢアふべ಺〣શゆ゜なとぇಉ」 cgroupʢ〣૊ʣ〠ॴଐ《【぀ ͭ·Γ͋Δఔ౓ͷλεΫͷ͔ͨ·Γʢ૊ʣ͕ಉ͡ css_set ߏ଄ମΛࢀর͍ͯ͠Δ͜ͱ͕΄ͱΜͲ ˠてとふわ⿿ css_set ߏ଄ମ〜⿴〪ぁ぀〽⿸〟〈〝〤〳⿴〟⿶ 22/37
  24. task_struct ߏ଄ମ〝 cgroup Linux ্〜のとぜぇද『 task_struct ߏ଄ମ〠〤 cgroup ؔ܎〣ゐアみ⿿⿶。〙⿾ଘࡏ『぀ɻ 〒〣⿸〖

    cgroup 〝のとぜ〣ؔ܎ੑぇࣔ『〣〠ॏཁ〟〣⿿ɿ   struct task_struct { :ʢུʣ #ifdef CONFIG_CGROUPS /* Control Group info protected by css_set_lock: */ struct css_set __rcu *cgroups; /* cg_list protected by css_set_lock and tsk->alloc_lock: */ struct list_head cg_list; #endif :ʢུʣ }   • css_set ߏ଄ମぇද『ม਺໊⿿ cgroupsʢ࣮࣭ɺ゙ぬがとؔ࿈〣৘ใ〤 css_set ߏ଄ମ〣 ઌ〠⿴぀〣〜のとぜ⿾〾ݟ〔 cgroup 〤 css_set 〕〝⿶⿸〈〝ʣ • cg_list 〝⿶⿸゙とぷぇ࣋〘〛⿶぀ʢޙड़ʣ 23/37
  25. のとぜ〝 css_set 〣ؔ܎ • task_struct ߏ଄ମ⿾〾 css_set ߏ଄ମ〭〣ࢀর⿿⿴぀ • ಉ」

    css_set ߏ଄ମぇࢀর「〛⿶぀ task_struct ߏ଄ମぇ〙〟〃゙アぜ⿿ଘࡏ『぀ ʢcg_listʣ 24/37
  26. cgroup 〝 css_set 〣゙アぜ • css_set 〤ɺෳ਺ଘࡏ『぀ cgroup び゙が಺〜〒ぁ〓ぁ〣び゙が಺〣 cgroup

    〧〝〙』〙 〝ؔ࿈〚⿶〛⿶぀ɻ〙〳〿ෳ਺〣 cgroup 〝ؔ࿈〚⿶〛⿶぀ • cgroup 〠〤ෳ਺〣のとぜ⿿ॴଐ『぀ɻのとぜ〤〒ぁ〓ぁ css_set 〝ؔ࿈〚⿶〛⿶぀〣〜ɺ cgroup 〠ؔ࿈『぀ css_set 〤ෳ਺ଘࡏ『぀ 〙〳〿ෳ਺〣 css_set 〝ෳ਺〣 cgroup ⿿゙アぜ「⿴〘〛⿶぀〽⿸〟ߏ଄〜ɺ୯Ұ〣゙アぜ〜 〤ؔ܎ੑ〤ද【〟⿶ • css_set ߏ଄ମ〝 cgroup ߏ଄ମ〣஥ཱ〖ぇ『぀〣⿿ cgrp_cset_link ߏ଄ମ 25/37
  27. cgrp_cset_link ߏ଄ମ Table 4: cgrp_cset_link ߏ଄ମ ܕ ม਺໊ આ໌ cgroup

    cgrp ࣗ਎〝〧〷〚⿶〛⿶぀ cgroup ߏ଄ମ css_set cset ࣗ਎〝〧〷〚⿶〛⿶぀ css_set ߏ଄ମ list_head cset_link cgroup->cset_links ぇ〙〟〆぀゙アぜ list_head cgrp_link css_set->cgrp_links ぇ〙〟〆぀゙アぜ 26/37
  28. cgrp_cset_link ߏ଄ମ 27/37

  29. cgrp_cset_link ߏ଄ମ cgrp_cset_link ߏ଄ମ〤ɺ • のとぜ〝 cgroup ぇޮ཰త〠゙アぜ • ⿴぀のとぜ〠ର『぀

    cgroup ぇ『〮〛ݟ〙々぀ɺ〷「。〤⿴぀ cgroup 〠ର『぀『〮〛〣 のとぜぇݟ〙々぀〣〠ඇৗ〠ྑ⿶ߏ଄ 「⿾「 • ⿴぀のとぜ〠ର『぀ぢアぷ゜が゘が⿿ؔ܎『぀ cgroup ぇݟ〙々぀ʜ〠〤޲⿶〛⿶〟⿶ 〈〣〔〶〠 • css_set ߏ଄ମ〤 cgroup_subsys_state ߏ଄ମ〣഑ྻぇ࣋〙 struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; 28/37
  30. のとぜ〣Ҡಈ

  31. Ҡಈॲཧ〒〣〷〣〣આ໌〜〤〟。ɺҠಈ༻〠४උ《ぁ〔ぶがのߏ଄〠〙⿶〛આ໌「〳『ɻ 29/37

  32. のとぜ〣 cgroup ؒҠಈ • 〈〣〽⿸〠ෳࡶ〠ߏ଄ମಉ࢜⿿゙アぜ「〛⿶぀〣〜ɺcgroup ಺ぇのとぜ⿿Ҡಈ『぀〝 〤 େมʂ • ෳ਺〣のとぜ⿿ಉ࣌〠Ҡಈ『぀Մೳੑ⿿⿴぀ˡॏཁ ⿶。〙⿾〣のとぜ⿿Ҡಈぇ׬ྃ「〔⿴〝〜ɺ⿴぀のとぜ〣Ҡಈ⿿ࣦഊ『぀〽⿸〟〈〝⿿⿴〘〔

    〾!? 30/37
  33. のとぜ〣 cgroup ؒҠಈ のとぜ〣Ҡಈॲཧ〤େ 。 4 ஈ֊〠෼⿾ぁ〛⿶぀: 1. Ҡಈݩ४උॲཧ 2. Ҡಈઌ४උॲཧ

    3. Ҡಈॲཧ 4. Ҡಈ׬ྃॲཧ ४උॲཧ〜࣮ࡍ〠ࣦഊ『぀Մೳੑ〣⿴぀ॲཧぇߦ⿸ɻҠಈ४උ〠੒ޭ「〔৔߹〠ɺ࣮ࡍ〣Ҡಈॲ ཧぇߦ⿸ɻ 31/37
  34. のとぜҠಈॲཧ༻ߏ଄ମ ෳࡶ〠゙アぜ「〔ߏ଄ମ〣৘ใ〹゙アぜぇมߋ『぀〔〶〠ɺ • cgroup 〠〤Ҡಈઐ༻ͷߏ଄ମ⿿४උ《ぁ〛⿶぀ • css_set ߏ଄ମ〠〤Ҡಈ࣌〠࢖༻『぀ઐ༻〣ゐアみม਺⿿४උ《ぁ〛⿶぀ 〳〔ɺҠಈ४උॲཧぇߦ⿸〔〶 •

    Ҡಈ४උॲཧ〜࢖⿸ม਺ • Ҡಈॲཧ〜࢖⿸ม਺ ⿿〒ぁ〓ぁ४උ《ぁ〛⿶〔〿『぀ɻ 32/37
  35. cgroup_mgctx ߏ଄ମ Table 5: cgroup_mgctx ߏ଄ମ ܕ ม਺໊ આ໌ list_head

    preloaded_src_csets Ҡಈ४උ〜औಘ「〔Ҡಈର৅〝〟぀Ҡಈݩ css_set ߏ଄ମぇ〙〟〃゙とぷ list_head preloaded_dst_csets Ҡಈ४උ〜औಘ「〔Ҡಈର৅〝〟぀Ҡಈઌ css_set ߏ଄ମぇ〙〟〃゙とぷ cgroup_taskset tset Ҡಈத〣 css_set 〝のとぜぇ௥੻『぀〔〶〣 cgroup_taskset ߏ଄ମ u16 ss_mask Ҡಈ〜Өڹ『぀ぢアぷ゜が゘がぇࣔ『ろとぜ 4.11 〜௥Ճ《ぁ〔ߏ଄ମɻ〒ぁ〳〜〤 src,dst ߹い【〔 preloaded_csets 〝⿶⿸゙とぷ〝 cgroup_taskset ߏ଄ମ⿿⿴〘〔ɻ4.11 〜〒ぁぇ〳〝〶〔ײ」ɻ 33/37
  36. cgroup_taskset ߏ଄ମ Table 6: cgroup_taskset ߏ଄ମʢൈਮʣ ܕ ม਺໊ આ໌ list_head

    src_csets Ҡಈର৅〣Ҡಈݩ css_set ぇ〙〟〃゙とぷ list_head dst_csets Ҡಈର৅〣Ҡಈઌ css_set ぇ〙〟〃゙とぷ int nr_tasks ݱࡏ cgroup_taskset 〠ొ࿥《ぁ〛⿶぀のとぜ਺ int ssid ॲཧத〣ぢアぷ゜が゘が • Ҡಈ४උஈ֊〜〙〟⿶〕゙とぷ〝〤ผ〠࣮ࡍ〣Ҡಈॲཧ〜〷゙とぷぇ࡞੒『぀ 34/37
  37. css_set ߏ଄ମ Table 7: css_set ߏ଄ମʢൈਮʣ ܕ ม਺໊ આ໌ cgroup_subsys_state[]

    subsys cgroup_subsys_state ߏ଄ମ〣഑ྻ refcount_t refcount ࣗ਎ʢcss_set ߏ଄ମʣ〭〣ࢀর਺ cgroup dfl_cgrp 〈〣ߏ଄ମ〠〧〷〚。 cgroupʢv2ʣߏ଄ମ list_head tasks task_struct ߏ଄ମ〣 cg_list ぇ〙〟〆぀゙とぷ list_head mg_tasks cgroup 〣Ҡಈぇߦ⿸のとぜぇొ࿥『぀࿈゙݁とぷ list_head cgrp_links ࣗ਎ぇࢀর『぀ cgroup ぇࢦ『 cgrp_cset_links ߏ଄ମ〣゙とぷ list_head mg_preload_node cgroup 〣Ҡಈ࣌〠 css_set ߏ଄ମぇొ࿥『぀〔〶〣࿈゙݁とぷ〠〙〟〃 list_head ߏ଄ମ list_head mg_node cgroup 〣Ҡಈ࣌〠 css_set ߏ଄ମぇొ࿥『぀〔〶〣࿈゙݁とぷ〠〙〟〃 list_head ߏ଄ମ cgroup* mg_src_cgrp のとぜҠಈ࣌〣Ҡಈݩ cgroup 〣 cgroup ߏ଄ମ cgroup* mg_dst_cgrp のとぜҠಈ࣌〣Ҡಈઌ cgroup 〣 cgroup ߏ଄ମ css_set* mg_dst_cset のとぜҠಈ࣌〣Ҡಈઌ cgroup 〣 css_set ߏ଄ମ • mg_〜〤」〳぀ゐアみม਺⿿⿶。〙⿾⿴぀ˠ mg=migration • Ҡಈॲཧ〣్த〜 mg_ 〜〤」〳぀ม਺〠ؔ܎『぀ css_set 〟〞ぇొ࿥「〟⿿〾ॲཧ⿿ਐ〵 35/37
  38. 〳〝〶

  39. 〳〝〶 cgroup 〣಺෦ߏ଄〣ೖ〿ޱ〠গ「〕々౿〴ࠐえ〕⿼࿩ぇ「〳「〔ʢ〙〷〿ʣ ɻ v1 〠〙⿶〛࿩「〳「〔⿿ɺߏ଄ମ〤 v1/v2 ڞ௨〟〣〜ߏ଄ମಉ࢜〣ؔ܎〟え⿾〤ڞ௨〜࢖⿺぀ ⿼࿩ぇ「〔〙〷〿〜『ɻ •

    cgroup 〣ෳ਺֊૚ߏ଄〠߹〘〔ߏ଄ぇऔ〘〛⿶぀ • css_set ߏ଄ମ • のとぜʢtasksetʣˡˠ css_set ߏ଄ମˡˠ cgrp_cset_links ߏ଄ମˡˠ cgroup ߏ଄ମ • ゙アぜぇ〔〞぀〝ぢとぷ⿿ߴ⿶৘ใ〠〙⿶〛〤てゖがぷじひぷ⿿४උ《ぁ〛⿶〔〿『぀ • ࠓճ〣࿩ぇ 〘⿾々〠 cgroup 〣಺෦Ԟਂ。〭ೖ〘〛⿶。ํ⿿૿⿺〔〾⿸ぁ「⿶〜『 w 36/37
  40. Ҏ্ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 37/37