เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฅเบทเบญเบเปƒเบ™เบฅเบฐเบšเบปเบš

Brendan Gregg, เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡ DTrace, เบœเบนเป‰เบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš BPF เปƒเบ™ Linux kernel, เป„เบ”เป‰เบชเบฐเบซเบผเบธเบšเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบšเบฑเบ™เบซเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆ Netflix เบžเบปเบšเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ Cassandra DBMS เบˆเบฒเบ CentOS เป„เบ› Ubuntu. Amazon EC2 cloud เบญเบตเบ‡เปƒเบชเปˆ Xen. เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ, เบเบฒเบ™เป‚เบซเบผเบ” CPU เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 30% เปเบฅเบฐเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฝเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ›เบฐเบกเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบ”เบฝเบงเบเบฑเบ™. เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบซเบฑเบ™เบญเบญเบ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบฎเบฝเบเบฎเป‰เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบงเบฅเบฒเบซเบผเบฒเบเบ‚เบทเป‰เบ™เบเบฑเบšเปเบซเบผเปˆเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ—เบตเปˆเป€เบฅเบทเบญเบเปƒเบ™เบฅเบฐเบšเบปเบš.

เปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”, เป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เปเบฅเบฐเบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบซเบผเบทเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเป€เบ›เบฑเบ™เป„เบฅเบเบฐเป†เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป‚เบ”เบเบ™เปเบฒเปƒเบŠเป‰เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ”เป‰เบฒเบ™เป€เบ—เบดเบ‡เปเบฅเบฐ execsnoop. เปเบ•เปˆเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป„เบ”เป‰เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™ Cassandra DBMS, เบ‚เบฝเบ™เปƒเบ™ Java. เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบเบฒเบ™เบงเบฑเบ”เปเบ—เบ profile เบ‚เบญเบ‡เบชเบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Cassandra เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบฐเบซเบ™เบฒเบ™เบเบฑเบ™เปƒเบ™ CentOS เปเบฅเบฐ Ubuntu, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ”เบฝเบงเบเบฑเบ™, เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบ›เบฐเบกเบฒเบ™ 32% เบ‚เบญเบ‡เป€เบงเบฅเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เปƒเบŠเป‰เป‚เบ—เบซเบฒ os::javaTimeMillis(), เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบงเบฅเบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™. .

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เป„เบ”เป‰เบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ”เบเบ—เบตเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Java เบ‡เปˆเบฒเบเบ”เบฒเบเบ–เบทเบเบ‚เบฝเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ System.currentTimeMillis() เบงเบดเบ—เบตเบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบฎเป‰เบญเบเบฅเป‰เบฒเบ™เบ„เบฑเป‰เบ‡เปƒเบ™ loop. เบเบฒเบ™เปเบฅเปˆเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒ 13 เบงเบดเบ™เบฒเบ—เบตเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™ CentOS, เปเบฅเบฐเบ›เบฐเบกเบฒเบ™ 68 เบงเบดเบ™เบฒเบ—เบตเปƒเบ™ Ubuntu, i.e. เบŠเป‰เบฒเบฅเบปเบ‡ 5 เป€เบ—เบปเปˆเบฒ. เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™ C เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ gettimeofday () เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบฎเป‰เบญเบเบฅเป‰เบฒเบ™เป€เบ—เบทเปˆเบญ, เปเบ•เปˆเป€เบกเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบš.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เป€เบงเบฅเบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™, เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเป„เบ”เป‰เบซเบฑเบ™เป„เบ›เบชเบนเปˆเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฅเบทเบญเบเปเบซเบผเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เปƒเบ™เบฅเบฐเบšเบปเบš. เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เป‚เบ”เบเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡ โ€œ/sys/devices/system/clocksource/clocksource0/current_clocksourceโ€, เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบšเป€เบงเบฅเบฒ โ€œxenโ€ เบ–เบทเบเปƒเบŠเป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบกเบทเปˆเบญเปเบฅเปˆเบ™ Linux เปƒเบ™เบฅเบฐเบšเบปเบšเปเบ‚เบ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ›เปˆเบฝเบ™เปเบซเบผเปˆเบ‡เป€เบงเบฅเบฒเป€เบ›เบฑเบ™ "tsc", เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปƒเบ™ Ubuntu เบซเบผเบธเบ”เบฅเบปเบ‡เบˆเบฒเบ 68 เบซเบฒ 3.3 เบงเบดเบ™เบฒเบ—เบต, i.e. เบกเบฑเบ™เบเบฒเบเบกเบฒเป€เบ›เบฑเบ™ 20 เป€เบ—เบปเปˆเบฒเป„เบง. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เป€เบงเบฅเบฒ kvm-clock เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เป€เบŠเบดเปˆเบ‡เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 20% เป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบš TSC. $ 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 real 1m8.300s user 0m38.337s $ sys.0m. echo tsc > /sys/devices/system/clocksource/clocksource29.875/current_clocksource $time java TimeBench real 0m0s เบœเบนเป‰เปƒเบŠเป‰ 3.370m0s sys 3.353m0s

เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฅเบทเบญเบเปเบซเบผเปˆเบ‡ TSC, เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบต RDTSC เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบš (เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เปเบฅเบฐเบœเบฐเบฅเบดเบ”เบกเบนเบ™เบ„เปˆเบฒเบˆเบฒเบเบ•เบปเบงเบ™เบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบขเบนเปˆเปƒเบ™ CPU). เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, TSC เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เป€เบžเบฒเบฐเบงเปˆเบฒเปƒเบ™เบชเบฐ เป„เป เบเปˆเบญเบ™, เปเบซเบผเปˆเบ‡เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เป€เบฅเบทเปˆเบญเบ™เป€เบงเบฅเบฒเป€เบ—เบทเปˆเบญเบฅเบฐเบเป‰เบฒเบง, เป€เบŠเบดเปˆเบ‡เปƒเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบญเบทเปˆเบ™เป†เปเบกเปˆเบ™เบ–เบทเบเบ›เบฑเบšเป‚เบ”เบเบŠเบญเบšเปเบงเป€เบžเบทเปˆเบญเปƒเบซเป‰เบเบฒเบ™เบญเปˆเบฒเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบเบงเปˆเบฒ. เบญเบตเบ‡เบ•เบฒเบกเบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบŠเปˆเบฝเบงเบŠเบฒเบ™เปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ›เป€เบŠเบ”เป€เบŠเบต, เบ„เบงเบฒเบกเบขเป‰เบฒเบ™เบเบปเบงเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบงเบฅเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ TSC เปเบกเปˆเบ™เบšเปเปˆเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบกเบฒเบ”เบปเบ™เบ™เบฒเบ™เปเบฅเบฐเปƒเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปเบซเบผเปˆเบ‡เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบœเบฐเบฅเบดเบ”เบเบฒเบ™เบญเปˆเบฒเบ™เบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบชเปเบฒเบฅเบฑเบšเบ›เบต.

เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบŠเบตเบšเป€เบงเบตเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบขเบนเปˆ Netflix เป„เบ›เบซเบฒเปเบซเบผเปˆเบ‡ TSC เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบตเบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡ 43% เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™ latency เปเบฅเบฐเบšเบฑเบ™เบฅเบธเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเปƒเบŠเป‰ Ubuntu เบ—เบตเปˆเป„เบงเบเบงเปˆเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเปƒเบŠเป‰ CentOS 4 เป€เบ—เบปเปˆเบฒเบ”เป‰เบงเบเปเบซเบผเปˆเบ‡เป€เบงเบฅเบฒ "xen". เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบชเบถเบเบชเบฒเป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒ Amazon, เป€เบŠเบดเปˆเบ‡เปเบ™เบฐเบ™เปเบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เป‚เบ”เบเปƒเบŠเป‰เปเบซเบผเปˆเบ‡เป€เบงเบฅเบฒ TSC เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก AWS EC2 เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Xen hypervisor (kvm-clock เบเบฑเบ‡เบ„เบปเบ‡เบ–เบทเบเปเบ™เบฐเบ™เปเบฒเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Nitro hypervisor).

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™