Czy istnieje sposób na zmierzenie użycia procesora przez rdzenie w określonym procesie?
Wiem, że top jest dobry do pomiaru zużycia procesora przez cały system przez rdzenie, a zestaw zadań może dostarczyć informacji o tym, na którym rdzeniu procesora może działać proces.
Ale jak zmierzyć zużycie procesora przez poszczególne rdzenie procesora?
I
aby przełączyć tryb Irix (w przeciwieństwie do trybu Solaris ). Kiedyon
wartość procentowa wyświetlana na liście procesów odnosi się do wątku procesora . Kiedyoff
wspomniany procent jest wyświetlany w stosunku do całkowitej pojemności procesora (tj. WSZYSTKICH wątków - czyli wszystkich rdzeni).top
,man
strona mówi,top -1
ale narzeka! Byłoby miło uzyskaćtop -1 -n 1
pojedynczą iterację,top
ale z wyświetleniem oddzielnego użycia procesora.Możesz użyć:
Pokazuje, jak bardzo każdy rdzeń jest zajęty i aktualizuje się automatycznie co sekundę. Wynik wyglądałby mniej więcej tak (na czterordzeniowym procesorze):
To polecenie nie odpowiada jednak na pierwotne pytanie, tj. Nie pokazuje użycia rdzenia procesora dla określonego procesu.
źródło
możesz użyć
ps
.np. posiadanie procesu Pythona z dwoma zajętymi wątkami na dwurdzeniowym procesorze:
(PSR to identyfikator procesora, do którego wątek jest obecnie przypisany)
widzisz, że wątki działają na tym samym rdzeniu procesora (z powodu GIL)
uruchamiając ten sam skrypt Pythona w jythonie, widzimy, że skrypt wykorzystuje oba rdzenie (i istnieje wiele innych usług lub innych wątków, które są prawie bezczynne):
możesz przetworzyć dane wyjściowe i obliczyć całkowity procesor dla każdego rdzenia procesora.
Niestety to podejście nie wydaje się być w 100% niezawodne, czasami widzę, że w pierwszym przypadku dwa wątki robocze są zgłaszane jako oddzielne dla każdego rdzenia procesora lub w drugim przypadku są zgłaszane, że dwa wątki są włączone ten sam rdzeń ..
źródło
htop
daje ładny przegląd wykorzystania poszczególnych rdzeniźródło
ps
Roztwór prawie co potrzebne iz jakiegoś bash wrzucony jest dokładnie to, co oryginalne pytanie zadawane przez: aby zobaczyć per-rdzeniową wykorzystaniem procesów specyficznychPokazuje również użycie na rdzeń procesów wielowątkowych .
Użyj na przykład: cpustat `pgrep processname`` pgrep otherprocessname` ...
Uwaga: te statystyki są oparte na czasie trwania procesu , a nie na ostatnich X sekundach, więc musisz ponownie uruchomić proces, aby zresetować licznik.
źródło
Zapewnia również wykorzystanie procesora przez pierwsze 4 rdzenie. Oczywiście, jeśli masz 32 rdzenie, to polecenie będzie trochę dłuższe, ale przydatne, jeśli interesuje Cię tylko kilka rdzeni.
Na przykład, jeśli interesujesz się tylko rdzeniami 3 i 7, możesz to zrobić
źródło
I właśnie ten problem i znalazłem podobną odpowiedź tutaj .
Metoda polega na tym, aby ustawić
top
tak, jak chcesz, a następnie nacisnąćW
(duże W). Zapisujetop
to aktualny układ do pliku konfiguracyjnego w $ HOME / .toprcChociaż może to nie działać, jeśli chcesz uruchomić wiele
top
programów z różnymi konfiguracjami.Dzięki temu, co uważam za obejście, możesz pisać do różnych plików konfiguracyjnych / używać różnych plików konfiguracyjnych, wykonując jedną z następujących czynności ...
1) Zmień nazwę pliku binarnego
Teraz
.top2rc
zostanie zapisany w Twoim $ HOME2) Ustaw $ HOME na jakąś alternatywną ścieżkę, ponieważ zapisze swój plik konfiguracyjny do pliku $ HOME / .binary-name.rc
Teraz
.toprc
zostanie zapisany w bieżącym folderze.Korzystając z komentarzy innych osób, aby dodać różne rozliczenia wykorzystania, można utworzyć zbiorcze dane wyjściowe dla tych informacji, a następnie połączyć informacje za pomocą skryptu. Może nie tak proste, jak skrypt, ale znalazłem górę, aby zapewnić mi WSZYSTKIE procesy, aby później móc podsumować i uchwycić stan w dłuższej perspektywie, który mógłbym przegapić w inny sposób (niewyjaśnione nagłe użycie procesora z powodu zbłąkanych procesów)
źródło
Pomyślałem, że
perf stat
tego potrzebujesz.Po określeniu
--cpu=list
opcji pokazuje określone użycie procesu . Oto przykład monitorowania wykorzystania procesora podczas budowania projektu za pomocąperf stat --cpu=0-7 --no-aggr -- make all -j
polecenia. Wynik to:Lewa kolumna to określony indeks procesora, a skrajna prawa kolumna to użycie procesora. Jeśli nie określisz
--no-aggr
opcji, wynik zostanie zagregowany. Ta--pid=pid
opcja pomoże, jeśli chcesz monitorować działający proces.Spróbuj
-a --per-core
lub-a perf-socket
też, co przedstawi bardziej tajne informacje.Więcej o używaniu
perf stat
można zobaczyć w tym samouczku: statystyka perf cpu , równieżperf help stat
pomoże zrozumieć znaczenie opcji.źródło