ื ื™ืชื•ื— ื”ืฉืคืขืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืžืงื•ืจ ื”ื–ืžืŸ ืฉื ื‘ื—ืจ ื‘ืžืขืจื›ืช

ื‘ืจื ื“ืŸ ื’ืจื’, ืื—ื“ ืžืžืคืชื—ื™ DTrace, ืฉืžืคืชื— ื›ืขืช ื›ืœื™ ื ื™ืชื•ื— ื‘ื™ืฆื•ืขื™ื ืžื‘ื•ืกืกื™ BPF ื‘ืœื™ื‘ืช ืœื™ื ื•ืงืก, ืกื™ื›ื ืืช ื”ื ื™ืกื™ื•ืŸ ืฉื ืฆื‘ืจ ืžื ื™ืชื•ื— ื‘ืขื™ื•ืช ื”ื‘ื™ืฆื•ืขื™ื ื‘ื”ืŸ ื ืชืงืœื” ื ื˜ืคืœื™ืงืก ื‘ืขืช ื”ืขื‘ืจืช ื”- Cassandra DBMS ืžืกื‘ื™ื‘ื•ืช CentOS ืœืื•ื‘ื•ื ื˜ื•. ืขื ืŸ ืืžื–ื•ืŸ EC2 ื”ืžื‘ื•ืกืก ืขืœ Xen. ืœืื—ืจ ื”ื”ื’ื™ืจื”, ืขื•ืžืก ื”ืžืขื‘ื“ ื’ื“ืœ ื‘-30% ื•ื”ืขื™ื›ื•ื‘ื™ื ื‘ืžื”ืœืš ืคืขื•ืœื•ืช ื”ื›ืชื™ื‘ื” ื’ื“ืœื• ื‘ืขืจืš ื‘ืื•ืชื” ื›ืžื•ืช. ื›ืคื™ ืฉืžืชื‘ืจืจ, ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืืคืœื™ืงืฆื™ื•ืช ื”ืžื‘ืงืฉื•ืช ืžื™ื“ืข ื–ืžืŸ ืื™ื ื˜ื ืกื™ื‘ื™ ืชืœื•ื™ ืžืื•ื“ ื‘ืžืงื•ืจ ื”ื–ืžืŸ ื”ืžื“ื•ื™ืง ืฉื ื‘ื—ืจ ื‘ืžืขืจื›ืช.

ื‘ืชื—ื™ืœื”, ื”ืกื™ื‘ื” ืœื™ืจื™ื“ื” ื‘ื‘ื™ืฆื•ืขื™ื ืœื ื”ื™ื™ืชื” ื‘ืจื•ืจื” ื•ื”ืื‘ื—ื•ืŸ ื”ื—ืœ ื‘ื ื™ื˜ื•ืจ ื”ื”ืฉืคืขื” ื”ืืคืฉืจื™ืช ืฉืœ ืชื”ืœื™ื›ื™ ืžืขืจื›ืช ืขืชื™ืจื™ ืžืฉืื‘ื™ื ืฉืคื•ืขืœื™ื ื‘ืื•ืคืŸ ืงื‘ื•ืข ืื• ืžื•ืฉืงื™ื ืžืขืช ืœืขืช ืชื•ืš ืฉื™ืžื•ืฉ ื‘ื›ืœื™ ื”ืฉื™ืจื•ืช ื”ืžื•ื‘ื™ืœื™ื ื•-execsnoop. ืื‘ืœ ื”ื›ืœ ื”ืฆื‘ื™ืข ืขืœ ื›ืš ืฉืฆืจื™ื›ืช ื”ืžืฉืื‘ื™ื ืขืœืชื” ื‘ืžื™ื•ื—ื“ ื‘- Cassandra DBMS, ืฉื ื›ืชื‘ ื‘ื’'ืื•ื•ื”. ื”ืฉื•ื•ืืช ืžื“ื“ื™ ื”ืคืจื•ืคื™ืœ ืฉืœ ืฉื ื™ ืชื”ืœื™ื›ื™ Cassandra ื”ืคื•ืขืœื™ื ื‘ืžืงื‘ื™ืœ ื‘-CentOS ื•ื‘-Ubuntu, ืชื•ืš ืขื™ื‘ื•ื“ ืื•ืชืŸ ืฉืื™ืœืชื•ืช, ื”ืจืืชื” ืฉื›-32% ืžื”ื–ืžืŸ ื”ื›ื•ืœืœ ื”ื•ืฉืงืข ื‘ืงืจื™ืืช os::javaTimeMillis(), ื”ืžืฉืžืฉืช ืœื”ืฉื’ืช ืžื™ื“ืข ืขืœ ื”ืฉืขื” ื”ื ื•ื›ื—ื™ืช. .

