ํ์ฌ 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