diff options
Diffstat (limited to 'test')
| -rwxr-xr-x | test/.gitignore | 4 | ||||
| -rw-r--r-- | test/qemu-targetstep.c (renamed from test/qemu-eviction.c) | 28 | ||||
| -rw-r--r-- | test/qemu-targetstep_guest.c (renamed from test/qemu-eviction_guest.c) | 7 |
3 files changed, 30 insertions, 9 deletions
diff --git a/test/.gitignore b/test/.gitignore index cea8b5a..9c69377 100755 --- a/test/.gitignore +++ b/test/.gitignore @@ -7,10 +7,10 @@ kvm-step kvm-step_guest kvm-pagestep kvm-pagestep_guest -qemu-eviction -qemu-eviction_guest qemu-pagestep qemu-aes qemu-aes_guest qemu-poc qemu-poc_guest +qemu-targetstep +qemu-targetstep_guest diff --git a/test/qemu-eviction.c b/test/qemu-targetstep.c index 2392472..a7345a3 100644 --- a/test/qemu-eviction.c +++ b/test/qemu-targetstep.c @@ -17,6 +17,7 @@ static struct cpc_event event; static struct cpc_event_batch batch; +static uint64_t last_user_inst_gfn; int monitor(bool baseline) @@ -30,7 +31,7 @@ monitor(bool baseline) switch (event.type) { case CPC_EVENT_GUEST: - printf("Guest event: %i\n", event.guest.type); + printf("Guest %s\n", !event.guest.type ? "start" : "stop"); if (event.guest.type == CPC_GUEST_STOP_TRACK) return 2; break; @@ -71,7 +72,14 @@ read_batch(void) if (batch.buf[i].type != CPC_EVENT_TRACK_PAGE) continue; - printf("GFN %08llx\n", batch.buf[i].page.inst_gfn); + if (batch.buf[i].page.retinst_user > 0) { + printf("GFN %08llx %04x %4llu %4llu\n", + batch.buf[i].page.inst_gfn, + batch.buf[i].page.fault_err, + batch.buf[i].page.retinst, + batch.buf[i].page.retinst_user); + last_user_inst_gfn = batch.buf[i].page.inst_gfn; + } } } @@ -185,8 +193,12 @@ main(int argc, const char **argv) ret = ioctl(kvm_dev, KVM_CPC_POLL_EVENT, &event); if (ret && errno == EAGAIN) continue; if (ret) err(1, "KVM_CPC_POLL_EVENT"); - - printf("EVENT %i\n", event.type); + + if (event.type == CPC_EVENT_GUEST) { + read_batch(); + printf("Guest %s\n", + !event.guest.type ? "start" : "stop"); + } if (event.type == CPC_EVENT_GUEST && event.guest.type == CPC_GUEST_START_TRACK) { @@ -207,17 +219,21 @@ main(int argc, const char **argv) if (!batch.cnt) errx(1, "empty batch buffer"); memset(&cfg, 0, sizeof(cfg)); cfg.mode = CPC_TRACK_STEPS; - cfg.steps.target_gfn = batch.buf[batch.cnt - 3].page.inst_gfn; + cfg.steps.target_gfn = last_user_inst_gfn; + cfg.steps.target_user = true; cfg.steps.use_target = true; cfg.steps.use_filter = true; - cfg.steps.with_data = true; + //cfg.steps.with_data = true; ret = ioctl(kvm_dev, KVM_CPC_TRACK_MODE, &cfg); if (ret) err(1, "KVM_CPC_TRACK_MODE"); ret = ioctl(kvm_dev, KVM_CPC_ACK_EVENT, &event.id); if (ret) err(1, "KVM_CPC_ACK_EVENT"); + printf("Target GFN: %08llx\n", cfg.steps.target_gfn); + while (monitor(false) != 2); + read_batch(); signal(SIGINT, NULL); diff --git a/test/qemu-eviction_guest.c b/test/qemu-targetstep_guest.c index 086fee5..9ef36e1 100644 --- a/test/qemu-eviction_guest.c +++ b/test/qemu-targetstep_guest.c @@ -2,6 +2,7 @@ #include <sys/time.h> #include <sys/resource.h> +#include <errno.h> #include <err.h> #include <unistd.h> #include <stdint.h> @@ -13,13 +14,17 @@ int main(int argc, const char **argv) { void *buf; + int ret; buf = NULL; if (posix_memalign(&buf, L1_LINESIZE * L1_SETS, L1_LINESIZE * L1_SETS)) err(1, "memalign"); memset(buf, 0, L1_LINESIZE * L1_SETS); - setpriority(PRIO_PROCESS, 0, -20); + errno = 0; + ret = setpriority(PRIO_PROCESS, 0, -20); + if (errno) err(1, "setpriority"); + printf("NICE %i\n", ret); while (1) { printf("LOOP\n"); |
