Slide 1

Slide 1 text

Ծ૝Խج൫ͷϦιʔε࠷దԽ id:taketo957
 ͸ͯͳɾϖύϘٕज़େձ@෱Ԭ

Slide 2

Slide 2 text

ࣗݾ঺հ • id:taketo957 • ͸ͯͳͰΠϯϑϥ • 2016೥4݄ೖࣾ • ࢼ༻ظ͕ؒऴΘͬͨ • ޿ࠂपΓ • ֶੜ࣌୅ • ਪનͱ͔ • ISUCON

Slide 3

Slide 3 text

ର৅ௌऺ • ओʹֶੜ • ΠϯϑϥΤϯδχΞͬͯͲΜͳ͜ͱͯ͠Δͷʁ • େֶͰษڧͯ͠Δ͜ͱ͕ͲΜͳ෦෼Ͱ໾ཱͭͷʁ • ͦͷଞ • ෳ਺ͷେن໛ͳαʔϏεӡ༻ͷཪଆ

Slide 4

Slide 4 text

໨࣍ • ͸ͯͳʹ͓͚ΔԾ૝Խج൫ • Ծ૝Խج൫ͷӡ༻্ͷ՝୊ • Ծ૝Խج൫্ͰͷϦιʔε഑ஔͷ࠷దԽ • ·ͱΊ

Slide 5

Slide 5 text

͸ͯͳʹ͓͚ΔԾ૝Խج൫

Slide 6

Slide 6 text

WebγεςϜͷయܕߏ੒ -# 1SPYZ "QQMJDBUJPO %BUBCBTF

Slide 7

Slide 7 text

WebγεςϜͷయܕߏ੒ -# 1SPYZ "QQMJDBUJPO %BUBCBTF $16 .FN %JTL /FU $16 .FN %JTL /FU $16 .FN %JTL /FU $16 .FN %JTL /FU

Slide 8

Slide 8 text

͸ͯͳʹ͓͚ΔWebαʔϏε

Slide 9

Slide 9 text

αʔϏεͱϩʔϧ͕
 ͱʹ͔͘ଟ͍

Slide 10

Slide 10 text

͸ͯͳʹ͓͚ΔԾ૝Խ • ෺ཧαʔόΛԾ૝Խͯ͠Δ • ෺ཧϗετɿ໿xxx୆ • Ծ૝Խϗετɿ໿xxx୆ • αʔϏεɿxxxݸ • ϩʔϧɿxxxݸ • Ծ૝Խج൫ʹ͸XenΛ࢖ͬͯΔ

Slide 11

Slide 11 text

Xenͱ͸ • Ծ૝ϚγϯϞχλ • ෳ਺ͷOSΛฒྻʹಈ࡞ͤ͞Δ͜ͱ͕Ͱ͖Δ • Dom0ͱDomU • Dom0͕Xenͷ؅ཧ΍ϋʔυ΢ΣΞΞΫηεΛ୲͏ • DomU͸ϋʔυ΢ΣΞʹ௚઀ΞΫηε͠ͳ͍ • AWSͷཪଆ΋Xen

Slide 12

Slide 12 text

XenͷΠϝʔδ • ϋΠύʔόΠβ͕ϋʔυ΢ΣΞ্Ͱ࣮ߦ • Xenىಈ࣌ʹDom0͕ىಈ • γεςϜىಈޙɼDomUͳͲ͕ىಈ ϋʔυ΢ΣΞ 9FOϋΠύʔόΠβ %PN %PN6 %PN6 ήετ্ͷϓϩηε ήετ্ͷϓϩηε ήετ্ͷϓϩηε

Slide 13

Slide 13 text

