Analyse van de prestatie-impact van de in het systeem geselecteerde tijdsbron

Brendan Gregg, een van de ontwikkelaars van DTrace, die momenteel op BPF gebaseerde tools voor prestatieanalyse in de Linux-kernel ontwikkelt, vatte de ervaring samen die is opgedaan bij het analyseren van de prestatieproblemen die Netflix tegenkwam bij het migreren van de Cassandra DBMS van CentOS naar Ubuntu. de Amazon EC2-cloud op basis van Xen. Na de migratie nam de CPU-belasting met 30% toe en namen de vertragingen tijdens schrijfbewerkingen met ongeveer hetzelfde bedrag toe. Het blijkt dat de prestaties van applicaties die intensief tijdinformatie opvragen, sterk afhankelijk zijn van de exacte tijdsbron die in het systeem is geselecteerd.

In eerste instantie was de reden voor de prestatiedaling niet duidelijk en de diagnose begon met het monitoren van de mogelijke impact van voortdurend draaiende of periodiek gelanceerde systeemprocessen die veel middelen vergen, met behulp van de top- en execsnoop-hulpprogramma's. Maar alles wees erop dat het hulpbronnengebruik vooral was toegenomen in het Cassandra DBMS, geschreven in Java. Uit het vergelijken van de profileringsstatistieken van twee Cassandra-processen die parallel draaien op CentOS en Ubuntu en dezelfde vragen verwerken, bleek dat ongeveer 32% van de totale tijd werd besteed aan het aanroepen van os::javaTimeMillis(), dat wordt gebruikt om informatie over de huidige tijd te verkrijgen .

Hierna werd een experiment uitgevoerd waarbij een eenvoudige Java-applicatie werd geschreven die de methode System.currentTimeMillis() honderd miljoen keer in een lus aanriep. Het uitvoeren van de applicatie toonde aan dat het 13 seconden duurde om te voltooien op CentOS, en ongeveer 68 seconden op Ubuntu, d.w.z. 5 keer langzamer. Een soortgelijk programma is geschreven in C dat de functie gettimeofday() honderd miljoen keer aanroept, maar wanneer het wordt uitgevoerd, worden vergelijkbare resultaten verkregen.

Omdat duidelijk werd dat de oorzaak van het probleem de functie was van het teruggeven van de huidige tijd, richtte de aandacht zich op veranderingen in indicatoren bij het kiezen van verschillende bronnen van exacte tijd in het systeem. Afgaande op de inhoud van β€œ/sys/device/system/clocksource/clocksource0/current_clocksource” werd de β€œxen” timer standaard gebruikt bij het draaien van Linux op het gastsysteem. Na het wijzigen van de tijdbron naar "tsc" nam de uitvoeringstijd van de testapplicatie in Ubuntu af van 68 naar 3.3 seconden, d.w.z. het werd 20 keer sneller. Daarnaast werd een prestatietest van de kvm-kloktijdbron uitgevoerd, waaruit bleek dat de vertragingen met 20% toenamen vergeleken met TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ tijd java TimeBench real 1m8.300s gebruiker 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ tijd java TimeBench real 0m3.370s gebruiker 0m3.353s sys 0m0.026s

Om de tijd te verkrijgen bij het selecteren van een TSC-bron, wordt de RDTSC-processorinstructie gebruikt, waarvan de uitvoering geen systeemoproep vereist (de instructie vereist geen verhoogde bevoegdheden en produceert een waarde uit de tijdteller die in de CPU is ingebouwd). Standaard is TSC niet geactiveerd omdat deze bron vroeger een geleidelijke tijdafwijking niet uitsloot, die bij andere processors door software wordt aangepast om nauwkeurigere metingen te verkrijgen. Volgens een ingenieur die gespecialiseerd is in de ontwikkeling van processors zijn de zorgen over tijdsverschuivingen bij het gebruik van TSC al lang niet waar en in moderne processors kan deze bron jarenlang stabiele meetwaarden produceren.

Het overschakelen van productieservers bij Netflix naar een TSC-bron resulteerde in een vermindering van 43% in de schrijflatentie en behaalde resultaten met Ubuntu die vier keer sneller waren dan configuraties met CentOS met een β€œxen”-tijdbron. De resultaten van het onderzoek werden overgedragen aan Amazon, dat officieel aanbeveelde om de standaard TSC-tijdbron te gebruiken in AWS EC4-omgevingen op basis van de Xen-hypervisor (kvm-clock blijft aanbevolen in omgevingen die zijn gebaseerd op de Nitro-hypervisor).

Bron: opennet.ru

Voeg een reactie