Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

ࣗݾ঺հʢ1ʣ Ճ౻ହจ Twitter @ten_forward github https://github.com/tenforward ٕज़ϒϩά https://tenforward.hatenablog.com/ ॴଐ גࣜձࣾ IDC や゜アふくぎ / lxc-jp Project / Plamo Linux ゐアふべそ゚がゆ 2/37

Slide 3

Slide 3 text

ࣗݾ঺հʢ2ʣ झຯ〜ぢアふべ〹〘〛〳『ɻぢアふべ〣ओ〠じがぼ゚पล〣࣮૷〠ڵຯ⿿⿴〿〳『ɻ 2007 ೥ ぢアふべぇ࢖〘〔つがもと։ൃʢVirtuozzoʣ 2009 ೥ OpenVZ/LXC ৮〿〕『 2013 ೥ ୈ 1 ճぢアふべܕԾ૝Խ〣৘ใަ׵ձ։࠵ LXC ೔ຊޠ man pages ຋༁&ろがで ʢݱࡏ〤 LXD ؔ࿈〣຋༁ɺlinuxcontainers.org ຋༁〷〹〘〛〳『ʣ 2014 ೥ gihyo.jp 〜 ʮLXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ࣮ݱ『぀ٕज़ʯ ࿈ࡌ։࢝ ݱࡏ CloudNative 〣೾〠৐〿஗ぁ぀ 3/37

Slide 4

Slide 4 text

ຊ೔〣಺༰ cgroup 〣ߏ଄ମؒ〣ؔ܎ぇத৺〠⿼࿩「〳『ɻ • cgroup v1 〣ぢがへぇཧղ『぀্〜෼⿾〘〛⿶぀〝ྑ《〒⿸〟 cgroup 〣಺෦ߏ଄〠〙⿶ 〛આ໌「〳『 • cgroup v1 〜のとぜ⿿ cgroup ؒぇҠಈ『぀ࡍ〣ॲཧ〠ؔ܎『぀ߏ଄ମぇઆ໌「〳『 આ໌〣લఏ〝「〛: • جຊత〠〤 cgroup v1 〠〙⿶〛⿼࿩「〳『⿿ɺߏ଄ࣗମ〤 v2 〜〷มい〿〳【え〣〜 v2 ぇཧղ『぀ࡍ〠〷໾ཱ〙〤』〜『 • આ໌〣よがと〤 4.19 kernel 〜『 جຊత〟 cgroup v1 〣આ໌〠〙⿶〛〤ɺࢲ〣࿈ࡌぇ〉ཡ。〕《⿶ʢୈ 3ʙ5 ճʣ ɻ • LXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ࣮ݱ『぀ٕज़ ʢgihyo.jpʣ 4/37

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

cgroup 〠ؔ܎『぀ॏཁ〟ߏ଄ମ〝 〒〣ؒ〣ؔ܎

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

〒ぁ〜〤⿶〽⿶〽 cgroup ぢぎ〣ߏ଄〠ؔい぀ߏ଄ମぇ〴〛⿶ 〳『ɻ 10/37

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

cgroup ߏ଄ମ • のとぜぇද『 task_struct ߏ଄ମ〠ؔ࿈『぀ゐアみ〤⿶〟⿶ • ぢアぷ゜が゘が〠ؔ࿈『぀ゐアみ〤ଘࡏ『぀ˠ cgroup_subsys_state ߏ଄ମ〣഑ྻ subsysʢޙड़ʣ • やきぐ゚てとふわ〝「〛〣֊૚ߏ଄〤 kernfs_node ߏ଄ମ〣 kn 〜؅ཧ《ぁ぀ • やきぐ゚てとふわ〝「〛〕々〜〟。ɺ゙ぬがと؅ཧ〣؍఺⿾〾֊૚ߏ଄ʢ૆ઌ〹ࢠଙʣぇ〔 〞぀ඞཁੑ⿿⿴぀ • subsys 〝〤ผ〠〷⿸〧〝〙 cgroup_subsys_state ߏ଄ମ self ⿿ଘࡏ『぀ˡॏཁ 13/37

Slide 15

Slide 15 text

〞〈〜のとぜ〝〣ؔ࿈〹゙ぬがと੍ޚ〠ؔ『぀৘ใ⿿؅ཧ《ぁ〛⿶぀〣〜「〼⿸? 〒〣⿴〔〿ぇॱ〠௥〘〛⿶ 〳『ɻ 14/37

Slide 16

Slide 16 text

cgroup_subsys_state ߏ଄ମ • ໊લ௨〿ɺಛఆ〣ʮcgroupʯ〣ಛఆ〣ʮίϯτϩʔϥʔʢαϒγεςϜʣʯ ʢsubsysʣ〣 ʮঢ়ଶʯ ʢstateʣぇ؅ཧ『぀ • 〙〳〿 • 〧〝〙〣 cgroup 〠ର『぀ • ʢ〒〣 cgroup 〜؅ཧ《ぁ぀ʣ〧〝〙〣ぢアぷ゜が゘が〉〝 〠〧〝〙 cgroup_subsys_state ߏ଄ମ⿿ଘࡏ『぀ 15/37

Slide 17

Slide 17 text

ゆ゜なと〝 cgroup_subsys_state ߏ଄ମ〝 css_set ߏ଄ମ 16/37

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

ゆ゜なと〝 cgroup_subsys_state ߏ଄ମ〝 css_set ߏ଄ମʢ࠶ܝʣ 19/37

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

