Das Rätsel des Stack Unwindings in Perf
Perf, ein leistungsstarkes Performance-Analysetool, verwendet PMU-Zählerüberlaufunterbrechungen, um Thread-Zustände für das Profiling zu erfassen. Das Stack Unwinding stellt jedoch eine Herausforderung dar. Moderne Compiler lassen Frame-Pointer standardmäßig weg, was das Stack-Tracing erschwert. Obwohl eine Neukompilierung mit -fno-omit-frame-pointer möglich ist, ist dies teuer und kann zu Inkompatibilitäten mit Systembibliotheken führen. DWARF bietet eine Alternative, aber seine Komplexität und der Performance-Overhead sind erheblich, was Linus Torvalds dazu brachte, seinen Einsatz beim Stack Unwinding im Kernel abzulehnen. Daher verwendet Perf einen Kompromiss: Es kopiert nur den oberen Teil des Stacks in den User-Space zum Unwinding. Dies begrenzt die Stack-Größe (65.528 Bytes), gleicht aber effektiv Performance und Praktikabilität aus.