cgroup v1概要 / 12th CTStudy

2591343b244565d6199f61c4acd148f9?s=47 tenforward
October 17, 2020

cgroup v1概要 / 12th CTStudy

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

2591343b244565d6199f61c4acd148f9?s=128

tenforward

October 17, 2020
Tweet

Transcript

  1. cgroup v1 ֓ཁ ୈ 12 ճ ぢアふべٕज़〣৘ใަ׵ձ Ճ౻ହจ 2020-10-17 1/16

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

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

    ೥ ୈ 1 ճぢアふべܕԾ૝Խ〣৘ใަ׵ձɹ։࠵ LXC ೔ຊޠ man pages ຋༁&ろがで ʢݱࡏ〤 LXD ؔ࿈〣຋༁ɺlinuxcontainers.org ຋༁〷〹〘〛〳『ʣ 2014 ೥ gihyo.jp 〜 ʮLXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ࣮ݱ『぀ٕज़ʯ ࿈ࡌ։࢝ ݱࡏ CloudNative 〣೾〠৐〿஗ぁ぀ 3/16
  4. ຊ೔〣಺༰ ࠓճʢୈ 12 ճʣ〝࣍ճʢୈ 13 ճʣ〜〤ɺcgroup v1 〣಺෦〠〙⿶〛〣なひてゖア⿿⿴〿〳 『ɻ〒ぁ〠޲々〛〈〈〜〤ɿ •

    cgroup v1 〣಺෦ߏ଄ぇཧղ『぀〣〠ඞཁ〟લఏ஌ࣝ〣঺հ • গ「〕々಺෦త〟ॲཧ〣⿼࿩ ぇ「〳『ɻ શମత〟 cgroup v1 〣આ໌〠〙⿶〛〤ɺࢲ〣࿈ࡌぇ〉ཡ。〕《⿶ʢୈ 3ʙ5 ճʣ ɻ • LXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ࣮ݱ『぀ٕज़ ʢgihyo.jpʣ 4/16
  5. cgroup 〝〤 • のとぜʢゆ゜なとɾと゛ひへʣぇそ゚がゆԽ「〛ɺそ゚がゆ಺〣のとぜ〠ର「〛ڞ௨〣؅ཧ ʢ゙ぬがと੍ݶʣぇߦ⿸ • ぢアふべઐ༻〣ػೳ〜〤〟⿶ 5/16

  6. cgroup 〣ߏ଄ cgroup 〤಺෦త〠 2 〙〣෦෼〠෼々〛ߟ⿺぀〈〝⿿〜 〳『ʢv1, v2 ڞ௨ʣ ɻ •

    ぢぎ • ぢアぷ゜が゘ʢ ʮつゅてとふわʯ〝〷ݺ〥ぁ぀⿿࠷ۙ〤ぢアぷ゜が゘〝ݺ〥ぁ぀〈〝⿿ଟ⿶ʣ ର৅〣゙ぬがと〣؅ཧʢ゙ぬがと੍ݶʣ〠〙⿶〛〣࣮૷ ʮぢぎʯ〠〙⿶〛〤࣮ࡍ〠〒⿸⿶⿸෩〠ݺ〫⿾〤〽。஌〿〳【えɻ֤छ゙ぬがと〠ର『぀੍ݶぇ ߦ⿸ʮぢアぷ゜が゘ʯ〠ର「〛ɺcgroup ࣗମ〣؅ཧ〹 cgroup 〠ॴଐ『぀のとぜ〣؅ཧ〟〞ぇ ߦ⿸෦෼ぇ〈〈〜〤ʮぢぎʯ〝ݺ〨〳『ɻ 〈〣ޙ〣 @masami256 《え〝ɺ࣍ճ〣ࢲ〣ൃද〤ʮぢぎʯ〣ૢ࡞〠ؔ『぀ղઆ〜『ɻ 6/16
  7. cgroup 〣ར༻ํ๏ ʮぢぎʯ〣આ໌ぇ『぀લ〠 cgroup ぇ〞⿸〹〘〛࢖⿸⿾ぇ؆୯〠આ໌「〳『ɻ • cgroupfs 〝⿶⿸ಛघ〟やきぐ゚てとふわぇろげアぷ「〛ར༻『぀ • ௨ৗ〣やきぐ゚てとふわ〣〽⿸〠ぶく゛ぜぷ゙〝やきぐ゚〠〽぀πϦʔߏ଄ぇ〝぀

    • び゙がߏ଄ࣗମ〤 kernfs 〣ػೳぇར༻「〛⿶぀ • kernfs ˠ《〳》〳〟じがぼ゚಺෦〣ػೳ⿿࢖⿸ٙࣅやきぐ゚てとふわ޲々〣ػೳ⿿࣮૷《ぁ〛 ⿶぀ • ぶく゛ぜぷ゙〜άϧʔϓʢcgroupʣぇද『 • ֤ぶく゛ぜぷ゙಺〠 cgroup ぇૢ࡞『぀〔〶〣ٖࣅత〟やきぐ゚⿿ଘࡏ『぀ 7/16
  8. cgroup ぢぎ • cgroupfsʢ֊૚ߏ଄ʣ〣ૢ࡞ • ֊૚ߏ଄ぇ࢖〘〛ゆ゜なとぇそ゚がゆԽ『぀ػೳ • そ゚がゆʢcgroupʣ〝ぢアぷ゜が゘〝のとぜ〣〧〷〚々 8/16

  9. ぢアぷ゜が゘ ର৅゙ぬがと〉〝〠ぢアぷ゜が゘⿿४උ《ぁ぀ • cpu • memory • devices • blkio

    • ʢ〟〞ʣ 9/16
  10. cgroup 〣ぢがへ cgroup 〣ぢがへ〤 kernel ぢがへび゙が〣〞〈〠⿴぀⿾? ぢぎ kernel/cgroup ҎԼ〠ଘࡏ「〳『 •

    cgroup-internal.h • cgroup-v1.c • cgroup.c ぢアぷ゜が゘ ػೳ〉〝〠৭ʑ〟〝〈あ〠⿴〿〳『 • ⿶。〙⿾〣ぢアぷ゜が゘〤 kernel/cgroup ҎԼ • 〒〣ଞ〤ぢがへび゙が಺〜 struct cgroup_subsys ぇ୳「〛。〕《⿶ɻぢ アぷ゜が゘〤 cgroup_subsys ߏ଄ମ〝「〛࣮૷「〳『 10/16
  11. cgroup v1 〣ಛ௃ • ෳ਺֊૚ߏ଄ɿෳ਺〣 cgroupfs ぇろげアぷ「〛ɺ〒ぁ〓ぁ〠೚ҙ〣ぢアぷ゜が゘ぇ〧〷 〚々〾ぁ぀ɻ〔〕「ɺぢアぷ゜が゘ぇ〧〷〚々〾ぁ぀〣〤〧〝〙〣 cgroupfs 〣〴

    • ֊૚〠〤ぢアぷ゜が゘ぇ〧〷〚々぀ඞཁ〤〟⿶ʢsystemd 〤ゆ゜なと؅ཧ〣〔〶〠ぢアぷ゜が ゘〟「〣֊૚ぇ࢖⿸ʣ • cgroup ⿿ѻ⿸のとぜ〣୯Ґ〤εϨου୯Ґ • び゙が಺〣೚ҙ〣そ゚がゆʢぶく゛ぜぷ゙ʣ〠のとぜ⿿ॴଐՄೳ 11/16
  12. cgroup v1 〣ಛ௃ ࣗ༝౓ߴ『、໰୊ˠಛ௃ʹܽ఺ • ෳ਺֊૚ߏ଄ʢ⿶。〙ろげアぷ《ぁ぀⿾ෆ໌ɻෳ਺ろげアぷ《ぁ〔৔߹〜〷֊૚〣ܗঢ়〤〒 ぁ〓ぁҟ〟぀ʣ • ֊૚〭〣ぢアぷ゜が゘〣〧〷〚々〷೚ҙʢ〞〈〠〞〣ぢアぷ゜が゘⿿〧〷〚々〾ぁ぀⿾ෆ ໌ɻ⿶。〙〣ぢアぷ゜が゘⿿֊૚〠〧〷〚々〾ぁ぀⿾〷ෆ໌ʣ

    • ֊૚〣〞〈〠のとぜ⿿ॴଐ『぀⿾〷ෆ໌ɻ֊૚〣ਂ《〷ෆ໌ɻ • ෳ਺〣֊૚⿿⿴぀৔߹ɺ⿴぀のとぜ〤શ֊૚಺〣〞〈⿾〣 cgroup 〠ଐ『぀ 〈〣ࣗ༝౓ߴ『、〟ߏ଄ぇදݱ〜 ぀಺෦ߏ଄ぇ࣋〙ඞཁ⿿⿴぀ˠෳࡶ『、ʂ 〈〣ෳࡶ《⿿ cgroup v2 ⿿։ൃ《ぁ぀ݪҼʢ〣〧〝〙ʣ〠〟〘〔 12/16
  13. cgroup 〣جຊత〟ૢ࡞ • cgroup 〣࢖༻ɿcgroupfs 〣ろげアぷʢやきぐ゚てとふわ໊ɿv1:cgroup, v2:cgroup2ʣ • cgroup 〣࡞੒ɿぶく゛ぜぷ゙࡞੒

    • のとぜ〣ొ࿥ɿ֤ぶく゛ぜぷ゙಺〣 task やきぐ゚ɺcgroup.procs やきぐ゚〠のとぜ〣 IDʢPIDɺTIDʣぇॻ ࠐ〵 • ゙ぬがと੍ݶ〣ઃఆɿ֤ぢアぷ゜が゘༻〣やきぐ゚〠จࣈྻぇॻ ࠐ〵 • のとぜ〤ぶやさ゚ぷ〜〤਌ゆ゜なと〝ಉ」 cgroup 〠ॴଐ『぀ʢinit 〤 root cgroup 〠ॴ ଐ『぀〣〜ಛ〠Ҡಈૢ࡞ぇߦい〟⿶৔߹〤ゆ゜なと〤 root cgroup 〠ॴଐʣ • 5.7 〜਌ゆ゜なと〝〤ҧ⿸ cgroup 〠௚઀ੜ੒〜 ぀〽⿸〠〟〘〔 13/16
  14. cgroup v1 〣ॳظԽ • てとふわ্〜〞〣ぢアぷ゜が゘⿿࢖⿺぀⿾〤ぢアむぐ゚࣌〠ܾఆ • ෳ਺֊૚ߏ଄ɺ〙〳〿てとふわ্〜⿶。〙 cgroupfs ⿿ろげアぷ《ぁ぀⿾ෆఆɻ《〾〠〞 〣び゙が〠〞〣ぢアぷ゜が゘⿿〧〷〚々〾ぁ぀⿾〷ෆఆˠ

    v1 〣ॳظԽॲཧ〤〰〱ろげアぷ ࣌〠ߦいぁ぀ • じがぼ゚ىಈ࣌〣 cgroup ॳظԽॲཧ〤〰〝え〞⿿ v2 ༻ɻぶく゛ぜぷ゙ʢcgroupʣ಺〠 ݱぁ぀やきぐ゚ぇઃఆ『぀ఔ౓ 14/16
  15. cgroup v1 〣ろげアぷ༻まアへ゘ ʢ4.19 ࣌఺ɻ5.2 Ҏ߱มい〿〳『ʣLinux 〜〤ろげアぷॲཧぇ࣮ߦ『぀〝ɺやきぐ゚てとふわ ໊ぇずが〠「〛ɺてとふわ্〜࢖⿺぀やきぐ゚てとふわ〣゙とぷぇݕࡧ「ɺ֘౰〣やきぐ゚てと ふわ〣 file_system_type

    ߏ଄ମぇऔಘ「〳『ɻcgroup v1 〤࣍〣〽⿸〠ఆٛ《ぁ〛⿶〳『 ʢkernel/cgroup/cgroup.cʣ   struct file_system_type cgroup_fs_type = { .name = "cgroup", .mount = cgroup_mount, .kill_sb = cgroup_kill_sb, .fs_flags = FS_USERNS_MOUNT, };   • ろげアぷ〣ࡍ〤 cgroup_mount ؔ਺ • ぎアろげアぷ〣ࡍ〤 cgroup_kill_sb ؔ਺ ⿿ݺ〥ぁ぀〈〝⿿い⿾〿〳『ɻ 15/16
  16. cgroup v1 〣ૢ࡞༻まアへ゘ cgroup 〤 kernfs 〣ػೳぇ࢖༻「〳『ɻ֤छૢ࡞〤 kernfs_syscall_ops ߏ଄ମ〣֤ゐアみ 〠ొ࿥《ぁ〛⿶〳『ʢkernel/cgroup/cgroup-v1.cʣ

    ɻ   struct kernfs_syscall_ops cgroup1_kf_syscall_ops = { .rename = cgroup1_rename, .show_options = cgroup1_show_options, .remount_fs = cgroup1_remount, .mkdir = cgroup_mkdir, .rmdir = cgroup_rmdir, .show_path = cgroup_show_path, };   16/16