のとぜ〣Ҡಈ〠〽぀ css_set ߏ଄ମ〣ੜ੒ 21/37

Slide 23

Slide 23 text

࣮ࡍ〣てとふわ্〣 css_set ߏ଄ମ び゙が〉〝〠のとぜ⿿ॴଐ『぀ cgroup ぇ೚ҙ〠બ〮぀ˠてとふわ্〠 css_set ߏ଄ମ⿿େྔ 〠ੜ੒《ぁ぀Մೳੑ 〔〕ɺ࣮ࡍ〣てとふわ〜〤ɺ • ෳ਺び゙が⿿ଘࡏ「〛〷ɺ『〮〛〣び゙が⿿ಉ」び゙がߏ଄ぇ「〛⿶぀ • ぢアふべろぼがでをが〤ぢアふべ༻〣 cgroup ֊૚ߏ଄ぇશび゙が〜ಉ」〽⿸〠࡞੒『぀ ʢsystemd 〷ʣ • ろ゚ばと゛ひへ〣のとぜɺಉ」ゆ゜そ゘わ಺〣਌ࢠゆ゜なと〤〰〝え〞〣৔߹ಉ」 cgroup ʢ〣૊ʣ〠ॴଐ『぀ • ぢアふべろぼがでをが⿿ぢアふべ಺〣શゆ゜なとぇಉ」 cgroupʢ〣૊ʣ〠ॴଐ《【぀ ͭ·Γ͋Δఔ౓ͷλεΫͷ͔ͨ·Γʢ૊ʣ͕ಉ͡ css_set ߏ଄ମΛࢀর͍ͯ͠Δ͜ͱ͕΄ͱΜͲ ˠてとふわ⿿ css_set ߏ଄ମ〜⿴〪ぁ぀〽⿸〟〈〝〤〳⿴〟⿶ 22/37

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

のとぜ〝 css_set 〣ؔ܎ • task_struct ߏ଄ମ⿾〾 css_set ߏ଄ମ〭〣ࢀর⿿⿴぀ • ಉ」 css_set ߏ଄ମぇࢀর「〛⿶぀ task_struct ߏ଄ମぇ〙〟〃゙アぜ⿿ଘࡏ『぀ ʢcg_listʣ 24/37

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

cgrp_cset_link ߏ଄ମ 27/37

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

のとぜ〣Ҡಈ

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

のとぜ〣 cgroup ؒҠಈ のとぜ〣Ҡಈॲཧ〤େ 。 4 ஈ֊〠෼⿾ぁ〛⿶぀: 1. Ҡಈݩ४උॲཧ 2. Ҡಈઌ४උॲཧ 3. Ҡಈॲཧ 4. Ҡಈ׬ྃॲཧ ४උॲཧ〜࣮ࡍ〠ࣦഊ『぀Մೳੑ〣⿴぀ॲཧぇߦ⿸ɻҠಈ४උ〠੒ޭ「〔৔߹〠ɺ࣮ࡍ〣Ҡಈॲ ཧぇߦ⿸ɻ 31/37

Slide 34

Slide 34 text

のとぜҠಈॲཧ༻ߏ଄ମ ෳࡶ〠゙アぜ「〔ߏ଄ମ〣৘ใ〹゙アぜぇมߋ『぀〔〶〠ɺ • cgroup 〠〤Ҡಈઐ༻ͷߏ଄ମ⿿४උ《ぁ〛⿶぀ • css_set ߏ଄ମ〠〤Ҡಈ࣌〠࢖༻『぀ઐ༻〣ゐアみม਺⿿४උ《ぁ〛⿶぀ 〳〔ɺҠಈ४උॲཧぇߦ⿸〔〶 • Ҡಈ४උॲཧ〜࢖⿸ม਺ • Ҡಈॲཧ〜࢖⿸ม਺ ⿿〒ぁ〓ぁ४උ《ぁ〛⿶〔〿『぀ɻ 32/37

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

〳〝〶

Slide 39

Slide 39 text

〳〝〶 cgroup 〣಺෦ߏ଄〣ೖ〿ޱ〠গ「〕々౿〴ࠐえ〕⿼࿩ぇ「〳「〔ʢ〙〷〿ʣ ɻ v1 〠〙⿶〛࿩「〳「〔⿿ɺߏ଄ମ〤 v1/v2 ڞ௨〟〣〜ߏ଄ମಉ࢜〣ؔ܎〟え⿾〤ڞ௨〜࢖⿺぀ ⿼࿩ぇ「〔〙〷〿〜『ɻ • cgroup 〣ෳ਺֊૚ߏ଄〠߹〘〔ߏ଄ぇऔ〘〛⿶぀ • css_set ߏ଄ମ • のとぜʢtasksetʣˡˠ css_set ߏ଄ମˡˠ cgrp_cset_links ߏ଄ମˡˠ cgroup ߏ଄ମ • ゙アぜぇ〔〞぀〝ぢとぷ⿿ߴ⿶৘ใ〠〙⿶〛〤てゖがぷじひぷ⿿४උ《ぁ〛⿶〔〿『぀ • ࠓճ〣࿩ぇ 〘⿾々〠 cgroup 〣಺෦Ԟਂ。〭ೖ〘〛⿶。ํ⿿૿⿺〔〾⿸ぁ「⿶〜『 w 36/37

Slide 40

Slide 40 text

Ҏ্ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 37/37