Date: Mon, 16 Jun 2014 06:37:35 GMT From: mihai@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r269607 - in soc2014/mihai/bhyve-icache-head/sys/amd64: include vmm Message-ID: <201406160637.s5G6bZsm072570@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mihai Date: Mon Jun 16 06:37:35 2014 New Revision: 269607 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269607 Log: sys: amd64: vmm: add VMM_STAT counters for instruction caching Modified: soc2014/mihai/bhyve-icache-head/sys/amd64/include/vmm_instruction_cache.h soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm.c soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_instruction_cache.c soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_stat.c soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_stat.h Modified: soc2014/mihai/bhyve-icache-head/sys/amd64/include/vmm_instruction_cache.h ============================================================================== --- soc2014/mihai/bhyve-icache-head/sys/amd64/include/vmm_instruction_cache.h Mon Jun 16 04:32:27 2014 (r269606) +++ soc2014/mihai/bhyve-icache-head/sys/amd64/include/vmm_instruction_cache.h Mon Jun 16 06:37:35 2014 (r269607) @@ -33,11 +33,11 @@ int vmm_inst_cache_init(void); int vmm_inst_cache_cleanup(void); -int vm_inst_cache_add(struct vm *vm, uint64_t rip, uint64_t cr3, +int vm_inst_cache_add(struct vm *vm, int vcpu, uint64_t rip, uint64_t cr3, enum vie_paging_mode paging_mode, struct vie *vie); -int vm_inst_cache_lookup(struct vm *vm, uint64_t rip, uint64_t cr3, +int vm_inst_cache_lookup(struct vm *vm, int vcpu, uint64_t rip, uint64_t cr3, struct vie *vie); -int vm_inst_cache_delete(struct vm *vm, uint64_t rip, uint64_t cr3); +int vm_inst_cache_delete(struct vm *vm, int vcpu, uint64_t rip, uint64_t cr3); #define vm_inst_cache_lock_init(vm) sx_init(&vm->inst_cache_lock, "VM INST CACHE LOCK") #define vm_inst_cache_xlock(vm) sx_xlock(&vm->inst_cache_lock) Modified: soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm.c ============================================================================== --- soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm.c Mon Jun 16 04:32:27 2014 (r269606) +++ soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm.c Mon Jun 16 06:37:35 2014 (r269607) @@ -1136,7 +1136,7 @@ if (!inst_cache_locked) { inst_cache_locked = true; vm_inst_cache_xlock(vm); - vm_inst_cache_delete(vm, vme->u.paging.gpa, vme->u.paging.cr3); + vm_inst_cache_delete(vm, vcpuid, vme->u.paging.gpa, vme->u.paging.cr3); goto again; } } @@ -1185,7 +1185,7 @@ /* Check to see if the instruction is cached */ vm_inst_cache_slock(vm); - if (vm_inst_cache_lookup(vm, rip, cr3, vie)) { + if (vm_inst_cache_lookup(vm, vcpuid, rip, cr3, vie)) { vm_inst_cache_unlock(vm); vie_init(vie); @@ -1200,7 +1200,7 @@ vm_inst_cache_xlock(vm); /* Cache decoded instruction for further use */ - vm_inst_cache_add(vm, rip, cr3, paging_mode, vie); + vm_inst_cache_add(vm, vcpuid, rip, cr3, paging_mode, vie); } vm_inst_cache_unlock(vm); Modified: soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_instruction_cache.c ============================================================================== --- soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_instruction_cache.c Mon Jun 16 04:32:27 2014 (r269606) +++ soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_instruction_cache.c Mon Jun 16 06:37:35 2014 (r269607) @@ -46,6 +46,8 @@ #include <machine/vmm.h> #include <machine/vmm_instruction_cache.h> +#include "vmm_stat.h" + #define PT_NLEVELS 10 #define GB (1024 * 1024 * 1024) @@ -292,7 +294,7 @@ return (-1); } int -vm_inst_cache_add(struct vm *vm, uint64_t rip, uint64_t cr3, +vm_inst_cache_add(struct vm *vm, int vcpu, uint64_t rip, uint64_t cr3, enum vie_paging_mode paging_mode, struct vie *vie) { @@ -328,11 +330,13 @@ sx_xunlock(&vie_cached_hash[hash].vie_cached_lock); + vmm_stat_incr(vm, vcpu, VM_INST_CACHE_INSERTIONS, 1); + return (0); } int -vm_inst_cache_lookup(struct vm *vm, uint64_t rip, uint64_t cr3, +vm_inst_cache_lookup(struct vm *vm, int vcpu, uint64_t rip, uint64_t cr3, struct vie *vie) { struct vie_cached *vie_cached; @@ -353,6 +357,9 @@ { bcopy(&vie_cached->vie, vie, sizeof(struct vie)); sx_sunlock(&vie_cached_hash[hash].vie_cached_lock); + + vmm_stat_incr(vm, vcpu, VM_INST_CACHE_HITS, 1); + return(0); } } @@ -361,7 +368,7 @@ } int -vm_inst_cache_delete(struct vm *vm, uint64_t fault_address, uint64_t cr3) +vm_inst_cache_delete(struct vm *vm, int vcpu, uint64_t fault_address, uint64_t cr3) { struct vie_cached *vie_cached, *vie_cached_safe; int hash, i; @@ -392,6 +399,8 @@ /* Remove the RIP found and continue searching */ LIST_REMOVE(vie_cached, vie_link); + vmm_stat_array_incr(vm, vcpu, VM_INST_CACHE_EVICTIONS, i, 1); + page_addr = vie_cached->pages[i]; page_size = vie_cached->pages_mask[i] + 1; Modified: soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_stat.c ============================================================================== --- soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_stat.c Mon Jun 16 04:32:27 2014 (r269606) +++ soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_stat.c Mon Jun 16 06:37:35 2014 (r269607) @@ -153,3 +153,7 @@ VMM_STAT(VMEXIT_USERSPACE, "number of vm exits handled in userspace"); VMM_STAT(VMEXIT_RENDEZVOUS, "number of times rendezvous pending at exit"); VMM_STAT(VMEXIT_EXCEPTION, "number of vm exits due to exceptions"); +VMM_STAT(VM_INST_CACHE_HITS, "number of instruction cache hits"); +VMM_STAT_ARRAY(VM_INST_CACHE_EVICTIONS, 4, "number of instruction cache evictions"); +VMM_STAT(VM_INST_CACHE_INSERTIONS, "number of instruction cache insertions"); + Modified: soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_stat.h ============================================================================== --- soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_stat.h Mon Jun 16 04:32:27 2014 (r269606) +++ soc2014/mihai/bhyve-icache-head/sys/amd64/vmm/vmm_stat.h Mon Jun 16 06:37:35 2014 (r269607) @@ -123,4 +123,7 @@ VMM_STAT_DECLARE(VMEXIT_USERSPACE); VMM_STAT_DECLARE(VMEXIT_RENDEZVOUS); VMM_STAT_DECLARE(VMEXIT_EXCEPTION); +VMM_STAT_DECLARE(VM_INST_CACHE_HITS); +VMM_STAT_DECLARE(VM_INST_CACHE_EVICTIONS); +VMM_STAT_DECLARE(VM_INST_CACHE_INSERTIONS); #endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201406160637.s5G6bZsm072570>