diff options
| author | Louis Burda <quent.burda@gmail.com> | 2023-01-17 16:30:33 +0100 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2023-01-17 16:30:33 +0100 |
| commit | f2ea010b8180b4160d85c92e312971d0cd8a34d4 (patch) | |
| tree | 64e2598df2a0860187b1516e196ce7124de459a9 /test/util.c | |
| parent | 89785aa3c8d5d4007f856b14543a9b8aef31d661 (diff) | |
| download | cachepc-f2ea010b8180b4160d85c92e312971d0cd8a34d4.tar.gz cachepc-f2ea010b8180b4160d85c92e312971d0cd8a34d4.zip | |
Fixup kvm-eviction and refactor kvm-step
Diffstat (limited to 'test/util.c')
| -rw-r--r-- | test/util.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/test/util.c b/test/util.c new file mode 100644 index 0000000..f03a7ca --- /dev/null +++ b/test/util.c @@ -0,0 +1,106 @@ +#define _GNU_SOURCE + +#include "test/util.h" + +#include <err.h> +#include <sched.h> +#include <string.h> +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> + +void +hexdump(void *data, int len) +{ + int i; + + for (i = 0; i < len; i++) { + if (i % 16 == 0 && i) + printf("\n"); + printf("%02X ", *(uint8_t *)(data + i)); + } + printf("\n"); +} + +bool +pin_process(pid_t pid, int cpu, bool assert) +{ + cpu_set_t cpuset; + int ret; + + CPU_ZERO(&cpuset); + CPU_SET(cpu, &cpuset); + ret = sched_setaffinity(pid, sizeof(cpu_set_t), &cpuset); + if (ret == -1) { + if (assert) err(1, "sched_setaffinity"); + return false; + } + + return true; +} + +int +read_stat_core(pid_t pid) +{ + char path[256]; + char line[2048]; + FILE *file; + char *p; + int i, cpu; + + snprintf(path, sizeof(path), "/proc/%u/stat", pid); + file = fopen(path, "r"); + if (!file) return -1; + + if (!fgets(line, sizeof(line), file)) + err(1, "read stat"); + + p = line; + for (i = 0; i < 38 && (p = strchr(p, ' ')); i++) + p += 1; + + if (!p) errx(1, "stat format"); + cpu = atoi(p); + + fclose(file); + + return cpu; +} + +void +print_counts(uint8_t *counts) +{ + int i; + + for (i = 0; i < 64; i++) { + if (i % 16 == 0 && i) + printf("\n"); + if (counts[i] == 1) + printf("\x1b[38;5;88m"); + else if (counts[i] > 1) + printf("\x1b[38;5;196m"); + printf("%2i ", i); + if (counts[i] > 0) + printf("\x1b[0m"); + } + printf("\n"); +} + +void +print_counts_raw(uint8_t *counts) +{ + int i; + + for (i = 0; i < 64; i++) { + if (i % 16 == 0 && i) + printf("\n"); + if (counts[i] == 1) + printf("\x1b[38;5;88m"); + else if (counts[i] > 1) + printf("\x1b[38;5;196m"); + printf("%02X ", (uint8_t) counts[i]); + if (counts[i] > 0) + printf("\x1b[0m"); + } + printf("\n"); +} |
