Hi all,
Sorry for the delay. I have been testing the TWED feature performance
lately. We select unixbench as the benchmark for some items of it is
lock-intensive(fstime/fsbuffer/fsdisk). We run unixbench on a 4-VCPU
VM, and bind every two VCPUs on one PCPU. Fixed TWED value is used and
here is the result.
twed_value | fstime | fsbuffer | fsdisk
--------------+---------------+------------+------------
disable | 16.0 | 14.1 | 18.0
0 | 16.3 | 13.5 | 17.2
1 | 17.5 | 14.7 | 17.4
2 | 17.3 | 15.3 | 18.0
3 | 17.7 | 15.2 | 18.9
4 | 17.9 | 14.3 | 18.2
5 | 17.2 | 14.1 | 19.0
6 | 5.8 | 4.2 | 5.7
7 | 6.2 | 5.6 | 12.8
Note:
fstime: File Copy 1024 bufsize 2000 maxblocks
fsbuffer: File Copy 256 bufsize 500 maxblocks
fsdisk: File Copy 4096 bufsize 8000 maxblocks
The index of unixbench, higher is better.
It is shown that, compared to the circumstance that TWED is disabled,
lock-intensive testing items have better performance if an appropriate
TWED value is set(up to 5.6%~11.9%). Meanwhile, the complete unixbench
test is run to prove that other testing items are not sensitive to this
parameter.
Thanks
Jingyi
On 9/29/2020 5:17 PM, Jingyi Wang wrote:
TWE Delay is an optional feature in ARMv8.6 Extentions. There is a
performance benefit in waiting for a period of time for an event to
arrive before taking the trap as it is common that event will arrive
“quite soon” after executing the WFE instruction.
This series adds support for TWED feature and implements TWE delay
value dynamic adjustment.
Thanks for Shameer's advice on this series. The function of this patch
has been tested on TWED supported hardware and the performance of it is
still on test, any advice will be welcomed.
Jingyi Wang (2):
KVM: arm64: Make use of TWED feature
KVM: arm64: Use dynamic TWE Delay value
Zengruan Ye (2):
arm64: cpufeature: TWED support detection
KVM: arm64: Add trace for TWED update
arch/arm64/Kconfig | 10 +++++
arch/arm64/include/asm/cpucaps.h | 3 +-
arch/arm64/include/asm/kvm_arm.h | 5 +++
arch/arm64/include/asm/kvm_emulate.h | 38 ++++++++++++++++++
arch/arm64/include/asm/kvm_host.h | 19 ++++++++-
arch/arm64/include/asm/virt.h | 8 ++++
arch/arm64/kernel/cpufeature.c | 12 ++++++
arch/arm64/kvm/arm.c | 58 ++++++++++++++++++++++++++++
arch/arm64/kvm/handle_exit.c | 2 +
arch/arm64/kvm/trace_arm.h | 21 ++++++++++
10 files changed, 174 insertions(+), 2 deletions(-)