Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

VS Codeのプロセスモデルとデバッグ方法 - パフォーマンスと安定性を支えるアー...

ypresto
November 20, 2021

VS Codeのプロセスモデルとデバッグ方法 - パフォーマンスと安定性を支えるアーキテクチャ

VSCodeはとても高速なのに、たまにもたついたり、CPUをとても使うときがありませんか?例えばVimやEmacsの拡張を使っていると、もたつきを顕著に感じることがあるはずです。
VSCodeのパフォーマンスを支えるプロセスモデルについて説明し、そのデバッグ方法について紹介します。時間が許せば、実際に重い原因を見つけてPRした話も紹介します。

https://www.youtube.com/watch?v=J2li3qYgu9U&t=9590s

ypresto

November 20, 2021
Tweet

More Decks by ypresto

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ ZQSFTUP ϓϨετͱݺ͹Εͯ·͢ w 4PGUXBSF&OHJOFFS݉ 'JHNBͱ͔ॻ͘ 6*%FTJHOFS w 'PPE5FDIͷελʔτΞοϓͰಇ͍͍ͯ·͢ 


    ৯඼ͷ0&.੡଄ͳͲ͕Ͱ͖Δ#UP#αʔϏε࡞ͬͯ·͢ʂ  ˞͜ͷεϥΠυ͸ࢿྉ࡞ͬͯͯ৸๥ͨ͠ͷͰጻչͷͨΊʹ௥Ճ͠·ͨ͆͠ !ZVZB@QSFTUP
  2. ϓϩηεΛ෼͚Δͱ͸ λεΫͷ෼཭ ˞74$PEFͱ"UPNͷ࣮૷ݴޠͰ͋Δ+4ͷੈքʹ͸ 
 ɹεϨουͷ֓೦͕࣮࣭ͳ͍ΜͰ͢ ϝϞϦڞ༗͕ݶఆతͳ8PSLFS͸͋Γ·͢ ϓϩηε" λεΫ λεΫ λεΫ

    ϓϩηε಺Ͱ͸ 
 ॱ൪ʹ࣮ߦ 
 
 લͷλεΫͷ 
 ׬ྃ଴ͪʹ ϓϩηε# λεΫ λεΫ λεΫ ϓϩηε"ͷ 
 λεΫͷঢ়ଶʹ 
 Өڹ͞Εͳ͍ 6*ૢ࡞ͷλεΫͷ଴͕ͪ࣌ؒ௕͍ͱʮॏ͍ʯͱײ͡Δঢ়ଶʹ 
  3. ϓϩηεΛ෼͚Δͱ͸ σʔλͷ෼཭ ϓϩηε" ϓϩηε# λεΫ# λεΫ$ ͓ޓ͍ʹ 
 ௚઀ΞΫηε͸ 


    Ͱ͖ͳ͍ 
 ௨৴͸Մೳ λεΫ" σʔλ λεΫ" λεΫ$ λεΫ# ϓϩηε಺͸0, ը໘ 
  4. ϓϩηεΛ෼͚Δ͜ͱͰ 6*ͷԠ౴ੑ্͕͕Δ ىಈ଎౓΋ ֦ுػೳ ֦ுػೳ 3FOEFSFSϓϩηε 6* &YUFOTJPO)PTU %0. 3FOEFSFSϓϩηε

    ΤσΟλػೳ ϓϥάΠϯ ϓϥάΠϯ %0. ϓϥάΠϯ ϓϥάΠϯ ϓϥάΠϯ ˞"UPN͸ඪ४ͷ6*ػೳ·Ͱ΋ϓϥάΠϯͱͯ͠෼͚͍ͯͯɺىಈ࣌ʹ 
 ɹϒϥοΫϗʔϧΑΓॏ͍ͱ༗໊ͳOPEF@NPEVMFTΛىಈ࣌ʹେྔʹಡΈࠐΜͰ͍ͨͷ΋ॏ͍ݪҼͰͨ͠Ͷ͐ɾɾ ΤσΟλػೳ ͍ͭͰ΋൓Ԡ ϓϩηεؒ௨৴ 
 &YUFOTJPO"1* 
  5. ϓϩηεΛ෼͚Δ͜ͱͰ ҆ఆੑ্͕͕Δ ϑϦʔζ ֦ுػೳ 3FOEFSFSϓϩηε &YUFOTJPO)PTU ฤूதͷ 
 ςΩετ 3FOEFSFSϓϩηε

    ΤσΟλػೳ ϑϦʔζ ϓϥάΠϯ ϓϥάΠϯ ϓϥάΠϯ ϓϥάΠϯ ฤूதͷςΩετ ˢແࣄʂ ΤσΟλػೳ ˢ͋ͬɾɾɾ ϓϩηεؒ௨৴ 
 &YUFOTJPO"1* 
  6. &YUFOTJPO"1*͕εΰΠʂ ΤσΟλ͕ཉ͍͠΋ͷ ิ׬ͱ͔ 
 ֦ுػೳ͕΄͍͠΋ͷ 6*ͱ͔  
 ੔ཧ͞ΕͨܗͰఆٛͯ͠ɺ*1$Ͱ࣮૷ ௚઀ΤσΟλଆΛ͍͡ΒͣࡁΉΑ͏ʹ

     &YUFOTJPO"1* +454 (JU 7JN (JU)VC ิ׬ɺܯࠂ όʔδϣϯ؅ཧ ΩʔϘʔυ αΠυόʔ ˢϓϦΠϯετʔϧˢ ϓϩηεؒ௨৴ *1$ ςΩετฤूͱ6*ʹઐ೦ͯ͠௒ܰྔʹ 
 ͦΕҎ֎͸ཪํʹ೚ͤΔ &YUFOTJPO)PTU ˢޙ෇͚ˢ
  7. ΋ͪΖΜܽ఺΋͋Γ·͢ ֦ுػೳͷϓϩηεΛ෼͚Δͱɾɾ w ϓϩηεؒ௨৴ͰଟগΦʔόϔου͕ൃੜ +40/ʹͨ͠Γɺ໭ͨ͠Γ  w ௨৴ΛڬΉͨΊ 74$PEFͷ ࣮૷͕ෳࡶʹͳΔ

    w ΩʔόΠϯσΟϯά֦ு 7JN&NBDͳͲ ͕ॏ͘ͳΔڪΕ 
 ͜ͷ͋ͱ࿩͠·͢  w σόοά͕೉͘͠ͳΔ ͚Ͳ74$PEFͷศརػೳ͋Γ 
 ΍ΓํΛ͜ͷ͋ͱ࿩͠·͢ 
  8. ΩʔόΠϯσΟϯά֦ு͕ผϓϩηεͰ͋Δฐ֐ 7JN&NBDT͕ଞͷ ͓ߦّͷѱ͍ ֦ுʹҾͬுΒΕΔ৔߹͕͋Δ ॏ͍֦ு ΤσΟλ 7JN +Λԡ͢ ΧʔιϧΛ 


    ԼʹҠಈ͸ 
 ·ͩʙʙʁ ˞Ͱ͖ͨΒ7JN͸ΤσΟλͷجຊػೳʹ͢Δ͔ɺଞͷ֦ுͱ͸ผϓϩηεʹͯ͠΄͍͠ 
 ɹͨͩผϓϩηε࣮ߦͷൈ͚ಓ࡞Γͨ͘ͳ͍ͷ͸Θ͔Δ ˞5ZQF4DSJQUͱ͔͸͞ΒʹαϒϓϩηεΛ্ཱͪ͛ͯΔͷͰɺ଴ͪঢ়ଶͷؒͣͬͱॏ͍Θ͚Ͱ͸ͳ͍ 3FOEFSFS &YU)PTU 
  9. ΋͘͡ w 74$PEF͕ڧ͍݅ 
 ˠѹ౗తͳ࢖͍΍͢͞ͱѹ౗తͳεϐʔυ w ϓϩηεͷ࿩ 
 ˠλεΫͱσʔλΛ෼཭ 


    ˠԠ౴ੑͱ҆ఆੑ w σόοάͷ࣌ؒɿࣄྫͭʴσϞ 
 ໛ٖࣄྫͭ 
 ࣮ࣄྫͭ 
  10. &MFDUSPO 
 .BJO 3FOEFSFS 3FOEFSFS 4IBSFE &YUFOTJPO 
 )PTU ộ

    5ZQF4DSJQU͸ 
 UTTFSWFS 'JMF8BUDIFS 4FSWJDF 4FBSDI 
 4FSWJDF 5FSNJOBM ΑΓৄ͍͠ 
 ϓϩηεϞσϧ 3FOEFSFS͸ 
 8JOEPX͝ͱʹ 
 ্ཱ͕ͪΔ ˣ࣮࣭ϒϥ΢β ˣཪํͨͪ ˣݴޠಛ༗ͷπʔϧͳͲ ˞ཪํ͕ࢥͬͨҎ্ʹଟͯ͘ͼͬ͘Γ͠·ͨ͠ɺଞʹ΋͋Δ͔΋ (PͳΒ 
 HPQMT 1ZUIPOͳΒ 
 1ZMBODF ϒϥ΢β OPEF ֎෦πʔϧ ˞&YUFOTJPO)PTUͷதͰ֤֦ுػೳ͕࣮ߦ͞Εɺ 
 ɹͦΕΒ͕ݴޠಛ༗ͷπʔϧͳͲΛىಈ͠·͢ ˢ4FUUJOHT4ZOD 
 ɹ&YUFOTJPO؅ཧͳͲ΋ FTMJOU4FSWFS 
 ͱ͔ 
  11. &MFDUSPO 
 .BJO 3FOEFSFS 3FOEFSFS 4IBSFE &YUFOTJPO 
 )PTU ộ

    5ZQF4DSJQU͸ 
 UTTFSWFS FTMJOU4FSWFS 
 ͱ͔ 'JMF8BUDIFS 4FSWJDF 4FBSDI 
 4FSWJDF 5FSNJOBM ΑΓৄ͍͠ 
 ϓϩηεϞσϧ 3FOEFSFS͸ 
 8JOEPX͝ͱʹ 
 ্ཱ͕ͪΔ ˣ࣮࣭ϒϥ΢β ˣཪํͨͪ ˣݴޠಛ༗ͷπʔϧͳͲ ˞ཪํ͕ࢥͬͨҎ্ʹଟͯ͘ͼͬ͘Γ͠·ͨ͠ɺଞʹ΋͋Δ͔΋ (PͳΒ 
 HPQMT 1ZUIPOͳΒ 
 1ZMBODF ϒϥ΢β OPEF ֎෦πʔϧ ˞&YUFOTJPO)PTUͷதͰ֤֦ுػೳ͕࣮ߦ͞Εɺ 
 ɹͦΕΒ͕ݴޠಛ༗ͷπʔϧͳͲΛىಈ͠·͢ ˢ4FUUJOHT4ZOD 
 ɹ&YUFOTJPO؅ཧͳͲ΋ ˡͬͪ͜ͷ 
 ϓϩϑΝΠϧ͸ 
 ࠓճ͸ର৅֎ 
  12. ॏ͍ϓϩηεͷ੾Γ෼͚ํ w ࠭࣌ܭPSϨΠϯϘʔΧʔιϧɺʮԠ౴͕͋Γ·ͤΜʯදࣔ 
 ˠ3FOEFSFS ϒϥ΢β  Ίͬͨʹͳ͍͸ͣ  w

    7JN&NBDT֦ு࢖༻࣌ʹΩʔೖྗʹҰॠ൓Ԡ͠ͳ͍ ϓνϑϦ 
 ˠ&YUFOTJPO)PTU w ิ׬΍δϟϯϓɺܯࠂͷදࣔɺσόοάૢ࡞౳͕଴ͨ͞ΕΔ 
 ˠݴޠಛ༗πʔϧ UTTFSWFSͳͲ 
 ˠ&YUFOTJPO)PTU ଞͷ֦ுػೳʹҾͬுΒΕͨ৔߹ͳͲ ͦΕͧΕͷϓϩϑΝΠϧΛऔಘ͢Δͱɺ੾Γ෼͚Ͱ͖Δ 3FOEFSFS &YUFOTJPO 
 )PTU 5ZQF4DSJQU͸ 
 UTTFSWFS ˞"UPN͸&YUFOTJPO)PTU͕ͳ͔ͬͨͷͰ3FOEFSFS͚ͩݟΕ͹Α͔ͬͨ 
  13. &YUFOTJPO)PTUͷॏ͍֦ுͷνΣοΫ    ˢॏ͍ͨͱײͨ͡ૢ࡞Λ 
 ɹ΋͏Ұ౓΍ͬͯ࠶ݱͤ͞Δ ˢఀࢭϘλϯ  ˡݪҼ͕&YUFOTJPO)PTUʹ͋Ε͹

    
 ɹ1SP fi MFͷ͕࣌ؒ௕͘ͳΔ ˞ݴޠಛ༗ͷπʔϧ ࢠϓϩηε ͷ 
 ৔߹͸͜͜ʹ͸൓ө͞Εͳͦ͞͏ 3VOOJOH&YUFOTJPOT͔Β 
  14. &YUFOTJPO)PTUͷϑϦʔζΛσόοά͢Δ ֦ுػೳ͕ѱ͞Λ͍ͯ͠Δ৔߹ͷݪҼௐࠪ w $PEF"DUJPOTͱ͍͏ͷ͸ 
 ϦϑΝΫλީิͷ͜ͱ w ϦϑΝΫλީิΛ 
 ఏڙ͢ΔͨΊʹɺ

    
 ௕େͳUTϑΝΠϧͷ 
 ύʔε͔Β΍͍ͬͯͨ  ˞ଞͷ֦ு͔ΒUTTFSWFSʹΞΫηε 
 Ͱ͖ͳ͍͜ͱ͕ཧ༝Ͱ΋͋Δ͚Ͳ 
 QBSTFͷϓϩηε͸෼͚ͯ΄͔ͬͨ͠ -PBEͨ݁͠Ռ 
  15. &YUFOTJPO)PTUͷϓϩϑΝΠϧ෼ੳ #VUUPOͱॻ͘ͱϓνϑϦ͢Δ৔߹  %FWFMPQFS5PPMTˠ+41SP fi MFS  -PBEϘλϯΛԡͯ͠ɺ 
 อଘͨ͠DQVQSP

    fi MFϑΝΠϧΛ։͘ ˞.BDͩͱDQVQSP fi MFUYUͱ͍͏ 
 ໊લͰอଘ͞Εͯ͠·͏ͷͰɺ 
 UYUΛ࡟ͬͯ͋͛ͳ͍ͱ։͚ͳ͍Ͱ͢ 
 
  16. 13ͨ͠࿩ ϓνϑϦݪҼ͸54֦ுͱΤσΟλଆͷิ׬ػೳͷ߹Θͤͩͩͬͨ͠ c TUSc ม਺TUSʹ࢖͑Δϝιου͕ީิˠߜΓࠐ·Εͯͯগͳ͍ #VUUc ϩʔΧϧม਺ʴFYQPSU͞ΕͯΔશީิ ྫ֎͋Δ͔΋ Λදࣔˠେړେړʂʂ #VUUPO͚ͩग़ͯ΄͍͚͠Ͳɺͷ࣌఺ͰશީิऔΓʹ͍͘ͷͰͦΕ͕ॏ͍

    IUUQTHJUIVCDPNNJDSPTPGUWTDPEFCMPCFYUFOTJPOTUZQFTDSJQUMBOHVBHFGFBUVSFTTSDMBOHVBHF'FBUVSFTDPNQMFUJPOTUT- 3FOEFSFS &YUFOTJPO 
 )PTU UTTFSWFS TVHHFTU.PEFMUT 
 P0ʢτϦΨʔจࣈͩͳʣ 
 ʮิ׬͘Εɺ 
 ϓϨϑΟοΫε͸ͳ͍ʯ 54֦ுͷHFU$PNQMFUJPO*UFNT Λσόοάˠcͷͱ͖ۭจࣈྻͰิ׬ϦΫΤετ౤͛ͯΩϟϯηϧͯ͠ͳ͍ Ϣʔβʔʮʯ େྔͷม׵ॲཧʂ େྔͷީิ Ϣʔβʔʮ#ʯ 3FOEFSFS &YUFOTJPO 
 )PTU UTTFSWFS TVHHFTU.PEFMUT 
 P0ʢଓ͖ͩͳɺ 
 ͱΓ͋͑ͣ͸લͷΛ଴͔ͭ 
  17. 13ͨ͠࿩ IUUQTHJUIVCDPNNJDSPTPGUWTDPEFQVMM w ͷޙʹ#͕ೖྗ͞Εͨ࣌఺Ͱɺ 
 શ݅औಘΛΩϟϯηϧͯ͠#ʹϚον͢ΔީิΛऔΓʹߦ͘ 
 WTDPEFຊମͷิ׬දࣔػೳΛมߋ  w

    ϦδΣΫτͱͳΓ·ͨ͠ˣΘ͔Δ 
 5ZQF4DSJQUҎ֎Ͱ΋શһ͜Ε͕ద༻͞Εͯڍಈ͕มΘͬͪΌ͏ 
 #VUUPOΛόοΫεϖʔεͰʹͨ͠ͱ͖࠶औಘ͕૸Δ w .Z$PNQMFUJPO*UFNͷੜ੒ίετΛݮΒ͔͢ɺ 
 5ZQF4DSJQUͷํͰฦ͢਺ΛݮΒ͢ͷ͸Ͳ͏ɺͱ͍͏ྲྀΕʹ ˞ଓ͖͕͋Γ·͢ϑϥά͕͋ΔͷͰՄೳ͚ͩͲɺ5ZQF4DSJQUͷίʔυΛ͍͡Δͷ͕େมͰ·ͩͰ͆͢ 
  18. ·ͱΊ w ϓϩηεΛ෼͚ΔϓϥάΠϯΞʔΩςΫνϟΛ࠾༻ͨ͠ 
 ˠ֦ுੑ͕ߴ͍··ʹɺ଎ͯ͘ɺ҆ఆͰɺ҆৺Ͷʂ w ςΩετฤूҎ֎͕ॏ͘ͳΔ͜ͱ͕͋Δɺ7JN&NBDT΋ʮҎ֎ʯʹೖΔ w ඞཁʹԠͯ͡ॏ͍ՕॴΛಛఆ͠·͠ΐ͏ w

    σόοάର৅ͷϓϩηε͸ʮϒϥ΢βʯʮ֦ுʯʮݴޠπʔϧ ʯͷ 
 ͭʹ෼͚ΒΕɺલऀͭ͸ϓϩϑΝΠϧΛऔΔ͜ͱ͕Ͱ͖·͢ w ͦͷॏ͔ͬͨ݁ՌΛJTTVFʹషΔͱଟ෼։ൃऀత͕ͱͯ΋ॿ͔Δ͸ͣ