์‹œ์Šคํ…œ์—์„œ ์„ ํƒ๋œ ์‹œ๊ฐ„ ์†Œ์Šค์˜ ์„ฑ๋Šฅ ์˜ํ–ฅ ๋ถ„์„

ํ˜„์žฌ Linux ์ปค๋„์—์„œ BPF ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” DTrace ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์ธ Brendan Gregg๋Š” CentOS์—์„œ Ubuntu๋กœ Cassandra DBMS๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ Netflix๊ฐ€ ์ง๋ฉดํ•œ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๋ฉด์„œ ์–ป์€ ๊ฒฝํ—˜์„ ์š”์•ฝํ–ˆ์Šต๋‹ˆ๋‹ค. Xen ๊ธฐ๋ฐ˜์˜ Amazon EC2 ํด๋ผ์šฐ๋“œ. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ›„ CPU ๋กœ๋“œ๋Š” 30% ์ฆ๊ฐ€ํ–ˆ๊ณ  ์“ฐ๊ธฐ ์ž‘์—… ์ค‘ ์ง€์—ฐ๋„ ๊ฑฐ์˜ ๊ฐ™์€ ์–‘๋งŒํผ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ง‘์ค‘์ ์œผ๋กœ ์š”์ฒญํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์€ ์‹œ์Šคํ…œ์—์„œ ์„ ํƒํ•œ ์ •ํ™•ํ•œ ์‹œ๊ฐ„ ์†Œ์Šค์— ๋”ฐ๋ผ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ top ๋ฐ execsnoop ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์†์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์  ์‹œ์Šคํ…œ ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ€๋Šฅํ•œ ์˜ํ–ฅ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ง„๋‹จ์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๊ฒƒ์€ ํŠนํžˆ Java๋กœ ์ž‘์„ฑ๋œ Cassandra DBMS์—์„œ ๋ฆฌ์†Œ์Šค ์†Œ๋น„๊ฐ€ ์ฆ๊ฐ€ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ CentOS์™€ Ubuntu์—์„œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ๋‘ Cassandra ํ”„๋กœ์„ธ์Šค์˜ ํ”„๋กœํŒŒ์ผ๋ง ์ธก์ • ํ•ญ๋ชฉ์„ ๋น„๊ตํ•˜๋ฉด ์ด ์‹œ๊ฐ„์˜ ์•ฝ 32%๊ฐ€ ํ˜„์žฌ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” os::javaTimeMillis()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐ ์†Œ๋น„๋œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. .

๊ทธ ํ›„, ๋ฃจํ”„์—์„œ System.currentTimeMillis() ๋ฉ”์„œ๋“œ๋ฅผ 13์–ต ๋ฒˆ ํ˜ธ์ถœํ•˜๋Š” ๊ฐ„๋‹จํ•œ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๋Š” ์‹คํ—˜์ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ด ๋ณด๋‹ˆ CentOS์—์„œ๋Š” ์™„๋ฃŒํ•˜๋Š” ๋ฐ 68์ดˆ๊ฐ€ ๊ฑธ๋ ธ๊ณ  Ubuntu์—์„œ๋Š” ์•ฝ 5์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. XNUMX๋ฐฐ ๋Š๋ฆผ. gettimeofday() ํ•จ์ˆ˜๋ฅผ ์ˆ˜์–ต ๋ฒˆ ํ˜ธ์ถœํ•˜๋Š” ์œ ์‚ฌํ•œ ํ”„๋กœ๊ทธ๋žจ์ด C๋กœ ์ž‘์„ฑ๋˜์—ˆ์ง€๋งŒ ์‹คํ–‰ ์‹œ ์œ ์‚ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์›์ธ์ด ํ˜„์žฌ ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์—์„œ ์ •ํ™•ํ•œ ์‹œ๊ฐ„์˜ ๋‹ค์–‘ํ•œ ์†Œ์Šค๋ฅผ ์„ ํƒํ•  ๋•Œ ํ‘œ์‹œ๊ธฐ์˜ ๋ณ€ํ™”์— โ€‹โ€‹์ฃผ๋ชฉํ–ˆ์Šต๋‹ˆ๋‹ค. /sys/devices/system/clocksource/clocksource0/current_clocksourceโ€์˜ ๋‚ด์šฉ์œผ๋กœ ํŒ๋‹จํ•˜๋ฉด ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ Linux๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ โ€œxenโ€ ํƒ€์ด๋จธ๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์†Œ์Šค๋ฅผ "tsc"๋กœ ๋ณ€๊ฒฝํ•œ ํ›„ Ubuntu์—์„œ ํ…Œ์ŠคํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด 68์ดˆ์—์„œ 3.3์ดˆ๋กœ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. 20๋ฐฐ ๋นจ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, kvm-clock ํƒ€์ž„ ์†Œ์Šค์— ๋Œ€ํ•œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ๊ฒฐ๊ณผ, TSC ๋Œ€๋น„ ์ง€์—ฐ ์‹œ๊ฐ„์ด 20% ์ฆ๊ฐ€ํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ time java TimeBench ์‹ค์ œ 1m8.300s ์‚ฌ์šฉ์ž 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench ์‹ค์ œ 0m3.370s ์‚ฌ์šฉ์ž 0m3.353s sys 0m0.026s

