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.

Reply via email to