Finden Sie heraus, welche Prozesse die dedizierte Grafikkarte verwenden

2

Ich arbeite an einem einfachen Bumblebee-GUI-Tool. Eine der Funktionen besteht darin, eine Liste der Prozesse anzuzeigen, die derzeit die dedizierte Grafikkarte verwenden. Im Moment liste ich alle laufenden Prozesse auf und überprüfe, ob der übergeordnete Prozess optirundie dedizierte Grafikkarte verwendet.

Das Problem ist, dass dies nicht funktioniert primusrun, da es keinen Prozess gibt, der so aufgerufen wird, während ein Programm mit gestartet wird primusrun program_name. Kann ich die von primusrun gestarteten Prozesse oder die Prozesse, die die dedizierte Grafikkarte verwenden, trotzdem erkennen? Vielen Dank.

(Dies ist eher eine programmierbezogene Frage und gehört möglicherweise zu StackOverflow, aber ich bin nicht an Codebeispielen interessiert, sondern an einer generischen Methode, um diese Prozesse zu finden.)

ov1d1u
quelle

Antworten:

4

Sie können versuchen, herauszufinden, auf welchen Prozessen GPU-Geräteknoten geöffnet sind (z. B. fuser -v /dev/nvidiactl), dies ist jedoch ein kostspieliger Vorgang (proportional zur Gesamtzahl der geöffneten Dateien im System). Ein effizienterer (aber sehr schwer umzusetzender) Ansatz würde wahrscheinlich das Auffinden von Programmen beinhalten, die mit dem sekundären X von Bumblebee über Netlink verbunden sind. xlsclients würde es nicht schneiden, weil es Fenster auflistet, keine verbundenen Clients. Es ist auch Bumblebee-spezifisch, während Sie mithilfe von Geräteknoten auch diskrete GPU-Benutzer für das PRIME-Offloading erkennen können.

Bitte zögern Sie nicht, Bumblebee / primus Issue Tracker für solche Fragen zu verwenden. Da es sich um ein relativ dunkles Thema handelt, erhöht die direkte Kontaktaufnahme die Wahrscheinlichkeit, eine Antwort zu erhalten.

amonakov
quelle
Vielen Dank für Ihre Antwort, ich werde dies versuchen. In der Zwischenzeit habe ich alle laufenden Prozesse durchlaufen und überprüft, ob LD_LIBRARY_PATH in / proc / PID / environ den String "primus" (/ usr / $ LIB / primus) enthält, aber ich bin mir nicht sicher, ob dies ein guter Ansatz ist .
ov1d1u