Messages in this thread | | | From | Seiji Aguchi <> | Subject | RE: [PATCH v9 0/3]trace,x86: irq vector tracepoint support | Date | Tue, 12 Feb 2013 23:36:37 +0000 |
| |
Peter,
Could you please review this patchset? I have updated it in accordance with Steven's comment.
Seiji
> -----Original Message----- > From: Seiji Aguchi > Sent: Monday, February 04, 2013 5:49 PM > To: 'Steven Rostedt'; x86@kernel.org; H. Peter Anvin (hpa@zytor.com); linux-kernel@vger.kernel.org > Cc: Thomas Gleixner (tglx@linutronix.de); 'mingo@elte.hu' (mingo@elte.hu); Borislav Petkov (bp@alien8.de); Satoru Moriya; dle- > develop@lists.sourceforge.net; linux-edac@vger.kernel.org; Luck, Tony (tony.luck@intel.com) > Subject: [PATCH v9 0/3]trace,x86: irq vector tracepoint support > > Change log > > v8 -> v9 > - Rebase to 3.8-rc6 > - Add Steven's email address at the top of the message and > move my signed-off-by below Steven's one because it is > originally created by Steven. (patch 1/3) > - Introduce a irq_vector_mutex to avoid a race at registering/unregistering > time. (patch 2/3) > - Use a per_cpu data to orig_idt_descr because IDT descritor is needed to each cpu > and the appropriate data type is per_cpu data. It is suggested by Steven. > (patch 2/3) > > v7 -> v8 > - Rebase to 3.8-rc4 > - Add a patch 1 introducing DEFINE_EVENT_FN() macro. > - Rename original patches 1 and 2 to 2 and 3. > - Change a definition of tracepoint to use DEFINE_EVENT_FN(). (patch 2) > - Change alloc_intr_gate() to use do{}while(0) to avoid a warning > of checkpatch.pl. (patch 2) > - Move entering_irq()/exiting_irq() to arch/x86/include/asm/apic.h (patch 3) > > v6 -> v7 > - Divide into two patches to make a code review easier. > Summery of each patch is as follows. > - Patch 1/2 > - Add an irq_vector tracing infrastructure. > - Create idt_table for tracing. It is refactored to avoid duplicating > existing logic. > - Duplicate new irq handlers inserted tracepoints. > > - Patch 2/2 > - Share a common logic among irq handlers to make them > manageable and readable. > > v5 -> v6 > - Rebased to 3.7 > > v4 -> v5 > - Rebased to 3.6.0 > > - Introduce a logic switching IDT at enabling/disabling TP time > so that a time penalty makes a zero when tracepoints are disabled. > This IDT is created only when CONFIG_TRACEPOINTS is enabled. > > - Remove arch_irq_vector_entry/exit and add followings again > so that we can add each tracepoint in a generic way. > - error_apic_vector > - thermal_apic_vector > - threshold_apic_vector > - spurious_apic_vector > - x86_platform_ipi_vector > > - Drop nmi tracepoints to begin with apic interrupts and discuss a logic switching > IDT first. > > - Move irq_vectors.h in the directory of arch/x86/include/asm/trace because > I'm not sure if a logic switching IDT is sharable with other architectures. > > v3 -> v4 > - Add a latency measurement of each tracepoint > - Rebased to 3.6-rc6 > > v2 -> v3 > - Remove an invalidate_tlb_vector event because it was replaced by a call function vector > in a following commit. > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=52aec3308db85f4e9f5c8b9f5dc4fbd0138c6fa4 > > v1 -> v2 > - Modify variable name from irq to vector. > - Merge arch-specific tracepoints below to an arch_irq_vector_entry/exit. > - error_apic_vector > - thermal_apic_vector > - threshold_apic_vector > - spurious_apic_vector > - x86_platform_ipi_vector > > [Purpose of this patch] > > As Vaibhav explained in the thread below, tracepoints for irq vectors are useful. > > http://www.spinics.net/lists/mm-commits/msg85707.html > > <snip> > The current interrupt traces from irq_handler_entry and irq_handler_exit provide when an interrupt is handled. They provide good > data about when the system has switched to kernel space and how it affects the currently running processes. > > There are some IRQ vectors which trigger the system into kernel space, which are not handled in generic IRQ handlers. Tracing such > events gives us the information about IRQ interaction with other system events. > > The trace also tells where the system is spending its time. We want to know which cores are handling interrupts and how they are > affecting other processes in the system. Also, the trace provides information about when the cores are idle and which interrupts are > changing that state. > <snip> > > On the other hand, my usecase is tracing just local timer event and getting a value of instruction pointer. > > I suggested to add an argument local timer event to get instruction pointer before. > But there is another way to get it with external module like systemtap. > So, I don't need to add any argument to irq vector tracepoints now. > > [Patch Description] > > Vaibhav's patch shared a trace point ,irq_vector_entry/irq_vector_exit, in all events. > But there is an above use case to trace specific irq_vector rather than tracing all events. > In this case, we are concerned about overhead due to unwanted events. > > This patch adds following tracepoints instead of introducing irq_vector_entry/exit. > so that we can enable them independently. > - local_timer_vector > - reschedule_vector > - call_function_vector > - call_function_single_vector > - irq_work_entry_vector > - error_apic_vector > - thermal_apic_vector > - threshold_apic_vector > - spurious_apic_vector > - x86_platform_ipi_vector > > Please see descriptions in each patch. > > Seiji Aguchi (2): > trace,x86: add x86 irq vector tracepoints > trace,x86: code-sharing between non-trace and trace irq handlers > > Steven Rostedt (1): > tracing: Add DEFINE_EVENT_FN() macro > > arch/x86/include/asm/apic.h | 27 +++++ > arch/x86/include/asm/desc.h | 33 ++++++- > arch/x86/include/asm/entry_arch.h | 5 +- > arch/x86/include/asm/hw_irq.h | 16 +++ > arch/x86/include/asm/trace/irq_vectors.h | 159 ++++++++++++++++++++++++++++++ > arch/x86/kernel/Makefile | 1 + > arch/x86/kernel/apic/apic.c | 71 +++++++++++--- > arch/x86/kernel/cpu/mcheck/therm_throt.c | 24 ++++- > arch/x86/kernel/cpu/mcheck/threshold.c | 24 ++++- > arch/x86/kernel/entry_32.S | 12 ++- > arch/x86/kernel/entry_64.S | 27 ++++- > arch/x86/kernel/head_64.S | 6 + > arch/x86/kernel/irq.c | 31 ++++-- > arch/x86/kernel/irq_work.c | 24 ++++- > arch/x86/kernel/smp.c | 65 +++++++++++-- > arch/x86/kernel/tracepoint.c | 65 ++++++++++++ > include/linux/tracepoint.h | 2 + > include/trace/define_trace.h | 5 + > include/trace/ftrace.h | 4 + > include/xen/events.h | 3 + > 20 files changed, 550 insertions(+), 54 deletions(-) create mode 100644 arch/x86/include/asm/trace/irq_vectors.h > create mode 100644 arch/x86/kernel/tracepoint.c
| |