Slide 1

Slide 1 text

ͦͯ͠෺ޠ͸ Կ౓໨͔ͷRedis CPU ෛՙରࡦΛܴ͑Δ

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

RedisͷCPUෛՙରࡦ ύλʔϯ id:y_uuki Kyoto.ͳΜ͔#3

Slide 4

Slide 4 text

Redis ͔ͭͬͯ·͔͢ʁ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

RedisͰCPUফඅ͕ϘτϧωοΫʹͳΔέʔε • ܦݧతʹඵؒ਺ສίϚϯυ໨҆ • ΫΤϦͷछྨ΍ΞΫηεύλʔϯʹΑͬͯɺ ಉ͡ϋʔυ΢ΣΞͰ͋ͬͯ΋CPUར༻཰͸ม Խ͢Δ • CPUੑೳʹΑͬͯɺಉ͡ϫʔΫϩʔυͰ͋ͬ ͯ΋CPUར༻཰͸มԽ͢Δ

Slide 7

Slide 7 text

RedisͷCPUϦιʔεফඅߏ଄ • γϯάϧεϨουͰಈ࡞͢ΔͨΊɺϚϧνί Ξ؀ڥͰ͋ͬͯ΋ɺ1CPUίΞ͔͠࢖͑ͳ͍ • MySQL/PostgreSQL͸ίωΫγϣϯ͝ͱʹ εϨου/ϓϩηεΛىಈ͢ΔϚϧνεϨο υ/ϓϩηεϞσϧ

Slide 8

Slide 8 text

RedisͷCPUෛՙͱઓ͏ͨΊʹ ͲͷΑ͏ͳ࡞ઓΛͱΓ͏Δ͔

Slide 9

Slide 9 text

εέʔϧΞοϓ εέʔϧΞ΢τ CPU1ίΞੑೳ͋͛Δ ਨ௚෼ׂ ࢀর༻εϨʔϒ ਫฏ෼ׂ - ࣗલ ਫฏ෼ׂ - Redis Cluster CPUෛՙ࡟ݮ RedisύΠϓϥΠϯ Lua scripting Linux RPS (Redis modules)

Slide 10

Slide 10 text

εέʔϧΞοϓ • RedisαʔόͷCPUΫϩοΫΛߴ͍΋ͷʹมߋ • EC2ͳΒc4ܥͷΠϯελϯε • ίΞ਺Λ૿΍ͯ͠΋͋·Γҙຯ͸ͳ͍ • CPUར༻཰͕90%͔Β40%ʹͳͬͨ͜ͱ͕͋Δ • Xeon E5-2650L v2 @1.70GHz (Ivy Bridge) • Xeon E5-2670 v3 @2.30GHz (Haswell) • CPUΫϩοΫʹରͯ͠ઢܗʹมԽ͢ΔΘ͚Ͱ͸ ͳ͍

Slide 11

Slide 11 text

CPUෛՙ࡟ݮ

Slide 12

Slide 12 text

CPUෛՙ࡟ݮ - Linux RPS • redisεϨουͱΧʔωϧͷωοτϫʔΫI/Oε ϨουΛผʑͷίΞͰॲཧ͢Δ • RPSͰύέοτॲཧΛCPU0Ͱड͚ͯ • redisεϨουͷCPU AffinityͰύέοτॲཧͱผ # echo ‘3’ > /sys/class/net/eth0/queues/rx-0/rps_cpus # taskset -pc 3-4 $(cat /run/redis/redis-server.pid)

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

https://speakerdeck.com/yuukit/linux-network-performance-improvement-at-hatena

Slide 15

Slide 15 text

CPUෛՙ࡟ݮ - RedisύΠϓϥΠϯ • ΫϥΠΞϯτ͕ϨεϙϯεΛ·ͨͣʹޙଓͷϦΫΤετ Λ౤ೖ͢Δ͜ͱͰɺύέοτԟ෮ճ਺ΛݮΒ͢ • ωοτϫʔΫI/OॲཧΛ·ͱΊ࣮ͯߦͰ͖ΔͷͰɺCPU ॲཧ͕ݮΔ • 1ճͷread(2)Ͱෳ਺ͷίϚϯυΛಡΈग़ͤΔͷͰɺγ εςϜίʔϧճ਺͕ݮΓίϯςΩετεΠον΋ݮΔ • ਅͷRedisύΠϓϥΠϯ(by id:ichirin2501) https://redis.io/topics/pipelining

Slide 16

Slide 16 text

