Nie na pewno, ale głównie na 1.00*n_cpu
.
Obciążenie oznacza, że: jeśli w systemie z jednym procesorem jest wiele procesów, działają one pozornie równolegle. Ale to nieprawda. Co praktycznie się dzieje: jądro daje procesowi 1/100 sekundy, a następnie przerywa jego działanie przerwaniem. I daje następną 1/100 sekundy innemu procesowi.
Praktycznie pytanie, „który proces powinien otrzymać nasz następny 1/100 sekundy?”, Zostanie rozstrzygnięte przez złożoną heurystykę. Jest on nazwany jako zadania harmonogramu .
Oczywiście procesy, które są zablokowane, na przykład czekają na dane, które odczytują z dysku, są zwolnione z tego harmonogramu zadań.
Co mówi obciążenie: ile procesów oczekuje obecnie na następne 1/100 sekundy. Oczywiście jest to wartość średnia. Wynika to z faktu, że możesz zobaczyć wiele liczb w cat /proc/loadavg
.
Sytuacja w systemie z wieloma procesorami jest nieco bardziej złożona. Istnieje wiele procesorów, których ramy czasowe można przypisać do wielu procesów. To sprawia, że planowanie zadań jest nieco - ale nie za bardzo - skomplikowane. Ale sytuacja jest taka sama.
Jądro jest inteligentne, stara się współdzielić zasoby systemowe w celu uzyskania optymalnej wydajności, i jest to bliskie (istnieją pewne drobiazgi związane z optymalizacją, na przykład lepiej, jeśli proces będzie uruchamiany możliwie najdłużej w tym samym czasie procesora ze względu na względy buforowania, ale nie mają one znaczenia). Wynika to z faktu, że jeśli mamy ładunek 8, oznacza to: w rzeczywistości 8 procesów czeka na następny wycinek czasu. Jeśli mamy 8 procesorów, możemy nadać te przedziały czasu procesorowi jeden na jeden, dzięki czemu nasz system będzie optymalnie wykorzystywany.
Jeśli widzisz a top
, możesz zobaczyć, że liczba faktycznie działających procesów jest zaskakująco niska: są to procesy oznaczone przez R
nie. Nawet w niezbyt trudnym systemie jest często poniżej 5. Jest to częściowo spowodowane tym, że procesy oczekujące na dane z dysków lub z sieci są również zawieszone (oznaczone symbolem u S
góry). Obciążenie pokazuje tylko użycie procesora.
Istnieją również narzędzia do pomiaru obciążenia dysku, imho powinny one być co najmniej ważne jako monitorowanie użycia procesora, ale jakoś nie jest to tak dobrze znane w naszym profesjonalnym świecie sysadmin.
Narzędzia Windows często dzielą obciążenie z rzeczywistą liczbą procesorów. Powoduje to, że niektórzy profesjonalni administratorzy systemu Windows używają obciążenia systemu w tym sensie podziału na procesory. Nie mają racji i prawdopodobnie będą szczęśliwsi po tym, jak im to wytłumaczysz.
Procesory wielordzeniowe to praktycznie wiele procesorów na tym samym chipie krzemowym. Nie ma różnicy.
W przypadku procesorów hyperthreaded występuje ciekawy efekt uboczny: ładowanie procesora powoduje spowolnienie jego par hyperthreaded. Ale dzieje się to na głębszej warstwie, co obsługuje normalne planowanie zadań, chociaż może (i powinno) wpływać na decyzje harmonogramu dotyczące przenoszenia procesów.
Ale z naszego obecnego punktu widzenia - co determinuje obciążenie systemu - nie ma to również znaczenia.
Przeprowadziłem kilka eksperymentów na naszym 24-rdzeniowym systemie Xeon (2 gniazda x 12 rdzeni). Maksymalne obciążenie wynosi w tym przypadku 48,0 ze względu na sposób, w jaki Linux konfiguruje hyperthreading.
Jednak nie otrzymujesz odpowiednika 48 rdzeni przepustowości. Zauważyłem, że uzyskujesz około 90% przepustowości w pierwszych 24 procesorach logicznych, tj. Jeśli obciążenie osiąga 24,0. Następnie otrzymujesz dodatkową przepustowość około 10% dla pozostałych 24 procesorów logicznych (ładowanie przebiega do 48,0). Innym sposobem myślenia na ten temat jest to, że jeśli uruchomisz 48 wątków na 24 rdzeniach, uzyskasz wzrost o około 10-20%, jeśli włączysz hiperwątkowanie w porównaniu do nie. To nie jest 100% wzrost, jak sugerowaliby faceci od marketingu.
Na przykład jednym ze sposobów przetestowania tej obserwacji jest proces, który uruchamia 48 wątków (powiedzmy, używając TBB lub modelu wątków sterowanych), a następnie uruchamia
a następnie biegnij
Ten ostatni powinien działać o około 10-20% krócej. Jeśli proces jest wysoce zablokowany we / wy, wynik może być inny.
Pierwszy z nich wyłączy hiperwątkowanie, pozwalając, aby wątki działały tylko na jednym procesorze logicznym (każdego rdzenia), podczas gdy drugie umożliwi hiperwątkowanie, umożliwiając wątki na 2 procesorach logicznych (każdego rdzenia).
Obciążenie w obu przypadkach należy zgłaszać jako 48,0 ... co, jak widać, jest bardzo mylące.
źródło