ืœืื—ืจ ืžื›ืŸ, ื ืขืจืš ื ื™ืกื•ื™ ื‘ื• ื ื›ืชื‘ื” ืืคืœื™ืงืฆื™ื™ืช Java ืคืฉื•ื˜ื” ืฉื ืงืจืืช ืฉื™ื˜ืช System.currentTimeMillis() ืžืื” ืžื™ืœื™ื•ืŸ ืคืขืžื™ื ื‘ืœื•ืœืื”. ื”ืคืขืœืช ื”ืืคืœื™ืงืฆื™ื” ื”ืจืืชื” ืฉืœื•ืงื— 13 ืฉื ื™ื•ืช ืœื”ืฉืœื™ื ื‘-CentOS, ื•ื›-68 ืฉื ื™ื•ืช ื‘ืื•ื‘ื•ื ื˜ื•, ื›ืœื•ืžืจ. ืคื™ 5 ื™ื•ืชืจ ืื™ื˜ื™. ืชื•ื›ื ื™ืช ื“ื•ืžื” ื ื›ืชื‘ื” ื‘-C ืฉืงืจืื” ืœืคื•ื ืงืฆื™ื” gettimeofday() ืžืื” ืžื™ืœื™ื•ืŸ ืคืขืžื™ื, ืื‘ืœ ื›ืฉื”ื™ื ื‘ื•ืฆืขื”, ื”ืชืงื‘ืœื• ืชื•ืฆืื•ืช ื“ื•ืžื•ืช.

