Zastanawiam się tylko, jak mogę dowiedzieć się, ile rdzeni procesorów używa użytkownik na serwerze z systemem Linux?
Przesyłam sporo zadań w tle na serwer, dlatego chciałbym napisać skrypt bash, aby sprawdzić przed przesłaniem zadania, czy uruchomione zadania (procesy) przesłane przeze mnie są zbyt liczne, ponieważ muszę pozwolić innym użytkownicy mają wystarczającą liczbę rdzeni do pracy. Chciałbym wiedzieć, jakie polecenie bash może mi powiedzieć, ile rdzeni używają teraz moje zadania.
Dziękuję i pozdrawiam!
Nie wiem, czy to pomaga, ale możesz użyć tego
mpstat
narzędzia, aby uzyskać rozkład wykorzystania procesora według poszczególnych procesorów (lub rdzeni). Na przykład:W tym przykładzie widać, że CPU
0
,1
i6
robią więcej pracy niż reszta. Czasami zobaczysz, że pojedynczy procesor jest bliski (lub ma) 100%, podczas gdy inne mają zero. Może to być wskaźnik programu (lub części programu), który jest jednowątkowy i może korzystać tylko z jednego procesora naraz.Aby zainstalować
mpstat
w systemie Fedora, RHEL lub CentOS, użyjyum install sysstat
.źródło
# aptitude search mpstat #
.aptitude search systat
zamiast tego.sysstat
na Debianie i na Ubuntu . Spodziewałbym się, że większość dystrybucji pochodzących z Debiana używa tej samej nazwy pakietu. W przypadku dystrybucji pochodzących z Debiana zacznij odapt-cache search --full mpstat
.O ile nie zostało wyraźnie skonfigurowane, aby nie (tj. Przypinać procesu do określonego procesora), można założyć, że wszystkie rdzenie są w użyciu przez cały czas. Harmonogram przydzieli procesom następny dostępny rdzeń. W tym przypadku „Monitor systemu” (część GNOME) pokazuje moje obciążenie prawie tak samo we wszystkich 4 rdzeniach mojej maszyny.
źródło
Zobaczysz więc odpowiedzi, które powiedzą ci, jak wykorzystywane są twoje rdzenie.
JEDNAK - to tak naprawdę nie robi ci usługi. Przyjęliście podstawowe założenie, które po prostu się nie sprawdza - że wasze zadania będą miały tendencję do grupowania się w podzbiór rdzeni.
Zamiast tego Twoje zadania zostaną rozłożone na wszystkie rdzenie, chyba że zaimplementujesz coś, co w jakiś sposób sprawi, że będą one „wciśnięte”. (Uwaga: nie polecam tego; po prostu mówię „chyba”)
Oto alternatywna strategia: Zidentyfikuj dla swojego systemu, jaki jest poziom LOAD, gdy uważasz, że „akceptowalne” dla innych użytkowników jest dodawanie kolejnych zadań. Następnie zbuduj coś, co przesyła nowe zadanie w tle tylko wtedy, gdy poziom obciążenia spadnie poniżej tego limitu.
W ten sposób rozwiązanie będzie niezależne od liczby rdzeni, bardziej przenośne, bardziej elastyczne i łatwiejsze do „ulepszenia”.
źródło
Jeśli chcesz to zrobić, aby działało na systemie Linux i OS X, możesz:
źródło
Możesz uzyskać przybliżoną ocenę, uruchamiając
top
, naciskając „U
” i określając swoją nazwę użytkownika, a następnie sumując wykorzystanie procesora przez kilka najważniejszych procesów.źródło
top
może działać w trybie wsadowym za pomocą przełącznika -b. Połącz go z przełącznikiem -n, aby uzyskać potrzebną liczbę iteracji.top
wyjściowe, albo google, aby sprawdzić, czy ktoś już to zrobił. Jednak nie jestem przekonany, czy warto było tego wysiłku, ponieważ myślę, że otrzymam różne wyniki dla każdego uruchomienia, biorąc pod uwagę szybkość, z jaką następuje przełączanie kontekstu. Czy system nie jest wystarczająco dobrym wskaźnikiem? Skutecznie informuje, ile wirtualnych rdzeni jest wymaganych do obsługi kolejki procesów (procesów oczekujących na CPU).