Analisis kesan prestasi sumber masa yang dipilih dalam sistem

Brendan Gregg, salah seorang pembangun DTrace, yang sedang membangunkan alat analisis prestasi berasaskan BPF dalam kernel Linux, meringkaskan pengalaman yang diperoleh daripada menganalisis masalah prestasi yang dihadapi Netflix semasa memindahkan persekitaran Cassandra DBMS daripada CentOS ke Ubuntu. awan Amazon EC2 berdasarkan Xen. Selepas penghijrahan, beban CPU meningkat sebanyak 30% dan kelewatan semasa operasi tulis meningkat kira-kira jumlah yang sama. Ternyata, prestasi aplikasi yang meminta maklumat masa secara intensif sangat bergantung pada sumber masa yang tepat yang dipilih dalam sistem.

Pada mulanya, sebab penurunan dalam prestasi tidak jelas dan diagnosis bermula dengan memantau kemungkinan kesan daripada proses sistem intensif sumber yang berterusan atau dilancarkan secara berkala menggunakan utiliti teratas dan execsnoop. Tetapi semuanya menunjukkan bahawa penggunaan sumber telah meningkat secara khusus dalam DBMS Cassandra, yang ditulis dalam Java. Membandingkan metrik pemprofilan dua proses Cassandra yang berjalan selari pada CentOS dan Ubuntu, memproses pertanyaan yang sama, menunjukkan bahawa kira-kira 32% daripada jumlah masa telah dibelanjakan untuk memanggil os::javaTimeMillis(), yang digunakan untuk mendapatkan maklumat tentang masa semasa .

Selepas ini, percubaan telah dijalankan di mana aplikasi Java ringkas telah ditulis yang dipanggil kaedah System.currentTimeMillis() seratus juta kali dalam satu gelung. Menjalankan aplikasi menunjukkan bahawa ia mengambil masa 13 saat untuk diselesaikan pada CentOS, dan kira-kira 68 saat pada Ubuntu, i.e. 5 kali lebih perlahan. Program serupa telah ditulis dalam C yang dipanggil fungsi gettimeofday() seratus juta kali, tetapi apabila dilaksanakan, hasil yang serupa diperolehi.

Oleh kerana menjadi jelas bahawa punca masalah adalah fungsi mengembalikan masa semasa, perhatian beralih kepada perubahan dalam penunjuk apabila memilih sumber masa tepat yang berbeza dalam sistem. Berdasarkan kandungan "/sys/devices/system/clocksource/clocksource0/current_clocksource", pemasa "xen" telah digunakan secara lalai semasa menjalankan Linux dalam sistem tetamu. Selepas menukar sumber masa kepada "tsc", masa pelaksanaan aplikasi ujian dalam Ubuntu menurun daripada 68 kepada 3.3 saat, i.e. ia menjadi 20 kali lebih pantas. Selain itu, ujian prestasi sumber masa jam-kvm telah dijalankan, yang menunjukkan peningkatan kelewatan sebanyak 20% berbanding 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 pengguna sebenar 1m8.300s 0m38.337s0s echo tsc > /sys/devices/system/clocksource/clocksource29.875/current_clocksource $ time java TimeBench pengguna sebenar 0m0s 3.370m0s sys 3.353m0s

Untuk mendapatkan masa apabila memilih sumber TSC, arahan pemproses RDTSC digunakan, yang pelaksanaannya tidak memerlukan panggilan sistem (arahan itu tidak memerlukan keistimewaan yang tinggi dan menghasilkan nilai dari pembilang masa yang dibina ke dalam CPU). Secara lalai, TSC tidak diaktifkan kerana pada zaman dahulu sumber ini tidak mengecualikan hanyutan masa secara beransur-ansur, yang dalam pemproses lain diselaraskan oleh perisian untuk mencapai bacaan yang lebih tepat. Menurut seorang jurutera yang pakar dalam pembangunan pemproses, kebimbangan tentang peralihan masa apabila menggunakan TSC telah lama tidak benar dan dalam pemproses moden sumber ini boleh menghasilkan bacaan yang stabil selama bertahun-tahun.

Menukar pelayan pengeluaran di Netflix kepada sumber TSC menghasilkan pengurangan 43% dalam kependaman tulis dan mencapai hasil menggunakan Ubuntu yang 4 kali lebih pantas daripada konfigurasi yang menjalankan CentOS dengan sumber masa "xen". Hasil kajian telah dipindahkan ke Amazon, yang secara rasmi mengesyorkan menggunakan sumber masa TSC lalai dalam persekitaran AWS EC2 berdasarkan hipervisor Xen (jam-kvm kekal disyorkan dalam persekitaran berdasarkan hipervisor Nitro).

Sumber: opennet.ru

Tambah komen