Re: Wert von MAXCPU in C auf amd64 (prometheus cpu collector)
Peter <[email protected]>
| Newsgroups | gmane.os.freebsd.questions.german |
|---|---|
| Organization | even some more stinky socks |
| Message-ID | <[email protected]> |
Marian Hettwer wrote: > Hallo Liste, > > > ich knobel an einer compile Frage, in die ich reingestolpert bin, > nachdem ich mir Prometheus auf meinem Server installiert habe. > Der Autor des cpu collectors probiert scheinbar rauszubekommen, wie groß > die maximale Anzahl an CPUs ist. > > https://github.com/prometheus/node_exporter/blob/master/collector/cpu_freebsd.go#L106 > > > Zeile 109: const maxCPUTimesLen = C.MAXCPU * C.CPUSTATES > > > MAXCPU ist wohl als konstante in /usr/include/machine/params.h > definiert. Unter amd64, wenn SMP definiert ist, dann 64, else 1. > Was mich wundert ist, dass auf meinem 10.3-RELEASE das ganze im else > part landet. Obwohl amd64. > > [prometheus ~]$ uname -srm > FreeBSD 10.3-RELEASE-p11 amd64 Jaaa der Compiler fragt ja den cputyp nicht unbedingt live ab, und ein Userspace programm ist m.E. nicht per default SMP fähig, sondern nur wenn es spezielle Funktionen dahingehend hat dass es mehrere CPUs nutzen kann - was der Programmierer dann auch wissen sollte und entsprechend die Option einschalten kann. > Das ist ja an sich erstmal löblich. > Ich finde nur keinen Weg, wie C.MAXCPU auf 64 kommt, ausser über Zeile > 30 in seinem Code ein '#define SMP 1' reinzuwerfen. > Aber das kann ja nicht die Lösung sein. [...] > Hat jemand ne Idee warum MAXCPU 1 ist, bzw wie man das sauber lösen kann? Ich würde meinen, das wäre eine Aufgabe für den configure schritt des Build - dass da erstmal live der Typ der aktuellen Maschine ermittelt wird und dann ein Headerfile erzeugt, das vor den anderen geladen wird (oder make optionen formuliert, die an den Compiler übergeben werden). Und da müsste dann das SMP bei bedarf gesetzt werden: $ cc main.c $ a.out 1 $ cc -DSMP main.c $ a.out 64 $ Ich hab keine Idee inwieweit das auf Dein Produkt anwendbar ist, aber sowas täte ich mir als saubere Lösung vorstellen. Old school halt. > Mein workaround mit dem #define SMP 1 macht halt ne große Schüssel. Warum das, wenn der Code dann tatsächlich mit den aktuellen hw.ncpu weiterrechnet und das MAXCPU nur zur Überprüfung dient? MAXCPU ist ja keine Aussage über die aktuell vorhandenen CPUS, sondern wieviele CPUs die FreeBSD Architektur maximal unterstützen kann. To Unsubscribe: send mail to [email protected] with "unsubscribe de-bsd-questions" in the body of the message