TSC ์†Œ์Šค๋ฅผ ์„ ํƒํ•  ๋•Œ ์‹œ๊ฐ„์„ ์–ป์œผ๋ ค๋ฉด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ RDTSC ํ”„๋กœ์„ธ์„œ ๋ช…๋ น์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(๋ช…๋ น์€ ๋†’์€ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ CPU์— ๋‚ด์žฅ๋œ ์‹œ๊ฐ„ ์นด์šดํ„ฐ์—์„œ ๊ฐ’์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค). ๊ธฐ๋ณธ์ ์œผ๋กœ TSC๋Š” ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์ด ์†Œ์Šค๊ฐ€ ์ ์ง„์ ์ธ ์‹œ๊ฐ„ ๋“œ๋ฆฌํ”„ํŠธ๋ฅผ ๋ฐฐ์ œํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์„œ์—์„œ๋Š” ๋” ์ •ํ™•ํ•œ ํŒ๋…๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์„œ ๊ฐœ๋ฐœ ์ „๋ฌธ ์—”์ง€๋‹ˆ์–ด์— ๋”ฐ๋ฅด๋ฉด TSC๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‹œ๊ฐ„ ์ด๋™์— ๋Œ€ํ•œ ์šฐ๋ ค๋Š” ์˜ค๋žซ๋™์•ˆ ์‚ฌ์‹ค์ด ์•„๋‹ˆ์—ˆ์œผ๋ฉฐ ์ตœ์‹  ํ”„๋กœ์„ธ์„œ์—์„œ๋Š” ์ด ์†Œ์Šค๊ฐ€ ์ˆ˜๋…„๊ฐ„ ์•ˆ์ •์ ์ธ ํŒ๋…๊ฐ’์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Netflix์˜ ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„๋ฅผ TSC ์†Œ์Šค๋กœ ์ „ํ™˜ํ•œ ๊ฒฐ๊ณผ ์“ฐ๊ธฐ ์ง€์—ฐ ์‹œ๊ฐ„์ด 43% ๊ฐ์†Œํ–ˆ์œผ๋ฉฐ Ubuntu๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ โ€œxenโ€ ์‹œ๊ฐ„ ์†Œ์Šค๋กœ CentOS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์„ฑ๋ณด๋‹ค 4๋ฐฐ ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ ๊ฒฐ๊ณผ๋Š” Amazon์œผ๋กœ ์ด์ „๋˜์—ˆ์œผ๋ฉฐ, Amazon์—์„œ๋Š” Xen ํ•˜์ดํผ๋ฐ”์ด์ € ๊ธฐ๋ฐ˜ AWS EC2 ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋ณธ TSC ์‹œ๊ฐ„ ์†Œ์Šค ์‚ฌ์šฉ์„ ๊ณต์‹์ ์œผ๋กœ ๊ถŒ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค(Nitro ํ•˜์ดํผ๋ฐ”์ด์ € ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์—์„œ๋Š” kvm-clock์ด ์—ฌ์ „ํžˆ ๊ถŒ์žฅ๋จ).

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€