mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 19:43:40 +02:00
selftests/damon/access_memory: add repeat mode
'access_memory' is an artificial memory access generator program that is used for a few DAMON selftests. It accesses a given number of regions one by one only once, and exits. Depending on systems, the test workload may exit faster than expected, making the tests unreliable. For reliable control of the artificial memory access pattern, add a mode to make it repeat running. Link: https://lkml.kernel.org/r/20260117020731.226785-4-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
891d206e27
commit
514d1bcb58
|
|
@ -8,6 +8,11 @@
|
|||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
enum access_mode {
|
||||
ACCESS_MODE_ONCE,
|
||||
ACCESS_MODE_REPEAT,
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char **regions;
|
||||
|
|
@ -15,10 +20,12 @@ int main(int argc, char *argv[])
|
|||
int nr_regions;
|
||||
int sz_region;
|
||||
int access_time_ms;
|
||||
enum access_mode mode = ACCESS_MODE_ONCE;
|
||||
|
||||
int i;
|
||||
|
||||
if (argc != 4) {
|
||||
printf("Usage: %s <number> <size (bytes)> <time (ms)>\n",
|
||||
if (argc < 4) {
|
||||
printf("Usage: %s <number> <size (bytes)> <time (ms)> [mode]\n",
|
||||
argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -27,15 +34,21 @@ int main(int argc, char *argv[])
|
|||
sz_region = atoi(argv[2]);
|
||||
access_time_ms = atoi(argv[3]);
|
||||
|
||||
if (argc > 4 && !strcmp(argv[4], "repeat"))
|
||||
mode = ACCESS_MODE_REPEAT;
|
||||
|
||||
regions = malloc(sizeof(*regions) * nr_regions);
|
||||
for (i = 0; i < nr_regions; i++)
|
||||
regions[i] = malloc(sz_region);
|
||||
|
||||
for (i = 0; i < nr_regions; i++) {
|
||||
start_clock = clock();
|
||||
while ((clock() - start_clock) * 1000 / CLOCKS_PER_SEC <
|
||||
access_time_ms)
|
||||
memset(regions[i], i, sz_region);
|
||||
}
|
||||
do {
|
||||
for (i = 0; i < nr_regions; i++) {
|
||||
start_clock = clock();
|
||||
while ((clock() - start_clock) * 1000 / CLOCKS_PER_SEC
|
||||
< access_time_ms)
|
||||
memset(regions[i], i, sz_region);
|
||||
}
|
||||
} while (mode == ACCESS_MODE_REPEAT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user