ืžืื—ืจ ืฉื”ืชื‘ืจืจ ืฉืžืงื•ืจ ื”ื‘ืขื™ื” ื”ื•ื ื‘ืคื•ื ืงืฆื™ื” ืฉืœ ื”ื—ื–ืจืช ื”ืฉืขื” ื”ื ื•ื›ื—ื™ืช, ืชืฉื•ืžืช ื”ืœื‘ ื”ื•ืคื ืชื” ืœืฉื™ื ื•ื™ื™ื ื‘ืื™ื ื“ื™ืงื˜ื•ืจื™ื ื‘ืขืช ื‘ื—ื™ืจืช ืžืงื•ืจื•ืช ืฉื•ื ื™ื ืฉืœ ื–ืžืŸ ืžื“ื•ื™ืง ื‘ืžืขืจื›ืช. ืื ืœืฉืคื•ื˜ ืœืคื™ ื”ืชื•ื›ืŸ ืฉืœ "/sys/devices/system/clocksource/clocksource0/current_clocksource", ื˜ื™ื™ืžืจ "xen" ืฉื™ืžืฉ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ืขืช ื”ืคืขืœืช ืœื™ื ื•ืงืก ื‘ืžืขืจื›ืช ื”ืื•ืจื—ืช. ืœืื—ืจ ืฉื™ื ื•ื™ ืžืงื•ืจ ื”ื–ืžืŸ ืœ-"tsc", ื–ืžืŸ ื”ื‘ื™ืฆื•ืข ืฉืœ ืืคืœื™ืงืฆื™ื™ืช ื”ื‘ื“ื™ืงื” ื‘ืื•ื‘ื•ื ื˜ื• ื™ืจื“ ืž-68 ืœ-3.3 ืฉื ื™ื•ืช, ื›ืœื•ืžืจ. ื–ื” ื”ืคืš ืœื”ื™ื•ืช ืžื”ื™ืจ ืคื™ 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 $ ื–ืžืŸ java TimeBench real 1m8.300s ืžืฉืชืžืฉ 0m38.337s $0s29.875 echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ ื–ืžืŸ java TimeBench real 0m3.370s ืžืฉืชืžืฉ 0m3.353s sys 0m0.026s

ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ื–ืžืŸ ื‘ืขืช โ€‹โ€‹ื‘ื—ื™ืจืช ืžืงื•ืจ TSC, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื”ื•ืจืื” ืœืžืขื‘ื“ RDTSC, ืืฉืจ ื‘ื™ืฆื•ืขื” ืื™ื ื• ืžืฆืจื™ืš ืงืจื™ืืช ืžืขืจื›ืช (ื”ื”ื•ืจืื” ืื™ื ื” ื“ื•ืจืฉืช ื”ืจืฉืื•ืช ืžื•ื’ื‘ืจื•ืช ื•ืžืคื™ืงื” ืขืจืš ืžืžื•ื ื” ื”ื–ืžืŸ ื”ืžื•ื‘ื ื” ื‘-CPU). ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, TSC ืื™ื ื• ืžื•ืคืขืœ ืžื›ื™ื•ื•ืŸ ืฉื‘ื™ืžื™ื ืขื‘ืจื• ืžืงื•ืจ ื–ื” ืœื ืฉื•ืœืœ ืกื—ืฃ ื–ืžืŸ ื”ื“ืจื’ืชื™, ืืฉืจ ื‘ืžืขื‘ื“ื™ื ืื—ืจื™ื ืžื•ืชืื ืขืœ ื™ื“ื™ ืชื•ื›ื ื” ื›ื“ื™ ืœื”ืฉื™ื’ ืงืจื™ืื•ืช ืžื“ื•ื™ืงื•ืช ื™ื•ืชืจ. ืœื“ื‘ืจื™ ืžื”ื ื“ืก ื”ืžืชืžื—ื” ื‘ืคื™ืชื•ื— ืžืขื‘ื“ื™ื, ื”ื—ืฉืฉื•ืช ืžืฉื™ื ื•ื™ื™ ื–ืžืŸ ื‘ืขืช โ€‹โ€‹ืฉื™ืžื•ืฉ ื‘-TSC ืื™ื ื ื ื›ื•ื ื™ื ืžื–ืžืŸ ื•ื‘ืžืขื‘ื“ื™ื ืžื•ื“ืจื ื™ื™ื ืžืงื•ืจ ื–ื” ื™ื›ื•ืœ ืœื™ื™ืฆืจ ืงืจื™ืื•ืช ื™ืฆื™ื‘ื•ืช ื‘ืžืฉืš ืฉื ื™ื.

ื”ื—ืœืคืช ืฉืจืชื™ ื™ื™ืฆื•ืจ ื‘ื ื˜ืคืœื™ืงืก ืœืžืงื•ืจ TSC ื”ื‘ื™ื ืœื”ืคื—ืชื” ืฉืœ 43% ื‘ื”ืฉื”ื™ื™ืช ื”ื›ืชื™ื‘ื” ื•ื”ืฉื™ื’ ืชื•ืฆืื•ืช ื‘ืืžืฆืขื•ืช ืื•ื‘ื•ื ื˜ื• ืฉื”ื™ื• ืžื”ื™ืจื•ืช ืคื™ 4 ืžืชืฆื•ืจื•ืช ื”ืžืจื™ืฆื•ืช CentOS ืขื ืžืงื•ืจ ื–ืžืŸ "xen". ืชื•ืฆืื•ืช ื”ืžื—ืงืจ ื”ื•ืขื‘ืจื• ืœืืžื–ื•ืŸ, ืืฉืจ ื”ืžืœื™ืฆื” ืจืฉืžื™ืช ืœื”ืฉืชืžืฉ ื‘ืžืงื•ืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ TSC ื–ืžืŸ ื‘ืกื‘ื™ื‘ื•ืช AWS EC2 ื”ืžื‘ื•ืกืกื•ืช ืขืœ ื”-Xen hypervisor (kvm-clock ื ืฉืืจ ืžื•ืžืœืฅ ื‘ืกื‘ื™ื‘ื•ืช ื”ืžื‘ื•ืกืกื•ืช ืขืœ Nitro hypervisor).

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”