Jak znaleźć przyczynę ogromnej różnicy w wydajności między dwoma identycznymi serwerami Ubuntu?

9

Korzystam z dwóch serwerów Dell R410 w tej samej szafie centrum danych (za modułem równoważenia obciążenia). Oba mają tę samą konfigurację sprzętową, uruchamiają Ubuntu 10.4, mają te same pakiety zainstalowane i działają na tych samych serwerach Java (bez innych obciążeń) i widzę znaczną różnicę wydajności między nimi.

Różnica w wydajności jest najbardziej widoczna w średnich czasach odpowiedzi obu serwerów (mierzonych w samej aplikacji Java, bez opóźnień sieciowych): jeden z nich jest o 20-30% szybszy niż drugi, bardzo konsekwentnie.
Kiedyś dstatzastanawiałem się, czy jest więcej przełączników kontekstu, IO, swapów itp., Ale nie widzę powodu, by to robić. Przy takim samym obciążeniu (bez zamiany, praktycznie bez operacji we / wy) użycie procesora i obciążenie jest wyższe na jednym serwerze.

Tak więc różnica wydaje się być związana głównie z procesorem, ale chociaż prosty test porównawczy procesora przy użyciu sysbench(przy wyłączonym całym obciążeniu) dał różnicę, wynosił tylko 6%. Może więc nie tylko wydajność procesora, ale także pamięci.

Do tej pory sprawdziłem:

  • Wersje oprogramowania układowego wszystkich komponentów (identyczne)
  • Ustawienia systemu BIOS (zrobiłem zrzut przy użyciu dmidecode, i to nie wykazało różnic)
  • Porównałem /proc/cpuinfo, bez różnicy.
  • Porównałem wydajność cpufreq-info, bez różnicy.
  • Parametry Java / JVM (ta sama wersja i parametry w obu systemach)

Poza tym całkowicie wymieniłem RAM kilka miesięcy temu, bez żadnego efektu.

Zgubiłem się. Co mogę zrobić, aby dowiedzieć się, co się dzieje?

AKTUALIZACJA : Tak! Oba serwery działają teraz równo. Były to ustawienia „power CRAP”, jak jim_m_som, jak je nazwano w komentarzach. Opcje BIOS dla „zarządzania energią” były w „Maksymalna wydajność” na szybkim serwerze, a w „Active Power Controller” (ustawienie domyślne od Dell) na drugim. Oczywiście zapomniałem, że ustawiłem to dwa lata temu i nie zrobiłem tego na wszystkich serwerach. Dziękujemy wszystkim za bardzo pomocny wkład!

the.duckman
źródło
2
Możliwe, że masz wadliwą pamięć RAM. Jeśli twoja aplikacja jest obciążona siecią, może to być cokolwiek na stosie sieciowym.
Kyle,
2
Czy możesz porównać „Zaawansowane ustawienia procesora” w systemie BIOS? - może być w stanie uruchomić komendę ipmitool? Czy prędkość pamięci RAM jest taka sama? Zakładam, że sprawdziłeś, czy masz podtrzymanie bateryjne na dyskach / kontrolerach ... tylko myślenie „na głos” ... czy pamięć RAM na obu urządzeniach jest taka sama? zarejestrowany czy niezarejestrowany ... AH ... czy sprawdziłeś, że „power CRAP” - ACPI jest wyłączony na obu serwerach?
jim_m_somewhere
2
jeśli obsługują te same dane, czy istnieje jakieś równoważenie obciążenia z fw lub dns? jak wyglądają statystyki sieci? czy konfiguracje Java również są identyczne? czy rozmiar stosu Java jest taki sam? strzelanie w ciemność na tym.
au_stan,
2
Czy konfiguracja oprogramowania jest naprawdę identyczna? Na przykład, czy AppArmor jest włączony na jednym, a wyłączony na drugim? Sprawdź także „dmesg” pod kątem błędów.
Anton Cohen,
1
Czy sprawdziłeś przewodowy kabel sieciowy, port na Switchu, a także widzisz Iopsa lub sprawdzasz stan HDD ... Pozdrawiam

Odpowiedzi:

6

Dwa pomysły, w zależności od tego, jak daleko chcesz się posunąć:

  1. Zamień dyski obu serwerów i sprawdź, czy wydajność pozostaje na sprzęcie, czy porusza się wraz z oprogramowaniem.

  2. Porównaj dane wyjściowe, /opt/dell/toolkit/bin/syscfg -o complete-bios-config.outjeśli możesz w jakiś sposób oszukać ten pakiet do zainstalowania.

