Ich versuche, einige Leistungsprobleme mit Pthreads auf Linux zu debuggen, und ich denke, sched_getcpu() kann mich belügen. Sie meldet für jeden Thread eine konstante CPU, während Profiling-Experimente darauf hindeuten, dass die Threads während ihrer Lebensdauer tatsächlich von einem Kern zum anderen migrieren.Ist sched_getcpu() unter Linux zuverlässig?
Ich frage mich, ob sched_cpu()
meldet nur die erste CPU, die der Thread gestartet wurde, und ist nicht auf Thread Migration? Hat jemand anderes dies bemerkt oder Beweise dafür gesehen, dass sich der Rückgabewert von sched_getcpu()
ändern könnte? Wenn es nicht realiable ist, gibt es irgendwelche anderen Methoden, um gegenwärtige CPU zu verfolgen (Gebrauch CPUID
vielleicht?)?
Danke für die umfassende Antwort - meine Kernel-Version scheint 3.10 zu sein, so dass es klingt, als sollte ich dieses Verhalten nicht sehen. Ich muss etwas tiefer graben ... –