Obecnie testuję aplikację na serwerze, który ma 64 rdzenie. Na tym serwerze zainstalowano wirtualną skrzynkę, która może wykorzystywać do 32 rdzeni, ale nie więcej (ten limit jest przyznawany przez wirtualną skrzynkę). Z uwagi na to, że używam mininetu do przetestowania mojej aplikacji, potrzebuję uprawnień roota do jej wykonania. Nie mam uprawnień root na serwerze, ale w VM. Więc moja konfiguracja jest:Dodawanie większej liczby rdzeni do wirtualnej skrzynki sprawia, że aplikacje wolniej zaczynają od 16 rdzeni.
Host ma 64 rdzeni i ubuntu zainstalowane
VirtualBox VM z Ubuntu 1 - 32 rdzeni
Moja aplikacja jest uruchomiona na 16 hostów mininet, każdy gospodarz jest uruchamianie programu używającego multiemisji i unicast do komunikowania się ze sobą, ale nie za dużo żądań na teraz. Około 5 żądań na hosta po rozpoczęciu. Początek z opóźnieniem wynoszącym 3 sekundy, aby uniknąć zatorów na początku
My zgłoszenie korzysta z wielu wątków, ale każdy o aplikacji na komputerze jest Niezależny od innych
My zgłoszenie korzysta z APScheduler pytona i całkowicie napisany w pytonie
Myślałem, że prowadzenie go z 32 rdzeniami byłoby najlepsze. Ale kiedy to robię, wszystko zaczyna wisieć. Otrzymuję limity czasu w APScheduler, a obciążenie systemu jest bardzo wysokie.
Więc próbowałem go z każdej liczby rdzeni między 1 a 32. Oto kilka przykładów:
1 rdzeń
4 rdzenie
8 rdzeni
12 rdzeni
16 rdzenie
20 rdzenie
23 rdzenie
27 rdzenie
32 rdzenie
Oś X trwa pół sekundy, a acis to obciążenie procesora zgłaszane przez top -b -n 1 w procentach. Uruchomiłem aplikację z każdym rdzeniem przez około 10 minut. niebieska linia to średnie obciążenie procesora mojej aplikacji. czerwona linia to moja aplikacja, zielona linia to całkowite obciążenie systemu.
Jak widać, obciążenie spada do około 16 rdzeni. przy użyciu więcej niż 16 rdzeni robi się wolniej i zaczynając od około 23 rdzeni, robi się bardzo wolno. Nawet tak wolno, że proces, który rejestruje obciążenie procesora, nie jest już nawet wywoływany. Właśnie dlatego wykresy na ostatnich wykresach są krótsze ...
Czy ktoś ma pomysł, co może być problemem? Czy jest to znany błąd VirtualBox? Czy to jest problem z mininetami? lub problem z linuxem? Skąd mogę wiedzieć, które części powodują ekstremalne obciążenie?
Jeśli potrzebujesz więcej informacji, napisz komentarz, a ja edytuję pytanie.
Obciążenie systemu gościa nigdy nie było większe niż 50%, więc myślę, że to nie problem.
Czy to możliwe, że VMWare będzie szybszy?
EDIT Sprawdziliśmy działek i okazało się, że niebieska linia, która opisuje średnie obciążenie procesora mojej aplikacji (średnio ponad wszystkich instancji na wszystkich hostach mininet) jest nawet coraz większe, gdy zmienia się od 1 do 2 do 3 do ... 16 rdzeni. Ale od 1 do 16 rdzeni obciążenie procesora mojej aplikacji wzrasta bardzo wolno. Podczas gdy to zwiększa całkowite obciążenie systemu spada (co ma sens w mojej opinii, ponieważ ubuntu może wykonywać swoje zadania na różnych rdzeniach, co jest szybsze, jeśli nie ma wspólnych zasobów).
Dlaczego więc średnia rośnie? I dlaczego wzrasta wykładniczo od 16 rdzeni?
to limit 32 rdzeni odnoszących się do rdzeni fizycznych lub logicznych? Może twoja maszyna wirtualna używa 16 rdzeni i zaczyna używać HT po tym? – Leeor
Hmm, jak mógłbym to znaleźć? –
'cat/proc/cpuinfo | grep "core id" | sortuj uniq | wc -l' na hoście podaje liczbę rdzeni fizycznych. –