chutz
źródło
Dane wyjściowe dstat pokazały dość wyraźnie, że różnica w wydajności występuje również wtedy, gdy nie dzieje się we / wy. Instalacja syscfg na Ubuntu 10.4 wydaje się w rzeczywistości trudna. Już porównywałem wyjście z dmidecode, czy sysctl pokaże więcej? Może jest mniej pracy ze zdjęciami każdego ekranu BIOS-u i porównywanie ich. Mogę tego spróbować.
the.duckman
1
Zamieniając dyski, nie chciałem badać IO, ale raczej, czy to konfiguracja oprogramowania (błędna) powoduje spowolnienie (na przykład nieparzysty parametr jądra).
chutz
3

Więcej możliwości wyświetlania i różnicowania:

  • sysctl -a (upewnij się, że parametry jądra są takie same)
  • cat / proc / interrupts (Może jest jakiś inny bałagan sprzętu?)
  • Lista czujników ipmitool (długie ujęcie, ale sprawdź, czy nie występują różnice w poziomie, przegrzanie, problemy z napięciem itp.)
SolarKennedy
źródło
Dzięki, niestety nie ma oczywistej różnicy w wynikach tych poleceń.
the.duckman
2
Wszystkie różnice są oczywiste, jeśli porównasz pliki za pomocą oprogramowania . Proszę odnieść się do tego pytania: Jak odróżnić dwa pliki konfiguracyjne?
Skyhawk
3

Wygląda na to, że może to być związane ze mną moduł równoważenia obciążenia. Kiedy mówisz „to samo obciążenie”, jak to mierzysz?
Czy bezpośrednio testujesz każdy serwer, stosując obciążenie testowe w izolacji?
lub Czy przykładasz jakieś obciążenie do modułu równoważenia obciążenia i patrzysz na wyniki na obu serwerach?

Jeśli robisz to drugie (mierząc obciążenie na obu serwerach za pomocą modułu równoważenia obciążenia), moduł równoważenia obciążenia może nie dzielić obciążenia dokładnie równomiernie między serwery (20% odchylenie dla pary serwerów nie jest rzadkością w zależności od tego, w jaki sposób moduł równoważenia obciążenia decyduje o tym, kto otrzymuje które żądania), co powoduje, że jeden serwer przyjmuje większe obciążenie, a tym samym działa słabo.

(Jeśli bezpośrednio testujesz każdy serwer osobno, bez korzystania z modułu równoważenia obciążenia jako pośrednika, i upewniłeś się, że każdy komponent jest identyczny (w zależności od wersji producenta) między obydwoma systemami, to jestem ze stratą - Nie mogę wymyślić żadnego innego mierzalnego powodu tego rodzaju różnicy wydajności między identycznymi serwerami)

voretaq7
źródło
Masz rację, nasz moduł równoważenia obciążenia również to robi - jest to właściwie funkcja. Zmierzyłem więc na wiele sposobów i tak, nawet „odtworzyłem” te same żądania na każdym serwerze z osobna. Ale nawet po prostu umieszczenie całego ruchu na żywo na jednym serwerze przez pewien czas i porównanie czasu, jaki każdy serwer potrzebuje na przygotowanie odpowiedzi, daje takie same wyniki, jak bardziej złożone konfiguracje.
the.duckman
Hmm - w tym przypadku jestem oficjalnie zakłopotany - jeśli wszystko jest naprawdę identyczne (i wydaje się, że całkiem dobrze to potwierdziliśmy), powinieneś mieścić się w granicach marginesu błędu w zakresie wyników (± 5-7%) - ty widzę wariacje ponad dwa razy większe i nie mam pojęcia, dlaczego: - /
voretaq7,
3

Wypróbuj niektóre narzędzia do profilowania, albo profilowanie systemowe, jak perf, lub Java, takie jak VisualVM .

Z perf możesz profilować działający proces Java przez PID lub profilować test porównawczy. Spójrz na oba systemy, zobacz, gdzie wolny system spędza swój czas.

apt-get install linux-tools-common linux-tools

Następnie coś takiego:

perf record -e cpu-cycles -p <pid>

lub

perf record -a -g <benchmark command>

następnie

perf report

Kilka pomysłów, jak systemy mogą działać inaczej:

Środowisko: Czy temperatura powietrza lub przepływ powietrza są różne? Czy są w szafach? Widziałem, jak systemy działają inaczej w różnych pozycjach szafy, spowodowane przez wibracje. W każdym stojaku występują różne poziomy wibracji. Jest to mało prawdopodobne, biorąc pod uwagę, że powiedziałeś, że prawie nie używa się wejść / wyjść. Ale widziałem, że dyski zwalniają do 2 MB / s sekwencyjnego zapisu z powodu wibracji w częściach szafy.

Błędy sprzętowe: dowolny sprzęt może być wadliwy. Użyj profilowania, aby zobaczyć, co jest wolne. Może to być zły procesor lub mikroukład, źle podłączony radiator, niezrównoważone wentylatory powodujące wibracje, uszkodzone wentylatory, a nawet zły zasilacz. Spróbuj zamienić rzeczy łatwe do zamiany.

Anton Cohen
źródło