Analisis dampak kinerja dari sumber waktu yang dipilih dalam sistem

Brendan Gregg, salah satu pengembang DTrace, yang saat ini sedang mengembangkan alat analisis kinerja berbasis BPF di kernel Linux, merangkum pengalaman yang didapat dari menganalisis masalah kinerja yang ditemui Netflix saat memigrasikan Cassandra DBMS dari CentOS ke Ubuntu. cloud Amazon EC2 berdasarkan Xen. Setelah migrasi, beban CPU meningkat sebesar 30% dan penundaan selama operasi penulisan meningkat dengan jumlah yang hampir sama. Ternyata, kinerja aplikasi yang secara intensif meminta informasi waktu sangat bergantung pada sumber waktu tepat yang dipilih dalam sistem.

Pada awalnya, alasan penurunan kinerja tidak jelas dan diagnosis dimulai dengan pemantauan kemungkinan dampak dari proses sistem intensif sumber daya yang terus berjalan atau diluncurkan secara berkala menggunakan utilitas top dan execsnoop. Namun semuanya menunjukkan bahwa konsumsi sumber daya telah meningkat khususnya di Cassandra DBMS, yang ditulis dalam Java. Membandingkan metrik profil dari dua proses Cassandra yang berjalan secara paralel di CentOS dan Ubuntu, memproses kueri yang sama, menunjukkan bahwa sekitar 32% dari total waktu dihabiskan untuk memanggil os::javaTimeMillis(), yang digunakan untuk memperoleh informasi tentang waktu saat ini .

Setelah ini, percobaan dilakukan di mana aplikasi Java sederhana ditulis yang disebut metode System.currentTimeMillis() seratus juta kali dalam satu putaran. Menjalankan aplikasi menunjukkan bahwa dibutuhkan waktu 13 detik untuk menyelesaikannya di CentOS, dan sekitar 68 detik di Ubuntu, yaitu. 5 kali lebih lambat. Program serupa ditulis dalam C yang memanggil fungsi gettimeofday() ratusan juta kali, tetapi ketika dijalankan, hasil serupa diperoleh.

Karena sudah jelas bahwa sumber masalahnya adalah fungsi mengembalikan waktu saat ini, perhatian beralih ke perubahan indikator ketika memilih sumber waktu pasti yang berbeda dalam sistem. Dilihat dari isi β€œ/sys/devices/system/clocksource/clocksource0/current_clocksource”, timer β€œxen” digunakan secara default saat menjalankan Linux di sistem tamu. Setelah mengubah sumber waktu menjadi "tsc", waktu eksekusi aplikasi pengujian di Ubuntu berkurang dari 68 menjadi 3.3 detik, yaitu. itu menjadi 20 kali lebih cepat. Selain itu, uji kinerja sumber waktu jam kvm juga dilakukan, yang menunjukkan peningkatan penundaan sebesar 20% dibandingkan dengan TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ waktu java TimeBench real 1m8.300s pengguna 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench nyata 0m3.370s pengguna 0m3.353s sys 0m0.026s

Untuk mendapatkan waktu ketika memilih sumber TSC, instruksi prosesor RDTSC digunakan, yang eksekusinya tidak memerlukan panggilan sistem (instruksi tidak memerlukan hak istimewa yang lebih tinggi dan menghasilkan nilai dari penghitung waktu yang terpasang di dalam CPU). Secara default, TSC tidak diaktifkan karena di masa lalu sumber ini tidak mengecualikan penyimpangan waktu bertahap, yang pada prosesor lain disesuaikan oleh perangkat lunak untuk mencapai pembacaan yang lebih akurat. Menurut seorang insinyur yang berspesialisasi dalam pengembangan prosesor, kekhawatiran tentang pergeseran waktu saat menggunakan TSC sudah lama tidak benar dan pada prosesor modern, sumber ini dapat menghasilkan pembacaan yang stabil selama bertahun-tahun.

Mengalihkan server produksi di Netflix ke sumber TSC menghasilkan pengurangan latensi tulis sebesar 43% dan mencapai hasil menggunakan Ubuntu yang 4 kali lebih cepat dibandingkan konfigurasi yang menjalankan CentOS dengan sumber waktu β€œxen”. Hasil penelitian ditransfer ke Amazon, yang secara resmi merekomendasikan penggunaan sumber waktu TSC default di lingkungan AWS EC2 berdasarkan hypervisor Xen (jam kvm tetap direkomendasikan di lingkungan berdasarkan hypervisor Nitro).

Sumber: opennet.ru

Tambah komentar