CPUෛՙ࡟ݮ - Lua scripting • ͋ΔίϚϯυͷ݁ՌΛ࣍ͷίϚϯυ͕ར༻͠ ͍ͯΔҰ࿈ͷίϚϯυྻ͸ύΠϓϥΠϯ࣮ߦ ෆՄ • Lua scriptingͳΒҰ࿈ͷίϚϯυྻΛluaίʔ υͱͯ͠ૹΓࠐΈɺ݁Ռ͚ͩड͚औΕΔ • ύΠϓϥΠϯಉ༷ɺΫϥΠΞϯτͱͷԟ෮ճ ਺͕ݮΓɺI/OγεςϜίʔϧΛ·ͱΊΒΕΔ https://redis.io/commands/eval

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

εέʔϧΞ΢τ

Slide 19

Slide 19 text

εέʔϧΞ΢τ-ࢀর༻εϨʔϒ • Redis͸ϚελʔɾεϨʔϒߏ੒͕ͱΕΔ • ࢀরΫΤϦΛεϨʔϒʹ޲͚ͯϚελʔͷෛՙΛ ࡟ݮ • εϨʔϒͷલஈʹϩʔυόϥϯα͕ඞཁ • MySQLͳͲͷRDBMSͰΑ͘ͱΒΕΔ࡞ઓ • ϨϓϦέʔγϣϯ஗Ԇʹ஫ҙ • ॻ͖ࠐΜͩ͸ͣͷσʔλ͕·ͩεϨʔϒʹ఻ൖ ͍ͯ͠ͳ͍Մೳੑ͕͋Δ

Slide 20

Slide 20 text

εέʔϧΞ΢τ- ਨ௚෼ׂ • RedisͷϚελʔϊʔυΛෳ਺༻ҙ͢Δ • ػೳA͸Ϛελʔ1Λ࢖͏ɺػೳB͸Ϛελʔ2Λ ࢖͏ • ػೳͷͿΜ͚ͩɺϚελʔϊʔυΛӡ༻͢Δίε τ͸͋Δ • ͋ΔҰͭػೳͷෛՙ͕ࢧ഑తͳ৔߹ʹ͸࢖͑ͳ͍ • Ωϟογϡ༻్ͳΒ͚ͦͩ͜memcachedΛར༻

Slide 21

Slide 21 text

εέʔϧΞ΢τ- ਫฏ෼ׂ • γϟʔσΟϯάͱ΋ݺͿ • ಉ͡༻్ͷ֤ΩʔΛෳ਺ͷϚελʔϊʔυʹ෼ࢄ • ΩʔͱϊʔυͷϚοϐϯάΛࣗ෼Ͱ΍Δ • Ϛοϐϯάํ๏͸༷ʑ • ϢʔβID xxx ͸ϊʔυYʹϚοϓ • ϢʔβID yyy ͷ৒༨͕ z ͳΒϊʔυXʹϚοϓ • γϟʔυΛ૿ݮͨ͠ͱ͖ͷσʔλ࠶഑ஔ͕೉͢͠ ͗ΔͷͰͱʹ͔͘΍Γͨ͘ͳ͍

Slide 22

Slide 22 text

εέʔϧΞ΢τ- Redis ClusterʹΑΔਫฏ෼ׂ • ࠷ऴԞٛ • Ωʔͷ෼ࢄ഑ஔͱ࠶഑ஔ/ϑΣΠϧΦʔόʔͳͲα ϙʔτ • redis-tribͱ͍͏ެࣜπʔϧͰࣗಈ࠶഑ஔ΋Ͱ͖Δ • ࠷௿6ϊʔυඞཁ • database͕1͔͔ͭ͑͠ͳ͍ • ෳ਺Ωʔʹର͢ΔίϚϯυ࣮ߦʹ஫ҙ • 1000ϊʔυ͙Β͍·Ͱ͸εέʔϧ͢ΔΒ͍͠

Slide 23

Slide 23 text

Slide 24

Slide 24 text

Redis modules • Redus 4.0͔ΒϞδϡʔϧػೳ͕࣮૷͞Εͨ • Redisͷ಺෦APIΛ࢖ͬͯಠࣗͷσʔλߏ଄΍ ίϚϯυΛ࣮૷Ͱ͖ΔʢΒ͍͠ʣ • ΞϓϦέʔγϣϯʹ࠷దԽͨ͠σʔλߏ଄Λ ࡞Ε͹ɺΊͪΌͪ͘ΌCPUޮ཰Α͘ͳΔͷͰ ͸ʁʁʁʁʁ

Slide 25

Slide 25 text

εέʔϧΞοϓ εέʔϧΞ΢τ CPU1ίΞੑೳ͋͛Δ ਨ௚෼ׂ ࢀর༻εϨʔϒ ਫฏ෼ׂ Redis Cluster CPUෛՙ࡟ݮ RedisύΠϓϥΠϯ Lua scripting Linux RPS (Redis modules)

Slide 26

Slide 26 text

෺ޠ͔Βઓུ΁

Slide 27

Slide 27 text

ઓུΛཱͯΔͨΊʹ ͱΓ͏Δઓज़Λ ஌͓ͬͯ͘