Weiß jemand Warum die Perf immer zeigen _raw_spin_unlock_irqrestore oder eine andere Spin-Entsperr-Funktion? Die Implementierung von spin_unlock ist normalerweise einfacher als spin_lock. Wenn der Spin_lock stark konkurriert, sollte die Perf das Ergebnis nicht in spin_lock anzeigen?Warum die Perf immer zeigen _raw_spin_unlock_irqrestore oder eine andere Spin entsperren-Funktion
Antwort
Welche Arbeitslast führen Sie aus? Bist du sicher, dass es Streit gibt?
irq_restore erscheint, weil das erneute Aktivieren von Interrupts teuer ist, aber Sperren, die mit Interrupts spielen, werden nicht oft angezeigt. Sie werden es am ehesten sehen, wenn die Maschine weitgehend untätig ist.
für Kicks, lief ich eine triviale Arbeitsbelastung, die auf einem spinlock behauptet und unsuprisingly war es die Verriegelungsroutine, die wurde, zeigt das:
81.36% [kernel] [k] native_queued_spin_lock_slowpath
4.67% libc-2.17.so [.] __memset_sse2
1.63% [kernel] [k] find_next_zero_bit
0.92% [kernel] [k] _raw_spin_lock
0.81% [kernel] [k] __audit_syscall_exit
0.76% [kernel] [k] __alloc_fd
0.69% [kernel] [k] __slab_free
0.62% [kernel] [k] security_compute_sid.part.13
0.45% [kernel] [k] kmem_cache_free
@employee des Monats Fragment meiner perf Top-Ergebnis
3.32% [kernel] [k] native_queued_spin_lock_slowpath
3.18% [kernel] [k] update_load_avg
3.13% [kernel] [k] __switch_to
3.12% [kernel] [k] native_write_msr
3.02% [kernel] [k] __sched_text_start
2.81% [kernel] [k] _raw_spin_lock
2.20% [kernel] [k] _raw_spin_lock_irqsave
1.97% [kernel] [k] switch_mm_irqs_off
1.70% [kernel] [k] __blkdev_direct_IO_simple
1.69% [kernel] [k] __get_user_pages_fast
Und das ist mein FrameGraph führen enter image description here
flamesgraphen als Bilder sind nicht sehr nützlich. Unter der Annahme, dass Sie die gleiche Workload ausgeführt haben und das Ergebnis wiederholbar ist, können Sie sehen, dass die CPU-Zeit * nicht * in irqrestore verbracht wurde. Ich habe einen Verdacht, was vor sich geht. Der Kernel verfügt über dedizierte Interrupt-Stacks. Wenn die Routine irqrestore ausführt, werden alle Interrupts in der Warteschlange verarbeitet. aber der Berichtsmodus, der Rückverfolgungen erhält, prüft den Unterbrechungsstapel nicht, also erhältst du nur einen Dump mit irqrestore oben. –
hmm, es scheint, dass der framegraph nicht so genau ist. Aus dem Ergebnis von perf top hat _raw_spin_unlock_irqrestore() nicht so viel CPU gekostet. Danke für deinen freundlichen Vorschlag. –
- 1. Reactive Perf druckt immer leer Array
- 2. Perf Annotate gibt nicht immer Ausgabe
- 3. Daten zeigen immer [Objekt Objekt] warum?
- 4. SPIN: interpretiere die Fehlerspur
- 5. Warum Google Apis andere Ergebnisse zeigen?
- 6. Zeigen Sie eine Stilklasse auf eine andere?
- 7. Perf-Bericht - Was sind die zwei Prozentspalten
- 8. SQL eine Bedingung ODER die andere
- 9. MFC: Warum kommt die Spin Kontrolle der Arbeit nach hinten
- 10. Oprofile vs perf
- 11. DetailViewController zeigen immer die gleiche Inhaltsansicht, wenn ich auf die andere Zeile in UITableView klicke
- 12. zeigen NavigationView auf eine andere Aktivität
- 13. Perf zeigt verfälschte Funktionsnamen
- 14. Andere Pins leuchten immer
- 15. Warum Jade oder eine andere Vorlage in node.js verwenden
- 16. Warum zeigen meine Jahr-Ticks mit pandas.plot immer die Jahre, die in 9 enden?
- 17. Warum immer newInstance oder Objekt von Fragmenten
- 18. Was für eine perfekte Perf-Auswahl für eine Rest-API?
- 19. Zeigen Sie iPad-Tastatur auf Auswahl, Fokus oder immer (jQuery)
- 20. Warum ist `mapStateToProps` immer eine anonyme Funktion?
- 21. CSS3 Spin Animation
- 22. Warum funktioniert eine Methode, eine andere nicht?
- 23. JS Animation Spin auf Hover
- 24. Warum strlen() immer 2 oder 1 zurückgibt?
- 25. Warum eine Funktion erfordert eine Bindung und die andere nicht?
- 26. Arbeiten an Spin und Promela
- 27. Wann wird eine SPIN: Regel ausgeführt?
- 28. Warum die Variable immer Null
- 29. Promela Modellierung mit Spin
- 30. der eine oder andere in if-Anweisung
Vielen Dank für Ihre ausführliche Antwort. –
Ich habe gerade einen zufälligen Lese-Test-Fall auf meinem lokalen und verwendet perf, um den konkurrierenden Status des neuesten Block-mq zu überprüfen. Im Ergebnis gibt es außer dem Pfad native_queued_spin_lock_slowpath, der vom io Scheduler aufgerufen werden soll, auch den Pfad _raw_spin_unlock_irqrestore. Vor allem in dem von FrameGraph erzeugten Ergebnis. –