Mark Salyzyn
f4e888faa8
ANDROID: clock_gettime(CLOCK_BOOTTIME,) slows down >20x
...
clock_gettime(CLOCK_BOOTTIME,) slows down after significant
accumulation of suspend time creating a large offset between it and
CLOCK_MONOTONIC time. The __iter_div_u64_rem() is only for the usage
of adding a few second+nanosecond times and saving cycles on more
expensive remainder and division operations, but iterates one second
at a time which quickly goes out of scale in CLOCK_BOOTTIME's case
since it was specified as nanoseconds only.
The fix is to split off seconds from the boot time and cap the
nanoseconds so that __iter_div_u64_rem does not iterate.
Signed-off-by: Mark Salyzyn <salyzyn@google.com >
Bug: 72406285
Change-Id: Ia647ef1e76b7ba3b0c003028d4b3b955635adabb
2022-02-23 22:15:02 +01:00
Mark Salyzyn
c38138b01e
FROMLIST: lib: vdso: add support for time
...
(cherry pick from url https://patchwork.kernel.org/patch/10053549/ )
Add time() vdso support to match up with existing support in the x86's
vdso. Currently benefitting arm and arm64 which uses the common
vgettimeofday.c implementation. On arm provides about a ~14 fold
improvement in speed over the straight syscall, and about a ~5 fold
improvement in speed over an alternate library implementation that
relies on the vdso call to gettimeofday to fulfill the request.
We can provide __vdso_time even if we can not provide a speed
enhanced __vdso_gettimeofday.
Signed-off-by: Mark Salyzyn <salyzyn@android.com >
Bug: 63737556
Bug: 20045882
Change-Id: I0bb3c6bafe57f9ed69350e2dd54edaae58316e8f
2022-02-23 22:15:01 +01:00
Mark Salyzyn
ec9b6d3b6c
FROMLIST: [PATCH v5 12/12] lib: vdso: do not expose gettimeofday, if no arch supported timer
...
(cherry pick from url https://patchwork.kernel.org/patch/10044539/ )
Take an effort to recode the arm64 vdso code from assembler to C
previously submitted by Andrew Pinski <apinski@cavium.com >, rework
it for use in both arm and arm64, overlapping any optimizations
for each architecture. But instead of landing it in arm64, land the
result into lib/vdso and unify both implementations to simplify
future maintenance.
If ARCH_PROVIDES_TIMER is not defined, do not expose gettimeofday.
libc will default directly to syscall. Also ifdef clock_gettime
switch cases and stubs if not supported and other unused components.
Signed-off-by: Mark Salyzyn <salyzyn@android.com >
Cc: James Morse <james.morse@arm.com >
Cc: Russell King <linux@armlinux.org.uk >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: Will Deacon <will.deacon@arm.com >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Dmitry Safonov <dsafonov@virtuozzo.com >
Cc: John Stultz <john.stultz@linaro.org >
Cc: Mark Rutland <mark.rutland@arm.com >
Cc: Laura Abbott <labbott@redhat.com >
Cc: Kees Cook <keescook@chromium.org >
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org >
Cc: Andy Gross <andy.gross@linaro.org >
Cc: Kevin Brodsky <kevin.brodsky@arm.com >
Cc: Andrew Pinski <apinski@cavium.com >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-kernel@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Bug: 63737556
Bug: 20045882
Change-Id: I362a7114db0aac800e16eb90d14a8739e18f42e4
2022-02-23 22:15:01 +01:00
Mark Salyzyn
7c8dfd521d
FROMLIST: [PATCH v5 11/12] lib: vdso: Add support for CLOCK_BOOTTIME
...
(cherry pick from url https://patchwork.kernel.org/patch/10044503/ )
Take an effort to recode the arm64 vdso code from assembler to C
previously submitted by Andrew Pinski <apinski@cavium.com >, rework
it for use in both arm and arm64, overlapping any optimizations
for each architecture. But instead of landing it in arm64, land the
result into lib/vdso and unify both implementations to simplify
future maintenance.
Add a case for CLOCK_BOOTTIME as it is popular for measuring
relative time on systems expected to suspend() or hibernate().
Android uses CLOCK_BOOTTIME for all relative time measurements
and timeouts. Switching to vdso reduced CPU utilization and improves
accuracy. There is also a desire by some partners to switch all
logging over to CLOCK_BOOTTIME, and thus this operation alone would
contribute to a near percentile CPU load.
Signed-off-by: Mark Salyzyn <salyzyn@android.com >
Cc: James Morse <james.morse@arm.com >
Cc: Russell King <linux@armlinux.org.uk >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: Will Deacon <will.deacon@arm.com >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Dmitry Safonov <dsafonov@virtuozzo.com >
Cc: John Stultz <john.stultz@linaro.org >
Cc: Mark Rutland <mark.rutland@arm.com >
Cc: Laura Abbott <labbott@redhat.com >
Cc: Kees Cook <keescook@chromium.org >
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org >
Cc: Andy Gross <andy.gross@linaro.org >
Cc: Kevin Brodsky <kevin.brodsky@arm.com >
Cc: Andrew Pinski <apinski@cavium.com >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-kernel@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Bug: 63737556
Bug: 20045882
Change-Id: I76c26b054baf7f1100e03c65d6b16fe649b883b1
2022-02-23 22:15:01 +01:00
Mark Salyzyn
6b5641e7f0
FROMLIST: [PATCH v5 09/12] arm: vdso: move vgettimeofday.c to lib/vdso/
...
(cherry pick from url https://patchwork.kernel.org/patch/10044497/ )
Take an effort to recode the arm64 vdso code from assembler to C
previously submitted by Andrew Pinski <apinski@cavium.com >, rework
it for use in both arm and arm64, overlapping any optimizations
for each architecture. But instead of landing it in arm64, land the
result into lib/vdso and unify both implementations to simplify
future maintenance.
Declare arch/arm/vdso/vgettimeofday.c to be a candidate for a global
implementation of the vdso timer calls. The hope is that new
architectures can take advantage of the current unification of
arm and arm64 implementations.
We urge future efforts to merge their implementations into the
global vgettimeofday.c file and thus provide functional parity.
Signed-off-by: Mark Salyzyn <salyzyn@android.com >
Cc: James Morse <james.morse@arm.com >
Cc: Russell King <linux@armlinux.org.uk >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: Will Deacon <will.deacon@arm.com >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Dmitry Safonov <dsafonov@virtuozzo.com >
Cc: John Stultz <john.stultz@linaro.org >
Cc: Mark Rutland <mark.rutland@arm.com >
Cc: Laura Abbott <labbott@redhat.com >
Cc: Kees Cook <keescook@chromium.org >
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org >
Cc: Andy Gross <andy.gross@linaro.org >
Cc: Kevin Brodsky <kevin.brodsky@arm.com >
Cc: Andrew Pinski <apinski@cavium.com >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-kernel@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Bug: 63737556
Bug: 20045882
Change-Id: If7da1d8144684d52ed9520a581e6023c623df931
2022-02-23 22:15:01 +01:00