Ծ૝Խαʔόͷߏங@͸ͯͳ • ϋʔυ΢ΣΞϦιʔεͷར༻཰ͷ޲্ • ϩʔϧ͝ͱʹඞཁͳϦιʔε͸
 ͍͍ܾͩͨ·ͬͯΔ • ྫ͑͹ɼ • CPU͕ۭ͍͍ͯΔˠWebαʔό • IO͕ۭ͍͍ͯΔˠDBαʔό • ಉډΛආ͚Δ૊Έ߹Θͤ • ෛՙͷߴ͍΋ͷಉ࢜͸ආ͚Δ • ಉ͡༻్ͷ΋ͷ͸ආ͚Δ • ॏཁͳϗετ͸͚͞Δ %PN ϋʔυ΢ΣΞ %PN6 8FCαʔό %PN6 %#αʔό %PN6 Ωϟογϡαʔό

Slide 14

Slide 14 text

Ծ૝Խج൫ͷӡ༻্ͷ՝୊

Slide 15

Slide 15 text

Ծ૝ԽपΓͷΦϖϨʔγϣϯ • Ծ૝ԽपΓͷΦϖϨʔγϣϯ • ৽ن࡞੒ • ෛՙରࡦ • Ҿͬӽ͠ • ϋʔυ΢ΣΞނো • ࡟আ • αʔϏεఫୀ • ৽ن࡞੒ɺҾͬӽ͠ͷࡍʹ͸ • DomU࡞੒ઌͷDom0Λબఆ͠ͳ͍ͱ͍͚ͳ͍

Slide 16

Slide 16 text

ήετ࡞੒࣌ʹؾʹ͔͚Δ͜ͱʢϦιʔεฤʣ • CPU࢖༻཰ɺDiskIOɺফඅిྗΛؾʹ͔͚Δ • ϩʔϧ͸Կͳͷ͔ • ͦͷϩʔϧ͸Ͳͷ͘Β͍ͷϦιʔεΛফඅ͢Δͷ͔ • ϥοΫͷফඅిྗ͸େৎ෉͔ʁ • ৑௕ੑΛ࣋ͨͤΔ • ిݯ͕མͪͨ৔߹ • Dom0͝ͱࢮΜͩ৔߹ • εΠον͕ࢮΜͩ৔߹ • ਌ͷϝϞϦͱσΟεΫ༰ྔʹ༨༟͸͋Δ͔

Slide 17

Slide 17 text

ήετ࡞੒࣌ʹؾʹ͔͚Δ͜ͱʢࣾ಺ࣄ৘ฤʣ • ݹ͍؀ڥ͸ආ͚Δ • ੲ͔Β͋Δࣺ͍ͯͨ؀ڥʹ͸࡞Βͳ͍ • ࣺͯΔ༧ఆͷ΋ͷʹ͸࡞Βͳ͍ • ϥοΫ΍αϒωοτͷੑ࣭ • ஔ͖৔ॴ͕ܾ·͍ͬͯΔϩʔϧ • ωοτϫʔΫػث • ॏཁͳϗετͱͷಉډ͸ආ͚Δ • etc…

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Dom0৬ਓͷ஀ੜ

Slide 20

Slide 20 text

؅ཧπʔϧ͕͋Δͱ͸͍͑
 ๲େͳϗετ͔ΒબͿͷݫ͍͠

Slide 21

Slide 21 text

୆਺͕૿Ճ͍ͯ͘͠ͱ
 ਓؒͷצͰ͸ରԠͰ͖ͳ͍

Slide 22

Slide 22 text

࠷దͳ഑ஔΛ͠ͳ͍ͱͲ͏ͳΔ͔ • ಉډϗετʹҾ͖ͣΒΕͯ਌͝ͱࢮ͵ • ϒϨʔΧʔ͕མͪͨΒಉ͡ిݯܥ౷ͷ΋ͷ͕શ໓ • ωοτϫʔΫଳҬ͕٧·ͬͨΓ

Slide 23

Slide 23 text

Dom0બͼ͸
 αʔϏεΛ҆ఆՔಇͤ͞ΔͨΊʹ
 ۃΊͯॏཁͳ࡞ۀ

