This patch set modifies time implementation to use TSC when running on a x86 CPU that has invarint TSC CPU flag set. Otherwise, the same Linux system time is used as before. TSC is much more efficient both in performance and latency/jitter wise than Linux system call. This can be seen also with scheduler latency test which time stamps events with this API. All latency measurements (min, ave, max) improved significantly.
This is sent through api-next as cpu flags are printed through new system info print function for debugging purposes (to verify that invariant TSC flag is read correctly). Patch 2/8 causes two checkpatch errors due to code copied from DPDK. Both the macro and the ifdef cannot be changed, so errors should be ignored. v2: * Use ODP_PRINT instead of printf * Removed couple of time.hw.reserved set to zero. One remains since otherwise GCC suspects usage of unintialized variable (false warning). * Fixed install of new arch/x86/cpu_flag files Petri Savolainen (8): api: system: added system info print linux-gen: cpu_flags: added x86 cpu flag read functions linux-gen: system: implement system info print test: validation: add odp_sys_info_print test test: sched_latency: use sys_info_print test: validation: rename time test header file test: validation: add time accuracy test linux-gen: time: use hw time counter when available configure.ac | 1 + include/odp/api/spec/system_info.h | 9 + platform/Makefile.inc | 4 +- platform/linux-generic/Makefile.am | 5 + platform/linux-generic/arch/arm/odp_cpu_arch.c | 16 + .../linux-generic/arch/arm/odp_sysinfo_parse.c | 4 + platform/linux-generic/arch/default/odp_cpu_arch.c | 16 + .../linux-generic/arch/default/odp_sysinfo_parse.c | 4 + platform/linux-generic/arch/mips64/odp_cpu_arch.c | 16 + .../linux-generic/arch/mips64/odp_sysinfo_parse.c | 4 + platform/linux-generic/arch/powerpc/odp_cpu_arch.c | 16 + .../linux-generic/arch/powerpc/odp_sysinfo_parse.c | 4 + platform/linux-generic/arch/x86/cpu_flags.c | 368 +++++++++++++++++++++ platform/linux-generic/arch/x86/cpu_flags.h | 20 ++ platform/linux-generic/arch/x86/odp_cpu_arch.c | 59 ++++ .../linux-generic/arch/x86/odp_sysinfo_parse.c | 6 + .../include/odp/api/plat/time_types.h | 23 +- platform/linux-generic/include/odp_internal.h | 1 + platform/linux-generic/include/odp_time_internal.h | 24 ++ platform/linux-generic/odp_system_info.c | 30 ++ platform/linux-generic/odp_time.c | 300 +++++++++++++---- test/common_plat/performance/odp_sched_latency.c | 18 +- test/common_plat/validation/api/system/system.c | 8 + test/common_plat/validation/api/system/system.h | 1 + test/common_plat/validation/api/time/Makefile.am | 2 +- test/common_plat/validation/api/time/time.c | 74 ++++- test/common_plat/validation/api/time/time_main.c | 2 +- .../validation/api/time/{time.h => time_test.h} | 0 28 files changed, 938 insertions(+), 97 deletions(-) create mode 100644 platform/linux-generic/arch/x86/cpu_flags.c create mode 100644 platform/linux-generic/arch/x86/cpu_flags.h create mode 100644 platform/linux-generic/include/odp_time_internal.h rename test/common_plat/validation/api/time/{time.h => time_test.h} (100%) -- 2.11.0