From: Jerin Jacob <hidden> Date: 2016-08-18 11:52:18
Existing cntvct_el0 based rte_rdtsc() provides portable
means to get wall clock counter at user space. Typically
it runs at <= 100MHz.
The alternative method to enable rte_rdtsc() for high resolution
wall clock counter is through armv8 PMU subsystem.
The PMU cycle counter runs at CPU frequency, However,
access to PMU cycle counter from user space is not enabled
by default in the arm64 linux kernel.
It is possible to enable cycle counter at user space access
by configuring the PMU from the privileged mode (kernel space).
by default rte_rdtsc() implementation uses portable
cntvct_el0 scheme. Application can choose the PMU based
implementation with CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU
Signed-off-by: Jerin Jacob <redacted>
---
The PMU based scheme useful for high accuracy performance profiling.
Find below the example steps to configure the PMU based cycle counter on an
armv8 machine.
# git clone https://github.com/jerinjacobk/armv8_pmu_cycle_counter_el0
# cd armv8_pmu_cycle_counter_el0
# make
# sudo insmod pmu_el0_cycle_counter.ko
# cd $DPDK_DIR
# make config T=arm64-armv8a-linuxapp-gcc
# echo "CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU=y" >> build/.config
# make -j 4
---
.../common/include/arch/arm/rte_cycles_64.h | 33 ++++++++++++++++++++++
1 file changed, 33 insertions(+)
-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jerin Jacob
Sent: Thursday, August 18, 2016 17:22
To: dev@dpdk.org
Cc: thomas.monjalon@6wind.com; jianbo.liu@linaro.org;
viktorin@rehivetech.com; Jerin Jacob [off-list ref]
Subject: [dpdk-dev] [PATCH] eal/armv8: high-resolution cycle counter
Existing cntvct_el0 based rte_rdtsc() provides portable
means to get wall clock counter at user space. Typically
it runs at <= 100MHz.
The alternative method to enable rte_rdtsc() for high resolution
wall clock counter is through armv8 PMU subsystem.
The PMU cycle counter runs at CPU frequency, However,
access to PMU cycle counter from user space is not enabled
by default in the arm64 linux kernel.
It is possible to enable cycle counter at user space access
by configuring the PMU from the privileged mode (kernel space).
by default rte_rdtsc() implementation uses portable
cntvct_el0 scheme. Application can choose the PMU based
implementation with CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU
Signed-off-by: Jerin Jacob <redacted>
---
The PMU based scheme useful for high accuracy performance profiling.
Find below the example steps to configure the PMU based cycle counter on an
armv8 machine.
# git clone https://github.com/jerinjacobk/armv8_pmu_cycle_counter_el0
# cd armv8_pmu_cycle_counter_el0
# make
# sudo insmod pmu_el0_cycle_counter.ko
# cd $DPDK_DIR
# make config T=arm64-armv8a-linuxapp-gcc
# echo "CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU=y" >> build/.config
# make -j 4
Can we make this kernel module also a part of DPDK. May be in the linuxapp so that it is also compiled with DPDK?
In your git repo I see that on cleanup the cycle count register is not disabled (PMCNTENCLR_EL0). It shall be better to disable the cycle count register too at module exit.
From: Jerin Jacob <hidden> Date: 2016-08-19 11:46:40
On Fri, Aug 19, 2016 at 09:43:36AM +0000, Nipun Gupta wrote:
Hi Jerin,
Hi Nipun,
quoted
-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jerin Jacob
Sent: Thursday, August 18, 2016 17:22
To: dev@dpdk.org
Cc: thomas.monjalon@6wind.com; jianbo.liu@linaro.org;
viktorin@rehivetech.com; Jerin Jacob [off-list ref]
Subject: [dpdk-dev] [PATCH] eal/armv8: high-resolution cycle counter
Existing cntvct_el0 based rte_rdtsc() provides portable
means to get wall clock counter at user space. Typically
it runs at <= 100MHz.
The alternative method to enable rte_rdtsc() for high resolution
wall clock counter is through armv8 PMU subsystem.
The PMU cycle counter runs at CPU frequency, However,
access to PMU cycle counter from user space is not enabled
by default in the arm64 linux kernel.
It is possible to enable cycle counter at user space access
by configuring the PMU from the privileged mode (kernel space).
by default rte_rdtsc() implementation uses portable
cntvct_el0 scheme. Application can choose the PMU based
implementation with CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU
Signed-off-by: Jerin Jacob <redacted>
---
The PMU based scheme useful for high accuracy performance profiling.
Find below the example steps to configure the PMU based cycle counter on an
armv8 machine.
# git clone https://github.com/jerinjacobk/armv8_pmu_cycle_counter_el0
# cd armv8_pmu_cycle_counter_el0
# make
# sudo insmod pmu_el0_cycle_counter.ko
# cd $DPDK_DIR
# make config T=arm64-armv8a-linuxapp-gcc
# echo "CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU=y" >> build/.config
# make -j 4
Can we make this kernel module also a part of DPDK. May be in the linuxapp so that it is also compiled with DPDK?
I thought so, Later I realized it may not be a good idea to add yet
another out of tree module in DPDK repo and DPDK tries to get rid of
existing out of tree modules.
In your git repo I see that on cleanup the cycle count register is not disabled (PMCNTENCLR_EL0). It shall be better to disable the cycle count register too at module exit.
Do you also plan to support performance monitor event counters?
No. This patch was inspired by armv7 PMU scheme and its part of DPDK.
The sole reason to add this support to catch any performance regression
through app/test application.Other than that, I think cntvct_el0 based
existing scheme is good enough for all the use cases.
From: Jan Viktorin <hidden> Date: 2016-08-19 12:25:09
On Fri, 19 Aug 2016 17:16:12 +0530
Jerin Jacob [off-list ref] wrote:
On Fri, Aug 19, 2016 at 09:43:36AM +0000, Nipun Gupta wrote:
quoted
Hi Jerin,
Hi Nipun,
quoted
quoted
-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jerin Jacob
Sent: Thursday, August 18, 2016 17:22
To: dev@dpdk.org
Cc: thomas.monjalon@6wind.com; jianbo.liu@linaro.org;
viktorin@rehivetech.com; Jerin Jacob [off-list ref]
Subject: [dpdk-dev] [PATCH] eal/armv8: high-resolution cycle counter
Existing cntvct_el0 based rte_rdtsc() provides portable
means to get wall clock counter at user space. Typically
it runs at <= 100MHz.
The alternative method to enable rte_rdtsc() for high resolution
wall clock counter is through armv8 PMU subsystem.
The PMU cycle counter runs at CPU frequency, However,
access to PMU cycle counter from user space is not enabled
by default in the arm64 linux kernel.
It is possible to enable cycle counter at user space access
by configuring the PMU from the privileged mode (kernel space).
by default rte_rdtsc() implementation uses portable
cntvct_el0 scheme. Application can choose the PMU based
implementation with CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU
Signed-off-by: Jerin Jacob <redacted>
---
The PMU based scheme useful for high accuracy performance profiling.
Find below the example steps to configure the PMU based cycle counter on an
armv8 machine.
# git clone https://github.com/jerinjacobk/armv8_pmu_cycle_counter_el0
# cd armv8_pmu_cycle_counter_el0
# make
# sudo insmod pmu_el0_cycle_counter.ko
# cd $DPDK_DIR
# make config T=arm64-armv8a-linuxapp-gcc
# echo "CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU=y" >> build/.config
# make -j 4
Can we make this kernel module also a part of DPDK. May be in the linuxapp so that it is also compiled with DPDK?
I thought so, Later I realized it may not be a good idea to add yet
another out of tree module in DPDK repo and DPDK tries to get rid of
existing out of tree modules.
This has also been my way of thinking. However, if we discover that such
kernel module would be really useful, I think we can do it.
In your git repo I see that on cleanup the cycle count register is not disabled (PMCNTENCLR_EL0). It shall be better to disable the cycle count register too at module exit.
OK
+1
I've got a private kernel driver enabling and disabling (hopefully) properly
this for ARMv7. If we'd like to merge it, I'd like to have a single module
or at least single module with 2 implementations...
I can post it if it would be helpful.
Regards
Jan
Do you also plan to support performance monitor event counters?
No. This patch was inspired by armv7 PMU scheme and its part of DPDK.
The sole reason to add this support to catch any performance regression
through app/test application.Other than that, I think cntvct_el0 based
existing scheme is good enough for all the use cases.
quoted
Regards,
Nipun
--
Jan Viktorin E-mail: Viktorin@RehiveTech.com
System Architect Web: www.RehiveTech.com
RehiveTech
Brno, Czech Republic
From: Jerin Jacob <hidden> Date: 2016-08-19 12:52:39
On Fri, Aug 19, 2016 at 02:24:58PM +0200, Jan Viktorin wrote:
On Fri, 19 Aug 2016 17:16:12 +0530
Jerin Jacob [off-list ref] wrote:
I've got a private kernel driver enabling and disabling (hopefully) properly
this for ARMv7. If we'd like to merge it, I'd like to have a single module
or at least single module with 2 implementations...
I can post it if it would be helpful.
I don't think we can use this in production as this may alter PMU state used
by 'perf' etc.I think let it be a debug interface for armv7 and armv8
and disable it by default.
Do you also plan to support performance monitor event counters?
No. This patch was inspired by armv7 PMU scheme and its part of DPDK.
The sole reason to add this support to catch any performance regression
through app/test application.Other than that, I think cntvct_el0 based
existing scheme is good enough for all the use cases.
quoted
Regards,
Nipun
--
Jan Viktorin E-mail: Viktorin@RehiveTech.com
System Architect Web: www.RehiveTech.com
RehiveTech
Brno, Czech Republic
-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jerin Jacob
Sent: Thursday, August 18, 2016 5:22 PM
To: dev@dpdk.org
Cc: thomas.monjalon@6wind.com; jianbo.liu@linaro.org;
viktorin@rehivetech.com; Jerin Jacob [off-list ref]
Subject: [dpdk-dev] [PATCH] eal/armv8: high-resolution cycle counter
Existing cntvct_el0 based rte_rdtsc() provides portable means to get wall clock
counter at user space. Typically it runs at <= 100MHz.
The alternative method to enable rte_rdtsc() for high resolution wall clock
counter is through armv8 PMU subsystem.
The PMU cycle counter runs at CPU frequency, However, access to PMU cycle
counter from user space is not enabled by default in the arm64 linux kernel.
It is possible to enable cycle counter at user space access by configuring the
PMU from the privileged mode (kernel space).
by default rte_rdtsc() implementation uses portable
cntvct_el0 scheme. Application can choose the PMU based implementation with
CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU
Signed-off-by: Jerin Jacob <redacted>
From: Thomas Monjalon <hidden> Date: 2016-10-04 08:42:55
2016-08-19 18:22, Jerin Jacob:
On Fri, Aug 19, 2016 at 02:24:58PM +0200, Jan Viktorin wrote:
quoted
On Fri, 19 Aug 2016 17:16:12 +0530
Jerin Jacob [off-list ref] wrote:
I've got a private kernel driver enabling and disabling (hopefully) properly
this for ARMv7. If we'd like to merge it, I'd like to have a single module
or at least single module with 2 implementations...
I can post it if it would be helpful.
I don't think we can use this in production as this may alter PMU state used
by 'perf' etc.I think let it be a debug interface for armv7 and armv8
and disable it by default.
Please could you document the use of PMU for debug and how it alters
usage of kernel counters?
A patch in doc/guides/prog_guide/profile_app.rst would be welcome.
Ideally, it would be a lot better to have a sysfs entry to enable PMU
counter with an upstream kernel.
From: Thomas Monjalon <hidden> Date: 2016-10-04 08:46:57
quoted
Existing cntvct_el0 based rte_rdtsc() provides portable means to get wall clock
counter at user space. Typically it runs at <= 100MHz.
The alternative method to enable rte_rdtsc() for high resolution wall clock
counter is through armv8 PMU subsystem.
The PMU cycle counter runs at CPU frequency, However, access to PMU cycle
counter from user space is not enabled by default in the arm64 linux kernel.
It is possible to enable cycle counter at user space access by configuring the
PMU from the privileged mode (kernel space).
by default rte_rdtsc() implementation uses portable
cntvct_el0 scheme. Application can choose the PMU based implementation with
CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU
Signed-off-by: Jerin Jacob <redacted>
Acked-by: Hemant Agrawal <redacted>
Applied, thanks
Please do not forget documentation and upstreaming efforts.