Slide 24

Slide 24 text

ߟྀ͢Δ߲໨͕ଟ͍͔Β
 બఆʹ͔͔Δίετ΋ߴ͍

Slide 25

Slide 25 text

ίετ͕ߴ͍બఆ࡞ۀΛ
 ࣗಈԽ͍ͨ͠

Slide 26

Slide 26 text

Ծ૝Խج൫ͷϦιʔε࠷దԽ

Slide 27

Slide 27 text

໰୊ͷ֓ཁ • εϖοΫ͕ܾ·ͬͨDomUΛͲ͜ʹೖΕΔͷ͕࠷ద͔ ˠ૊Έ߹Θͤ࠷దԽ໰୊ʢࠞ߹੔਺ܭը໰୊ʣ %PN ϋʔυ΢ΣΞ $16 .FN /FU %JTL %PN ϋʔυ΢ΣΞ $16 .FN /FU %JTL %PN ϋʔυ΢ΣΞ $16 .FN /FU %JTL %PN6 8FCαʔό $16 .FN /FU %JTL %PN6 %#αʔό $16 .FN /FU %JTL %PN6 1SPYZαʔό $16 .FN /FU %JTL … … ʁ ʁ ʁ

Slide 28

Slide 28 text

ϏϯύοΩϯά໰୊ • ༩͑ΒΕͨՙ෺Λ٧ΊΔശͷ࠷খ਺Λݟ͚ͭΔ໰୊ • ۩ମྫ • 8୆ͷ৽ंΛτϥοΫͰҠಈ͢Δ • ৽ंͷॏྔ
 [33, 61, 58, 41, 50, 21, 60, 64] • τϥοΫͷ༰ྔ
 120 • τϥοΫͷ࠷খ਺ΛٻΊΔ

Slide 29

Slide 29 text

ϏϯύοΩϯά໰୊ͷΠϝʔδ ॏ͞ɿ33 ॏ͞ɿ61 ॏ͞ɿ58 ॏ͞ɿ41 ॏ͞ɿ50 ॏ͞ɿ21 ॏ͞ɿ60 ॏ͞ɿ64 ༰ྔɿ120 ༰ྔɿ120 1 2 3 4 5 6 7 8 1 2 τϥοΫ͸Կ୆ඞཁͳͷ͔ʁ

Slide 30

Slide 30 text

ϏϯύοΩϯά໰୊ͷΠϝʔδ ॏ͞ɿ33 ॏ͞ɿ61 ॏ͞ɿ58 ॏ͞ɿ41 ॏ͞ɿ50 ॏ͞ɿ21 ॏ͞ɿ60 ॏ͞ɿ64 ༰ྔɿ120 ༰ྔɿ120 1 2 3 4 5 6 7 8 1 2 xi,j 2 {0 , 1} 8 i, j yj 2 {0, 1} 8j X j xij = 1 8 i ☓ X i wixij  c 8 j c=120

Slide 31

Slide 31 text

ϏϯύοΩϯά໰୊ͷఆࣜԽ X i yi xi,j 2 {0 , 1} 8 i, j yj 2 {0, 1} 8j X j xij = 1 8 i X i wixij  c 8 j xi,j  yj 8 i, j ໨తؔ਺ ม਺ ੍໿ →࠷খԽ͢Δ

Slide 32

Slide 32 text

DomUׂ౰໰୊ • ϏϯύοΩϯά໰୊Λn࣍ݩʹ֦ுͨ͠΋ͷΛ࢖͏ • ϏϯύοΩϯάͰߟྀͨ͠ͷ͸ॏ͞ͷΈ • ߟྀ͢Δ͜ͱ • CPU਺ʢΦʔόʔίϛοτ཰Λߟྀʣ • ϝϞϦ༰ྔ • σΟεΫ༰ྔ • ಉډͷ૊Έ߹Θͤ • ࣾ಺ͷӡ༻ࣄ৘

