Collectd auf barristan 50% CPU usage?


#1

Da stimmt doch was nicht.
Interval 10s ?


#2

Ich glaube, dass es daran liegt: Tunneldigger verursacht hohe Prozessorlast auf den Gateways?


#3

Es geht speziell um collectd.


#4

Interessant. Dann sind die Probleme doch unabhängig. Mir war auch zuerst aufgefallen, dass Collectd teilweise kurz ganz schön viele Ressourcen braucht, hatte es aber auf den Tunneldigger geschoben. Also im Sinne von, dass der auf den wartet.

Scheint dann hier nicht der Fall zu sein.


#5

Sehe da load von 4 d.h. irgendwas wird CPU bound. Da tunneldigger auch viel CPU resourcen benötigt dürfte dies zu Lasten von Tunneldigger Funktion gehen…

Brauchen wir updates in 10 Sekunden Interval für irgendwas?

Ich habe das mal beäugt und mein Tip ist das das DHCP Leasefile parsen so lange dauert.
90000 zeilen und so richtig optimal ist der auch nicht…


#6

Der Tunneldigger braucht zum Glück wieder deutlich weniger, seit wir auf die alte Version zurück gegangen sind.

@descilla hat da letztens Optimierungen für Collectd angefangen. Das soll einiges einsparen. Soweit ich weiß, ist das noch in der Testphase und nicht auf alle Knoten ausgerollt. Er ist auch derzeit im Urlaub.


#7

Es ist der DHCP Leascounter:

real 0m17.388s
user 0m1.990s
sys 0m3.010s

rolleyes

Ich habe mal höndisch ein renice auf collectd gemacht.


#8

Jup, genau daran hat er gearbeitet ;).


#9

im barristan:/root liegt ein schnelleres Perl Script:

real 0m4.359s
user 0m0.660s
sys 0m0.650s

:slight_smile:


#10

Im Ansible glaube ich auch: https://github.com/FreiFunkMuenster/Ansible-Freifunk-Gateway/commit/83863de980b446ba8d97dd1824389f5db1dda886


#11

Vielleicht das ist wohl noch nicht fertig.

File “dhcp2.py”, line 93, in timestamp_inbetween
return start < now < end
TypeError: can’t compare datetime.datetime to str


#12

Da muss dann ein commit später verwendet werden, hatte in der vorherigen version an einer Stelle vergessen das datetime anzupassen.


Prinzipiell habe ich das datetime objekt für jedes lease rausgrworfen, da man sich auch einmal das aktuelle datum als string geben lassen kann und dann die strings vergleichen kann. Man könnte das natürlich noch weiter optimieren; beim einlesen ein integer draus machen zb, das muss man nur einmal machen, vergleichen muss man mindestens zwei mal. Ob das wirklich was bringt, muss man messen.

Außerdem muss derzeit für jedes lease ein ipaddr objekt erzeugen, mit dem dann das subnet berechnet wird (um die leases den einzelnen domänen zuordnen zu können). Da geht nämlich derzeit mit weitem abstand die meiste zeit drauf (nachdem ich den datetime crap rausgeworfen habe (dadurch wurde es schon mal um den faktor >2 schneller)).

Falls das alles nichts bringt, muss man noch mal die systematik mit der das leasefile geparsed wird durchdenken. Das skript ist entstanden als da 200-300 leases sein lagen. Jetzt muss es teilweise > 10000 leases durcharbeiten. Aber wir schon erwähnt bitte einmal einen neueren commit “commitmessage: fixed previous commit” oder so verwenden.

Ps: https://github.com/FreiFunkMuenster/Ansible-Freifunk-Gateway/commit/f4fed5cecf0d9cbe450080a87460647901259135