hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/tools/testing/selftests/intel_pstate/aperf.c
....@@ -10,7 +10,11 @@
1010 #include <sched.h>
1111 #include <errno.h>
1212 #include <string.h>
13
+#include <time.h>
1314 #include "../kselftest.h"
15
+
16
+#define MSEC_PER_SEC 1000L
17
+#define NSEC_PER_MSEC 1000000L
1418
1519 void usage(char *name) {
1620 printf ("Usage: %s cpunum\n", name);
....@@ -22,7 +26,7 @@
2226 long long tsc, old_tsc, new_tsc;
2327 long long aperf, old_aperf, new_aperf;
2428 long long mperf, old_mperf, new_mperf;
25
- struct timeb before, after;
29
+ struct timespec before, after;
2630 long long int start, finish, total;
2731 cpu_set_t cpuset;
2832
....@@ -55,7 +59,10 @@
5559 return 1;
5660 }
5761
58
- ftime(&before);
62
+ if (clock_gettime(CLOCK_MONOTONIC, &before) < 0) {
63
+ perror("clock_gettime");
64
+ return 1;
65
+ }
5966 pread(fd, &old_tsc, sizeof(old_tsc), 0x10);
6067 pread(fd, &old_aperf, sizeof(old_mperf), 0xe7);
6168 pread(fd, &old_mperf, sizeof(old_aperf), 0xe8);
....@@ -64,7 +71,10 @@
6471 sqrt(i);
6572 }
6673
67
- ftime(&after);
74
+ if (clock_gettime(CLOCK_MONOTONIC, &after) < 0) {
75
+ perror("clock_gettime");
76
+ return 1;
77
+ }
6878 pread(fd, &new_tsc, sizeof(new_tsc), 0x10);
6979 pread(fd, &new_aperf, sizeof(new_mperf), 0xe7);
7080 pread(fd, &new_mperf, sizeof(new_aperf), 0xe8);
....@@ -73,11 +83,11 @@
7383 aperf = new_aperf-old_aperf;
7484 mperf = new_mperf-old_mperf;
7585
76
- start = before.time*1000 + before.millitm;
77
- finish = after.time*1000 + after.millitm;
86
+ start = before.tv_sec*MSEC_PER_SEC + before.tv_nsec/NSEC_PER_MSEC;
87
+ finish = after.tv_sec*MSEC_PER_SEC + after.tv_nsec/NSEC_PER_MSEC;
7888 total = finish - start;
7989
80
- printf("runTime: %4.2f\n", 1.0*total/1000);
90
+ printf("runTime: %4.2f\n", 1.0*total/MSEC_PER_SEC);
8191 printf("freq: %7.0f\n", tsc / (1.0*aperf / (1.0 * mperf)) / total);
8292 return 0;
8393 }