Sistemdə seçilmiş vaxt mənbəyinin performansa təsirinin təhlili

Hazırda Linux nüvəsində BPF əsaslı performans təhlili alətlərini inkişaf etdirən DTrace proqramının tərtibatçılarından biri Brendan Gregg, Netflix-in Cassandra DBMS-ni CentOS-dan Ubuntu-ya köçürərkən qarşılaşdığı performans problemlərinin təhlilindən əldə etdiyi təcrübəni ümumiləşdirdi. Xen əsasında Amazon EC2 bulud. Miqrasiyadan sonra CPU yükü 30% artdı və yazma əməliyyatları zamanı gecikmələr təxminən eyni miqdarda artdı. Göründüyü kimi, vaxt məlumatını intensiv şəkildə tələb edən proqramların işləməsi sistemdə seçilmiş dəqiq vaxt mənbəyindən çox asılıdır.

Əvvəlcə performansın azalmasının səbəbi aydın deyildi və diaqnoz üst və execsnoop yardım proqramlarından istifadə edərək daim işləyən və ya vaxtaşırı işə salınan resurs tutumlu sistem proseslərinin mümkün təsirinin monitorinqi ilə başladı. Amma hər şey göstərirdi ki, resurs istehlakı xüsusi olaraq Java-da yazılmış Cassandra DBMS-də artıb. CentOS və Ubuntu-da paralel olaraq işləyən iki Cassandra prosesinin profilləşdirmə ölçülərini müqayisə etmək, eyni sorğuları emal etmək, ümumi vaxtın təxminən 32%-nin cari vaxt haqqında məlumat əldə etmək üçün istifadə olunan os::javaTimeMillis() xidmətinə zəng etməyə sərf edildiyini göstərdi. .

Bundan sonra, bir dövrədə yüz milyon dəfə System.currentTimeMillis() metodu adlanan sadə Java tətbiqinin yazıldığı bir təcrübə aparıldı. Tətbiqin işlədilməsi göstərdi ki, CentOS-da tamamlanması üçün 13 saniyə, Ubuntu-da isə təxminən 68 saniyə, yəni. 5 dəfə yavaş. C dilində gettimeofday() funksiyasını yüz milyon dəfə çağıran oxşar proqram yazılmışdı, lakin icra edildikdə oxşar nəticələr əldə edildi.

Problemin mənbəyinin cari vaxtın qaytarılması funksiyası olduğu aydınlaşdığından sistemdə müxtəlif dəqiq vaxt mənbələri seçilərkən diqqət göstəricilərin dəyişməsinə yönəldilib. “/sys/devices/system/clocksource/clocksource0/current_clocksource” məzmununa əsasən, “xen” taymeri standart olaraq Linux-u qonaq sistemində işləyərkən istifadə olunurdu. Vaxt mənbəyini "tsc" olaraq dəyişdirdikdən sonra Ubuntu-da test tətbiqinin icra müddəti 68 saniyədən 3.3 saniyəyə qədər azaldı, yəni. 20 dəfə sürətləndi. Bundan əlavə, kvm-saat vaxt mənbəyinin performans testi aparıldı, bu TSC ilə müqayisədə gecikmələrin 20% artdığını göstərdi. $ 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 istifadəçi 0m38.337s.s. echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ vaxt java TimeBench real 29.875m0s istifadəçi 0m3.370s sys 0m3.353s

TSC mənbəyini seçərkən vaxtı əldə etmək üçün yerinə yetirilməsi sistem çağırışı tələb etməyən RDTSC prosessor təlimatından istifadə olunur (təlimat yüksəldilmiş imtiyazlar tələb etmir və CPU-da quraşdırılmış vaxt sayğacından bir dəyər yaradır). Varsayılan olaraq, TSC aktivləşdirilmir, çünki köhnə günlərdə bu mənbə zamanın tədricən sürüşməsini istisna etmirdi, digər prosessorlarda daha dəqiq oxunuşlara nail olmaq üçün proqram tərəfindən tənzimlənir. Prosessorların inkişafı üzrə ixtisaslaşan mühəndisin sözlərinə görə, TSC-dən istifadə zamanı vaxtın dəyişməsi ilə bağlı qorxular çoxdan həqiqətə uyğun deyildi və müasir prosessorlarda bu mənbə illərlə sabit oxunuşlar yarada bilir.

Netflix-də istehsal serverlərinin TSC mənbəyinə dəyişdirilməsi, yazma gecikməsinin 43% azalması ilə nəticələndi və Ubuntu istifadə edərək, “xen” vaxt mənbəyi ilə CentOS ilə işləyən konfiqurasiyalardan 4 dəfə daha sürətli nəticələr əldə etdi. Tədqiqatın nəticələri rəsmi olaraq Xen hipervizoruna əsaslanan AWS EC2 mühitlərində standart TSC vaxt mənbəyindən istifadə etməyi tövsiyə edən Amazon-a köçürüldü (kvm-saat Nitro hipervizoruna əsaslanan mühitlərdə tövsiyə olunur).

Mənbə: opennet.ru

Добавить комментарий