I was wrong in my belief that Linux perf does not have per-process counters, coupled with their migration upon context switch 😐 That is a pretty hefty chunk of change, which requires also hooking into the process context switch (and struct proc). Though, the price of counters/MSR swap will be paid only for processes under perf. I would rather do that in a following CL, as this one is already big enough.
On Wed, Dec 2, 2015 at 3:57 PM, Davide Libenzi <[email protected]> wrote: > As part of this CL the /prof/kpctl interface has been changed back to > split timer+profile. > Documentation has been updated. > > > https://github.com/brho/akaros/compare/master...dlibenzi:devarch_msr_perf > > > The following changes since commit > 2fa42319139e4cc5ca853546363f84443d0ead00: > > Rename 'reallocarray' to 'kreallocarray'. (2015-11-25 18:02:04 -0500) > > are available in the git repository at: > > [email protected]:dlibenzi/akaros devarch_msr_perf > > for you to fetch changes up to 63a44bc73435826257ccef2c7174b58764204374: > > Added new perf utility to access CPU counters from userspace (2015-12-02 > 15:48:17 -0800) > > ---------------------------------------------------------------- > Davide Libenzi (16): > Added intptr_t definition and made error pointer code use them > Make disable MTRRs the defaul configuration option > Added ZERO_DATA() and COUNT_OF() macros to common.h > Fixed the sys_proc_create API to use const pointers > Added libpfm4 library support > Added ability to declare local per CPU variables > Drop the fake exception tables entries and use weak symbols > Added error_assert() macro and used branch hinting > Added API for read/write common integer sizes from/to memory > Moved MSR read/write APIs out of devarch and into a dedicated file > STFU useless printk messages > Reverted /prof/kpctl interface to split start and timer > Migrated devarch MSR access to new MSR API > Added perfmon interrupt handling to allow overflow based profiling > Created the new devarch perf file using the perfmon infrastructure > Added new perf utility to access CPU counters from userspace > > Documentation/profiling.txt | 140 +- > Makefile | 7 +- > kern/arch/riscv/types.h | 1 + > kern/arch/riscv/uaccess.h | 7 - > kern/arch/x86/Kbuild | 1 + > kern/arch/x86/Kconfig | 2 +- > kern/arch/x86/devarch.c | 337 ++- > kern/arch/x86/devarch.h | 14 +- > kern/arch/x86/msr.c | 130 + > kern/arch/x86/msr.h | 116 + > kern/arch/x86/perfmon.c | 469 ++- > kern/arch/x86/perfmon.h | 70 +- > kern/arch/x86/ros/perfmon.h | 96 + > kern/arch/x86/trap.c | 3 + > kern/arch/x86/types.h | 1 + > kern/arch/x86/uaccess.h | 7 - > kern/drivers/dev/kprof.c | 11 +- > kern/include/assert.h | 7 +- > kern/include/error.h | 6 +- > kern/include/percpu.h | 90 + > kern/include/ros/common.h | 7 +- > kern/include/ros/memops.h | 72 + > kern/src/Kbuild | 1 + > kern/src/ex_table.c | 71 +- > kern/src/init.c | 2 + > kern/src/percpu.c | 42 + > kern/src/profiler.c | 4 - > .../glibc-2.19-akaros/sysdeps/akaros/serialize.c | 4 +- > tools/profile/perf/.gitignore | 1 + > tools/profile/perf/Makefile | 42 + > tools/profile/perf/akaros.c | 133 + > tools/profile/perf/akaros.h | 48 + > tools/profile/perf/perf.c | 175 ++ > tools/profile/perf/perf_core.c | 618 ++++ > tools/profile/perf/perf_core.h | 69 + > tools/profile/perf/xlib.c | 100 + > tools/profile/perf/xlib.h | 42 + > user/parlib/include/parlib.h | 4 +- > user/parlib/include/serialize.h | 4 +- > user/parlib/syscall.c | 4 +- > user/perfmon/Makefile | 4 + > user/perfmon/events/amd64_events_fam10h.h | 2418 +++++++++++++++ > user/perfmon/events/amd64_events_fam11h.h | 1403 +++++++++ > user/perfmon/events/amd64_events_fam12h.h | 1758 +++++++++++ > user/perfmon/events/amd64_events_fam14h.h | 1540 ++++++++++ > user/perfmon/events/amd64_events_fam15h.h | 2298 +++++++++++++++ > user/perfmon/events/amd64_events_fam15h_nb.h | 2022 +++++++++++++ > user/perfmon/events/amd64_events_k7.h | 228 ++ > user/perfmon/events/amd64_events_k8.h | 1307 +++++++++ > user/perfmon/events/intel_atom_events.h | 1364 +++++++++ > user/perfmon/events/intel_bdw_events.h | 2485 ++++++++++++++++ > user/perfmon/events/intel_core_events.h | 1895 ++++++++++++ > user/perfmon/events/intel_coreduo_events.h | 1229 ++++++++ > user/perfmon/events/intel_hsw_events.h | 2646 > +++++++++++++++++ > user/perfmon/events/intel_ivb_events.h | 2354 +++++++++++++++ > user/perfmon/events/intel_ivbep_unc_cbo_events.h | 981 +++++++ > user/perfmon/events/intel_ivbep_unc_ha_events.h | 925 ++++++ > user/perfmon/events/intel_ivbep_unc_imc_events.h | 644 ++++ > user/perfmon/events/intel_ivbep_unc_irp_events.h | 267 ++ > user/perfmon/events/intel_ivbep_unc_pcu_events.h | 479 +++ > user/perfmon/events/intel_ivbep_unc_qpi_events.h | 696 +++++ > .../perfmon/events/intel_ivbep_unc_r2pcie_events.h | 253 ++ > user/perfmon/events/intel_ivbep_unc_r3qpi_events.h | 552 ++++ > user/perfmon/events/intel_ivbep_unc_ubo_events.h | 101 + > user/perfmon/events/intel_knc_events.h | 383 +++ > user/perfmon/events/intel_netburst_events.h | 1549 ++++++++++ > user/perfmon/events/intel_nhm_events.h | 2530 ++++++++++++++++ > user/perfmon/events/intel_nhm_unc_events.h | 1247 ++++++++ > user/perfmon/events/intel_p6_events.h | 716 +++++ > user/perfmon/events/intel_pii_events.h | 656 +++++ > user/perfmon/events/intel_pm_events.h | 930 ++++++ > user/perfmon/events/intel_ppro_events.h | 525 ++++ > user/perfmon/events/intel_slm_events.h | 896 ++++++ > user/perfmon/events/intel_snb_events.h | 2445 ++++++++++++++++ > user/perfmon/events/intel_snb_unc_events.h | 256 ++ > user/perfmon/events/intel_snbep_events.h | 2466 ++++++++++++++++ > user/perfmon/events/intel_snbep_unc_cbo_events.h | 801 +++++ > user/perfmon/events/intel_snbep_unc_ha_events.h | 545 ++++ > user/perfmon/events/intel_snbep_unc_imc_events.h | 344 +++ > user/perfmon/events/intel_snbep_unc_pcu_events.h | 307 ++ > user/perfmon/events/intel_snbep_unc_qpi_events.h | 429 +++ > .../perfmon/events/intel_snbep_unc_r2pcie_events.h | 188 ++ > user/perfmon/events/intel_snbep_unc_r3qpi_events.h | 323 +++ > user/perfmon/events/intel_snbep_unc_ubo_events.h | 72 + > user/perfmon/events/intel_wsm_events.h | 2579 ++++++++++++++++ > user/perfmon/events/intel_wsm_unc_events.h | 1372 +++++++++ > user/perfmon/events/intel_x86_arch_events.h | 63 + > user/perfmon/events/perf_events.h | 410 +++ > user/perfmon/examples/Makefile | 66 + > user/perfmon/examples/check_events.c | 161 + > user/perfmon/examples/showevtinfo.c | 913 ++++++ > user/perfmon/include/perfmon/err.h | 45 + > user/perfmon/include/perfmon/perf_event.h | 504 ++++ > user/perfmon/include/perfmon/pfmlib.h | 490 ++++ > user/perfmon/include/perfmon/pfmlib_perf_event.h | 64 + > user/perfmon/pfmlib_amd64.c | 860 ++++++ > user/perfmon/pfmlib_amd64_fam10h.c | 63 + > user/perfmon/pfmlib_amd64_fam11h.c | 61 + > user/perfmon/pfmlib_amd64_fam12h.c | 61 + > user/perfmon/pfmlib_amd64_fam14h.c | 60 + > user/perfmon/pfmlib_amd64_fam15h.c | 85 + > user/perfmon/pfmlib_amd64_k7.c | 60 + > user/perfmon/pfmlib_amd64_k8.c | 66 + > user/perfmon/pfmlib_amd64_priv.h | 217 ++ > user/perfmon/pfmlib_common.c | 1938 +++++++++++++ > user/perfmon/pfmlib_intel_atom.c | 86 + > user/perfmon/pfmlib_intel_bdw.c | 70 + > user/perfmon/pfmlib_intel_core.c | 81 + > user/perfmon/pfmlib_intel_coreduo.c | 83 + > user/perfmon/pfmlib_intel_hsw.c | 109 + > user/perfmon/pfmlib_intel_ivb.c | 106 + > user/perfmon/pfmlib_intel_ivb_unc.c | 86 + > user/perfmon/pfmlib_intel_ivbep_unc_cbo.c | 125 + > user/perfmon/pfmlib_intel_ivbep_unc_ha.c | 97 + > user/perfmon/pfmlib_intel_ivbep_unc_imc.c | 71 + > user/perfmon/pfmlib_intel_ivbep_unc_irp.c | 79 + > user/perfmon/pfmlib_intel_ivbep_unc_pcu.c | 97 + > user/perfmon/pfmlib_intel_ivbep_unc_qpi.c | 85 + > user/perfmon/pfmlib_intel_ivbep_unc_r2pcie.c | 61 + > user/perfmon/pfmlib_intel_ivbep_unc_r3qpi.c | 65 + > user/perfmon/pfmlib_intel_ivbep_unc_ubo.c | 61 + > user/perfmon/pfmlib_intel_knc.c | 61 + > user/perfmon/pfmlib_intel_netburst.c | 493 ++++ > user/perfmon/pfmlib_intel_netburst_priv.h | 233 ++ > user/perfmon/pfmlib_intel_nhm.c | 173 ++ > user/perfmon/pfmlib_intel_nhm_unc.c | 348 +++ > user/perfmon/pfmlib_intel_p6.c | 178 ++ > user/perfmon/pfmlib_intel_rapl.c | 158 + > user/perfmon/pfmlib_intel_slm.c | 76 + > user/perfmon/pfmlib_intel_snb.c | 107 + > user/perfmon/pfmlib_intel_snb_unc.c | 72 + > user/perfmon/pfmlib_intel_snbep_unc.c | 630 ++++ > user/perfmon/pfmlib_intel_snbep_unc_cbo.c | 107 + > user/perfmon/pfmlib_intel_snbep_unc_ha.c | 93 + > user/perfmon/pfmlib_intel_snbep_unc_imc.c | 67 + > user/perfmon/pfmlib_intel_snbep_unc_pcu.c | 96 + > user/perfmon/pfmlib_intel_snbep_unc_priv.h | 296 ++ > user/perfmon/pfmlib_intel_snbep_unc_qpi.c | 84 + > user/perfmon/pfmlib_intel_snbep_unc_r2pcie.c | 61 + > user/perfmon/pfmlib_intel_snbep_unc_r3qpi.c | 64 + > user/perfmon/pfmlib_intel_snbep_unc_ubo.c | 61 + > user/perfmon/pfmlib_intel_wsm.c | 111 + > user/perfmon/pfmlib_intel_x86.c | 1014 +++++++ > user/perfmon/pfmlib_intel_x86_arch.c | 224 ++ > user/perfmon/pfmlib_intel_x86_priv.h | 345 +++ > user/perfmon/pfmlib_priv.h | 439 +++ > user/perfmon/tests/Makefile | 74 + > user/perfmon/tests/validate.c | 344 +++ > user/perfmon/tests/validate_arm.c | 324 +++ > user/perfmon/tests/validate_arm64.c | 208 ++ > user/perfmon/tests/validate_mips.c | 224 ++ > user/perfmon/tests/validate_power.c | 223 ++ > user/perfmon/tests/validate_x86.c | 3064 > ++++++++++++++++++++ > 153 files changed, 71747 insertions(+), 220 deletions(-) > create mode 100644 kern/arch/x86/msr.c > create mode 100644 kern/arch/x86/msr.h > create mode 100644 kern/arch/x86/ros/perfmon.h > create mode 100644 kern/include/percpu.h > create mode 100644 kern/include/ros/memops.h > create mode 100644 kern/src/percpu.c > create mode 100644 tools/profile/perf/.gitignore > create mode 100644 tools/profile/perf/Makefile > create mode 100644 tools/profile/perf/akaros.c > create mode 100644 tools/profile/perf/akaros.h > create mode 100644 tools/profile/perf/perf.c > create mode 100644 tools/profile/perf/perf_core.c > create mode 100644 tools/profile/perf/perf_core.h > create mode 100644 tools/profile/perf/xlib.c > create mode 100644 tools/profile/perf/xlib.h > create mode 100644 user/perfmon/Makefile > create mode 100644 user/perfmon/events/amd64_events_fam10h.h > create mode 100644 user/perfmon/events/amd64_events_fam11h.h > create mode 100644 user/perfmon/events/amd64_events_fam12h.h > create mode 100644 user/perfmon/events/amd64_events_fam14h.h > create mode 100644 user/perfmon/events/amd64_events_fam15h.h > create mode 100644 user/perfmon/events/amd64_events_fam15h_nb.h > create mode 100644 user/perfmon/events/amd64_events_k7.h > create mode 100644 user/perfmon/events/amd64_events_k8.h > create mode 100644 user/perfmon/events/intel_atom_events.h > create mode 100644 user/perfmon/events/intel_bdw_events.h > create mode 100644 user/perfmon/events/intel_core_events.h > create mode 100644 user/perfmon/events/intel_coreduo_events.h > create mode 100644 user/perfmon/events/intel_hsw_events.h > create mode 100644 user/perfmon/events/intel_ivb_events.h > create mode 100644 user/perfmon/events/intel_ivbep_unc_cbo_events.h > create mode 100644 user/perfmon/events/intel_ivbep_unc_ha_events.h > create mode 100644 user/perfmon/events/intel_ivbep_unc_imc_events.h > create mode 100644 user/perfmon/events/intel_ivbep_unc_irp_events.h > create mode 100644 user/perfmon/events/intel_ivbep_unc_pcu_events.h > create mode 100644 user/perfmon/events/intel_ivbep_unc_qpi_events.h > create mode 100644 user/perfmon/events/intel_ivbep_unc_r2pcie_events.h > create mode 100644 user/perfmon/events/intel_ivbep_unc_r3qpi_events.h > create mode 100644 user/perfmon/events/intel_ivbep_unc_ubo_events.h > create mode 100644 user/perfmon/events/intel_knc_events.h > create mode 100644 user/perfmon/events/intel_netburst_events.h > create mode 100644 user/perfmon/events/intel_nhm_events.h > create mode 100644 user/perfmon/events/intel_nhm_unc_events.h > create mode 100644 user/perfmon/events/intel_p6_events.h > create mode 100644 user/perfmon/events/intel_pii_events.h > create mode 100644 user/perfmon/events/intel_pm_events.h > create mode 100644 user/perfmon/events/intel_ppro_events.h > create mode 100644 user/perfmon/events/intel_slm_events.h > create mode 100644 user/perfmon/events/intel_snb_events.h > create mode 100644 user/perfmon/events/intel_snb_unc_events.h > create mode 100644 user/perfmon/events/intel_snbep_events.h > create mode 100644 user/perfmon/events/intel_snbep_unc_cbo_events.h > create mode 100644 user/perfmon/events/intel_snbep_unc_ha_events.h > create mode 100644 user/perfmon/events/intel_snbep_unc_imc_events.h > create mode 100644 user/perfmon/events/intel_snbep_unc_pcu_events.h > create mode 100644 user/perfmon/events/intel_snbep_unc_qpi_events.h > create mode 100644 user/perfmon/events/intel_snbep_unc_r2pcie_events.h > create mode 100644 user/perfmon/events/intel_snbep_unc_r3qpi_events.h > create mode 100644 user/perfmon/events/intel_snbep_unc_ubo_events.h > create mode 100644 user/perfmon/events/intel_wsm_events.h > create mode 100644 user/perfmon/events/intel_wsm_unc_events.h > create mode 100644 user/perfmon/events/intel_x86_arch_events.h > create mode 100644 user/perfmon/events/perf_events.h > create mode 100644 user/perfmon/examples/Makefile > create mode 100644 user/perfmon/examples/check_events.c > create mode 100644 user/perfmon/examples/showevtinfo.c > create mode 100644 user/perfmon/include/perfmon/err.h > create mode 100644 user/perfmon/include/perfmon/perf_event.h > create mode 100644 user/perfmon/include/perfmon/pfmlib.h > create mode 100644 user/perfmon/include/perfmon/pfmlib_perf_event.h > create mode 100644 user/perfmon/pfmlib_amd64.c > create mode 100644 user/perfmon/pfmlib_amd64_fam10h.c > create mode 100644 user/perfmon/pfmlib_amd64_fam11h.c > create mode 100644 user/perfmon/pfmlib_amd64_fam12h.c > create mode 100644 user/perfmon/pfmlib_amd64_fam14h.c > create mode 100644 user/perfmon/pfmlib_amd64_fam15h.c > create mode 100644 user/perfmon/pfmlib_amd64_k7.c > create mode 100644 user/perfmon/pfmlib_amd64_k8.c > create mode 100644 user/perfmon/pfmlib_amd64_priv.h > create mode 100644 user/perfmon/pfmlib_common.c > create mode 100644 user/perfmon/pfmlib_intel_atom.c > create mode 100644 user/perfmon/pfmlib_intel_bdw.c > create mode 100644 user/perfmon/pfmlib_intel_core.c > create mode 100644 user/perfmon/pfmlib_intel_coreduo.c > create mode 100644 user/perfmon/pfmlib_intel_hsw.c > create mode 100644 user/perfmon/pfmlib_intel_ivb.c > create mode 100644 user/perfmon/pfmlib_intel_ivb_unc.c > create mode 100644 user/perfmon/pfmlib_intel_ivbep_unc_cbo.c > create mode 100644 user/perfmon/pfmlib_intel_ivbep_unc_ha.c > create mode 100644 user/perfmon/pfmlib_intel_ivbep_unc_imc.c > create mode 100644 user/perfmon/pfmlib_intel_ivbep_unc_irp.c > create mode 100644 user/perfmon/pfmlib_intel_ivbep_unc_pcu.c > create mode 100644 user/perfmon/pfmlib_intel_ivbep_unc_qpi.c > create mode 100644 user/perfmon/pfmlib_intel_ivbep_unc_r2pcie.c > create mode 100644 user/perfmon/pfmlib_intel_ivbep_unc_r3qpi.c > create mode 100644 user/perfmon/pfmlib_intel_ivbep_unc_ubo.c > create mode 100644 user/perfmon/pfmlib_intel_knc.c > create mode 100644 user/perfmon/pfmlib_intel_netburst.c > create mode 100644 user/perfmon/pfmlib_intel_netburst_priv.h > create mode 100644 user/perfmon/pfmlib_intel_nhm.c > create mode 100644 user/perfmon/pfmlib_intel_nhm_unc.c > create mode 100644 user/perfmon/pfmlib_intel_p6.c > create mode 100644 user/perfmon/pfmlib_intel_rapl.c > create mode 100644 user/perfmon/pfmlib_intel_slm.c > create mode 100644 user/perfmon/pfmlib_intel_snb.c > create mode 100644 user/perfmon/pfmlib_intel_snb_unc.c > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc.c > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc_cbo.c > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc_ha.c > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc_imc.c > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc_pcu.c > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc_priv.h > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc_qpi.c > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc_r2pcie.c > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc_r3qpi.c > create mode 100644 user/perfmon/pfmlib_intel_snbep_unc_ubo.c > create mode 100644 user/perfmon/pfmlib_intel_wsm.c > create mode 100644 user/perfmon/pfmlib_intel_x86.c > create mode 100644 user/perfmon/pfmlib_intel_x86_arch.c > create mode 100644 user/perfmon/pfmlib_intel_x86_priv.h > create mode 100644 user/perfmon/pfmlib_priv.h > create mode 100644 user/perfmon/tests/Makefile > create mode 100644 user/perfmon/tests/validate.c > create mode 100644 user/perfmon/tests/validate_arm.c > create mode 100644 user/perfmon/tests/validate_arm64.c > create mode 100644 user/perfmon/tests/validate_mips.c > create mode 100644 user/perfmon/tests/validate_power.c > create mode 100644 user/perfmon/tests/validate_x86.c > > -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
