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

cgroup v1 の内部構造 / 13th CTStudy

tenforward
December 05, 2020

cgroup v1 の内部構造 / 13th CTStudy

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

tenforward

December 05, 2020
Tweet

More Decks by tenforward

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  28. cgrp_cset_link ߏ଄ମ
    27/37

    View Slide

  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

    View Slide

  30. のとぜ〣Ҡಈ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  38. 〳〝〶

    View Slide

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

    View Slide

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

    View Slide