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.
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/linux-generic/Makefile.am | 5 +
platform/linux-generic/arch/arm/odp_cpu_arch.c | 11 +
.../linux-generic/arch/arm/odp_sysinfo_parse.c | 4 +
platform/linux-generic/arch/default/odp_cpu_arch.c | 11 +
.../linux-generic/arch/default/odp_sysinfo_parse.c | 4 +
platform/linux-generic/arch/mips64/odp_cpu_arch.c | 11 +
.../linux-generic/arch/mips64/odp_sysinfo_parse.c | 4 +
platform/linux-generic/arch/powerpc/odp_cpu_arch.c | 11 +
.../linux-generic/arch/powerpc/odp_sysinfo_parse.c | 4 +
platform/linux-generic/arch/x86/cpu_flags.c | 358 +++++++++++++++++++++
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 | 20 ++
platform/linux-generic/odp_time.c | 303 +++++++++++++----
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
27 files changed, 898 insertions(+), 96 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