Slide 33

Slide 33 text

DomUׂ౰໰୊ͷΠϝʔδ %PN6 $16 .FN %JTL 1 %PN6 $16 .FN %JTL 2 %PN6 $16 .FN %JTL 3 %PN6 $16 .FN %JTL 4 %PN6 $16 .FN %JTL 5 %PN6 $16 .FN %JTL 6 %PN $16 .FN %JTL %PN $16 .FN %JTL 1 2 DomU͸Կ୆ඞཁͳͷ͔ʁ

Slide 34

Slide 34 text

DomUׂ౰໰୊ͷΠϝʔδ %PN6 $16 .FN %JTL 1 %PN6 $16 .FN %JTL 2 %PN6 $16 .FN %JTL 3 %PN6 $16 .FN %JTL 4 %PN6 $16 .FN %JTL 5 %PN6 $16 .FN %JTL 6 %PN $16 .FN %JTL %PN $16 .FN %JTL 1 2 Xi,j 2 {0, 1} 8i, j Yimemi X j mem0 j Xi,j 8i Yicpui X j cpu0 j Xi,j 8i Yidiski X j disk0 j Xi,j 8i Yi 2 {0, 1}8i ☓ X i Xi,j = 1 8j

Slide 35

Slide 35 text

ಉډͷ૊Έ߹ΘͤΛߟྀ %PN6 $16 .FN %JTL 1 %PN6 $16 .FN %JTL 2 %PN6 $16 .FN %JTL 3 %PN6 $16 .FN %JTL 4 %PN6 $16 .FN %JTL 5 %PN6 $16 .FN %JTL 6 %PN $16 .FN %JTL %PN $16 .FN %JTL 1 2 Xi,j 2 {0, 1} 8i, j Yimemi X j mem0 j Xi,j 8i Yicpui X j cpu0 j Xi,j 8i Yidiski X j disk0 j Xi,j 8i Yi 2 {0, 1}8i X j2W ebservers Xi,j  1 8i 8FC 8FC ☓ αʔϏεʹ͍ͭͯ΋ಉ༷ͷ੍໿ͰදݱͰ͖Δ

Slide 36

Slide 36 text

ࣾ಺ͷӡ༻ࣄ৘Λߟྀ %PN6 $16 .FN %JTL 1 %PN6 $16 .FN %JTL 2 %PN6 $16 .FN %JTL 3 %PN6 $16 .FN %JTL 4 %PN6 $16 .FN %JTL 5 %PN6 $16 .FN %JTL 6 %PN $16 .FN %JTL %PN $16 .FN %JTL 1 2 Xi,j 2 {0, 1} 8i, j Yimemi X j mem0 j Xi,j 8i Yicpui X j cpu0 j Xi,j 8i Yidiski X j disk0 j Xi,j 8i Yi 2 {0, 1}8i Xi,j = 0 9i, j 1SPYZ ☓ 1SPYZ༻

Slide 37

Slide 37 text

DomUׂ౰໰୊ͷఆࣜԽ Xi,j 2 {0, 1} 8i, j Yimemi X j mem0 j Xi,j 8i Yicpui X j cpu0 j Xi,j 8i Yidiski X j disk0 j Xi,j 8i Yi 2 {0, 1}8i X i Xi,j = 1 8j ໨తؔ਺ ม਺ ੍໿ X i Yi →࠷খԽ͢Δ Yi Xi,j 8i, j X j2W ebservers Xi,j  1 8i Xi,j = 0 9i, j X j2DBservers Xi,j  1 8i ಉډͷ૊Έ߹Θͤ ӡ༻ࣄ৘

Slide 38

Slide 38 text

͜ΕΛղ͘

Slide 39

Slide 39 text

