Tizimda tanlangan vaqt manbasining ishlash ta'sirini tahlil qilish

DTrace dasturchilaridan biri, hozirda Linux yadrosida BPF-ga asoslangan unumdorlikni tahlil qilish vositalarini ishlab chiqayotgan Brendan Gregg Netflix Cassandra DBMSni CentOS-dan Ubuntu-ga ko'chirishda duch kelgan ishlash muammolarini tahlil qilishdan olingan tajribani umumlashtirdi. Xen asosidagi Amazon EC2 buluti. Migratsiyadan so'ng CPU yuki 30% ga oshdi va yozish operatsiyalari paytida kechikishlar taxminan bir xil miqdorda oshdi. Ma'lum bo'lishicha, vaqt ma'lumotlarini intensiv ravishda talab qiladigan ilovalarning ishlashi tizimda tanlangan aniq vaqt manbasiga bog'liq.

Dastlab, unumdorlikning pasayishi sababi aniq emas edi va tashxis yuqori va execsnoop yordam dasturlari yordamida doimiy ishlaydigan yoki vaqti-vaqti bilan ishga tushiriladigan resurs talab qiladigan tizim jarayonlarining mumkin bo'lgan ta'sirini kuzatish bilan boshlandi. Ammo hamma narsa shuni ko'rsatdiki, Java-da yozilgan Cassandra DBMSda resurslar iste'moli o'sgan. CentOS va Ubuntu-da parallel ravishda ishlaydigan ikkita Cassandra jarayonining profil ko'rsatkichlarini taqqoslash, bir xil so'rovlarni qayta ishlash, umumiy vaqtning taxminan 32% joriy vaqt haqida ma'lumot olish uchun ishlatiladigan os::javaTimeMillis() ga qo'ng'iroq qilish uchun sarflanganligini ko'rsatdi. .

Shundan so'ng, tajriba o'tkazildi, unda oddiy Java ilovasi yozilgan bo'lib, u bir tsiklda yuz million marta System.currentTimeMillis() usuli deb ataladi. Ilovani ishga tushirish shuni ko'rsatdiki, CentOS-da bajarish uchun 13 soniya, Ubuntu-da esa taxminan 68 soniya, ya'ni. 5 marta sekinroq. C tilida gettimeofday() funksiyasini yuz million marta chaqirgan shunga o'xshash dastur yozilgan, ammo bajarilganda shunga o'xshash natijalar olingan.

Muammoning manbai joriy vaqtni qaytarish funktsiyasi ekanligi ayon bo'lganligi sababli, tizimda aniq vaqtning turli manbalarini tanlashda ko'rsatkichlarning o'zgarishiga e'tibor qaratildi. "/sys/devices/system/clocksource/clocksource0/current_clocksource" mazmuniga ko'ra, "xen" taymeri Linuxni mehmon tizimida ishga tushirishda sukut bo'yicha ishlatilgan. Vaqt manbasini "tsc" ga o'zgartirgandan so'ng, Ubuntu'da test dasturining bajarilish vaqti 68 dan 3.3 soniyagacha kamaydi, ya'ni. 20 marta tezlashdi. Bundan tashqari, kvm-soat manbasining ishlash testi o'tkazildi, bu TSC bilan solishtirganda kechikishlarning 20% ​​ga oshganini ko'rsatdi. $ 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 foydalanuvchi 0m38.337s.s. echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ vaqt java TimeBench real 29.875m0s foydalanuvchi 0m3.370s sys 0m3.353s

TSC manbasini tanlashda vaqtni olish uchun RDTSC protsessorining ko'rsatmasi qo'llaniladi, uning bajarilishi tizim chaqiruvini talab qilmaydi (ko'rsatma yuqori imtiyozlarni talab qilmaydi va protsessorga o'rnatilgan vaqt hisoblagichidan qiymat hosil qiladi). Odatiy bo'lib, TSC faollashtirilmaydi, chunki eski kunlarda bu manba boshqa protsessorlarda aniqroq o'qishga erishish uchun dasturiy ta'minot tomonidan sozlangan vaqtni bosqichma-bosqich siljishini istisno qilmagan. Protsessorlarni ishlab chiqishga ixtisoslashgan muhandisning so'zlariga ko'ra, TSC-dan foydalanishda vaqt o'zgarishi haqidagi qo'rquvlar uzoq vaqtdan beri noto'g'ri bo'lib kelgan va zamonaviy protsessorlarda bu manba yillar davomida barqaror ko'rsatkichlarni keltirib chiqarishi mumkin.

Netflix’dagi ishlab chiqarish serverlarini TSC manbasiga almashtirish yozish kechikishini 43% ga qisqartirishga olib keldi va Ubuntu yordamida natijalarga erishildi, bu β€œxen” vaqt manbasi bilan CentOS bilan ishlaydigan konfiguratsiyalarga qaraganda 4 baravar tezroq. Tadqiqot natijalari Xen gipervisoriga asoslangan AWS EC2 muhitlarida standart TSC vaqt manbasidan foydalanishni rasman tavsiya qilgan Amazonga o'tkazildi (kvm-soat Nitro gipervisoriga asoslangan muhitlarda tavsiya etiladi).

Manba: opennet.ru

a Izoh qo'shish