struct tv_valid {
struct timeval last_tv;
+ uint64_t last_cycles;
int last_tv_valid;
- unsigned long last_cycles;
};
#ifdef CONFIG_TLS_THREAD
static struct tv_valid __thread static_tv_valid;
#endif
#ifdef ARCH_HAVE_CPU_CLOCK
case CS_CPUCLOCK: {
- unsigned long long usecs, t;
+ uint64_t usecs, t;
t = get_cpu_clock();
if (tv && t < tv->last_cycles) {
static unsigned long get_cycles_per_usec(void)
{
struct timeval s, e;
- unsigned long long c_s, c_e;
+ uint64_t c_s, c_e;
enum fio_cs old_cs = fio_clock_source;
#ifdef CONFIG_CLOCK_GETTIME
c_s = get_cpu_clock();
do {
- unsigned long long elapsed;
+ uint64_t elapsed;
__fio_gettime(&e);
static void calibrate_cpu_clock(void)
{
double delta, mean, S;
- unsigned long avg, cycles[NR_TIME_ITERS];
+ uint64_t avg, cycles[NR_TIME_ITERS];
int i, samples;
cycles[0] = get_cycles_per_usec();
log_err("fio: can't create TLS key\n");
#endif
+ /*
+ * Probably an AMD issue, will need to investigate. Until that
+ * is done, disable the CPU clock.
+ */
+#if FIO_OS == os_solaris
+ tsc_reliable = 0;
+#endif
+
fio_clock_source_inited = fio_clock_source;
calibrate_cpu_clock();
#define CLOCK_ENTRIES 100000
struct clock_entry {
- unsigned long seq;
- unsigned long tsc;
- unsigned long cpu;
+ uint64_t seq;
+ uint64_t tsc;
+ uint64_t cpu;
};
struct clock_thread {
uint64_t seq = 0;
int i;
+ log_info("cs: reliable_tsc: %s\n", tsc_reliable ? "yes" : "no");
+
fio_debug |= 1U << FD_TIME;
calibrate_cpu_clock();
fio_debug &= ~(1U << FD_TIME);