࣮૷ • Python 2.7 • PuLPΛ࢖ͬͨ • શମͷྲྀΕ • DomUͱDom0ͷσʔλΛఆٛ • ม਺ͷఆٛʢࠓճ͸2͚ͭͩʣ
 • ໨తؔ਺ͱ੍໿৚݅Λॻ͖Լ͍ͯ͘͠ X = LpVariable.dicts('X', (range(M), range(N)), 0, 1, LpBinary) Y = LpVariable.dicts('Y', range(M), 0, 1, LpBinary) for i in range(M): m += Y[i] * dom0s[i]["mem"] * 0.8 >= lpSum([domus[j]["mem"] * X[i][j] for j in range(N)])

Slide 40

Slide 40 text

খ͍͞σʔληοτͰݕূ • ن໛ײ • Dom0 73୆ • DomU 284୆ • ࣮ߦ࣌ؒ
 21.537sec • ݁Ռ
 ௚ײతʹ͸ਖ਼͍݁͠Ռɺվળͷ༨஍͸͋Δ

Slide 41

Slide 41 text

࣮ݱͰ͖Δ͜ͱ • શମͷ഑ஔͷ࠷దԽ • ࠓ·Ͱͷ͸ͬͪ͜ • DCҠసͱ͔͠ͳ͍͔͗Γ͸ग़൪͕ͳ͍ • ཧ૝తͳ഑ஔʹ͠Α͏ͱ͢Δͱॱ൪ʹਓ͕ࢮ͵ • ৽ن௥Ճ࣌ͷDom0બఆͷࣗಈԽ • ੍໿͸ͦͷ··࢖͍·ΘͤΔ • DomU͕1୆ • Dom0͕ঢ়ଶΛ΋ͬͨঢ়ଶͰ։࢝

Slide 42

Slide 42 text

ࠓޙ΍Γ͍ͨ͜ͱ • ߴ଎Խ͍ͨ͠ • Ϧιʔεͷ࣌ܥྻͷมԽΛߟྀ͍ͨ͠ • ωοτϫʔΫతͳτϙϩδʔ΋ߟྀ͍ͨ͠ • ະ஌ͷϩʔϧʹର͢ΔରԠ

Slide 43

Slide 43 text

ʢ৽ଔ͕ʣֶੜʹ఻͍͑ͨ͜ͱ • ݚڀྖҬͰ͸༷ʑͳݚڀ͕ͳ͞Ε͍ͯΔ • େ఍ͷ৔߹Ԡ༻ݚڀͷࣄྫͱ͔΋͋Δ • ࠓճѻͬͨ໰୊΋݁ߏݚڀ͞Εͯͨ • ࣮຿ͷݱ৔ͩͱ • ۩ମతͳ໰୊ɾधཁͱσʔλ͸͋Δ • ద੾ͳख๏Λબ୒ͯ͠ɺࣗ෼ͷ؀ڥʹద༻Ͱ͖Δྗ • جૅతͳ஌ࣝ͸େࣄ • ঢ়گΛద੾ʹϞσϦϯάͰ͖Δྗ • υϝΠϯಛ༗ͷ஌ࣝΛ׆͔ͯ͠໰୊ղܾ

Slide 44

Slide 44 text

·ͱΊ • ͸ͯͳʹ͓͍ͯ͸DCͷ෺ཧαʔόΛԾ૝Խͯ͠Δ • ϗεςΟϯάܥͱҧͬͯ؀ڥ͕ۉ࣭Ͱͳ͍ • Xenͷӡ༻पΓͷ࿩ͱ՝୊ • Ϧιʔε࠷దԽ • ϏϯύοΩϯά໰୊ͱͦͷ֦ுʹ͍ͭͯ • ӡ༻Λվળ͢ΔͨΊͷπʔϧΛ࡞ͬͨͯΔ

Slide 45

Slide 45 text

ਓ͕ؒ΍ΔՁ஋ͷͳ͍
 ࡞ۀΛ໓΅͍ͨ͠

Slide 46

Slide 46 text

׬