Skip to content

RFC Emulator speedups - avoid initializations where possible

Bandan Das kvm lkml 3 versions – Applied

Status from this message: Applied to a private branch collecting all the emulator speedups. Thanks!

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 RFC Latest6 patches 1 replyApplied
  2. v2 RFC6 patches 3 repliesSuperseded
  3. v1 RFC2 patches 1 replySuperseded

Changes in v3 from the cover letter

Minor changes as proposed in review
- 3/6 - cleanup typos
- 6/6 - change comment in struct x86_emulate_ctxt and add back a missing if in decode_modrm

Patches in v3 Applied

#Subject and filesSizeRepliesApplied
1/6KVM: emulate: move init_decode_cache to emulate.carch/x86/include/asm/kvm_emulate.h arch/x86/kvm/emulate.c arch/x86/kvm/x86.c+14 -130 replies
2/6KVM: emulate: Remove ctxt->intercept and ctxt->check_perm checksarch/x86/kvm/emulate.c+4 -40 replies
3/6KVM: emulate: cleanup decode_modrmarch/x86/kvm/emulate.c+6 -80 replies
4/6KVM: emulate: clean up initializations in init_decode_cachearch/x86/include/asm/kvm_emulate.h arch/x86/kvm/emulate.c+13 -140 replies
5/6KVM: emulate: rework seg_overridearch/x86/include/asm/kvm_emulate.h arch/x86/kvm/emulate.c+17 -270 replies
6/6KVM: emulate: remove memopp and rip_relativearch/x86/include/asm/kvm_emulate.h arch/x86/kvm/emulate.c+14 -140 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.

Read the v3 thread

Cover letter [RFC PATCH v3 0/6] Emulator speedups - avoid initializations where possible

While initializing emulation context structure, kvm memsets to 0 a number of fields some of which are redundant since they get set eventually in x86_decode_insn. Cleanup unnecessary initializations and remove some fields.

This is on top of Paolo's RFC
KVM: x86: speedups for emulator memory accesses
https://lkml.org/lkml/2014/4/1/494

Here are the new realmode.flat numbers with improvement wrt unpatched kernel -

639 cycles/emulated jump instruction (4.3%) 776 cycles/emulated move instruction (7.5%) 791 cycles/emulated arithmetic instruction (11%) 943 cycles/emulated memory load instruction (5.2%) 948 cycles/emulated memory store instruction (7.6%) 929 cycles/emulated memory RMW instruction (9.0%)

v1 numbers -
639 cycles/emulated jump instruction
786 cycles/emulated move instruction
802 cycles/emulated arithmetic instruction
936 cycles/emulated memory load instruction
970 cycles/emulated memory store instruction
1000 cycles/emulated memory RMW instruction

v3:
Minor changes as proposed in review
- 3/6 - cleanup typos
- 6/6 - change comment in struct x86_emulate_ctxt and add back a missing if in decode_modrm

v2:
All thanks and credit to Paolo!
- 1/6 - no change
- 2/6 - new patch, inercept and check_perm replaced with checks for bits in ctxt->d
- 3/6 - new patch, remove if condition in decode_rm and rearrange bit operations
- 4/6 - remove else conditions from v1 and misc cleanups
- 5/6 - new patch, remove seg_override and related fields and functions
- 6/6 - new patch, remove memopp and move rip_relative to a local variable in decode_modrm

Bandan Das (6):
KVM: emulate: move init_decode_cache to emulate.c
KVM: emulate: Remove ctxt->intercept and ctxt->check_perm checks
KVM: emulate: cleanup decode_modrm
KVM: emulate: clean up initializations in init_decode_cache
KVM: emulate: rework seg_override
KVM: emulate: remove memopp and rip_relative

 arch/x86/include/asm/kvm_emulate.h | 26 +++++++-----
 arch/x86/kvm/emulate.c             | 85 ++++++++++++++++++--------------------
 arch/x86/kvm/x86.c                 | 13 ------
 3 files changed, 56 insertions(+), 68 deletions(-)
Signature · 1 line
1.8.3.1