projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
zbd random read conventional zones
[fio.git]
/
time.c
diff --git
a/time.c
b/time.c
index 279ee48492302ebd5a1080e5422cc48ecd6b7a59..1999969955b2828d6a9d38b425147b5ac3b5babf 100644
(file)
--- a/
time.c
+++ b/
time.c
@@
-3,23
+3,23
@@
#include "fio.h"
#include "fio.h"
-static struct time
val
genesis;
+static struct time
spec
genesis;
static unsigned long ns_granularity;
static unsigned long ns_granularity;
-void time
val_add_msec(struct timeval *tv
, unsigned int msec)
+void time
spec_add_msec(struct timespec *ts
, unsigned int msec)
{
{
- u
nsigned long adj_usec = 1000
* msec;
+ u
int64_t adj_nsec = 1000000ULL
* msec;
- t
v->tv_usec += adj_u
sec;
- if (adj_
usec >= 1
000000) {
- u
nsigned long adj_sec = adj_usec / 1
000000;
+ t
s->tv_nsec += adj_n
sec;
+ if (adj_
nsec >= 1000
000000) {
+ u
int64_t adj_sec = adj_nsec / 1000
000000;
- t
v->tv_usec -= adj_sec * 1
000000;
- t
v
->tv_sec += adj_sec;
+ t
s->tv_nsec -= adj_sec * 1000
000000;
+ t
s
->tv_sec += adj_sec;
}
}
- if (t
v->tv_usec >= 1
000000){
- t
v->tv_usec -= 1
000000;
- t
v
->tv_sec++;
+ if (t
s->tv_nsec >= 1000
000000){
+ t
s->tv_nsec -= 1000
000000;
+ t
s
->tv_sec++;
}
}
}
}
@@
-28,7
+28,7
@@
void timeval_add_msec(struct timeval *tv, unsigned int msec)
*/
uint64_t usec_spin(unsigned int usec)
{
*/
uint64_t usec_spin(unsigned int usec)
{
- struct time
val
start;
+ struct time
spec
start;
uint64_t t;
fio_gettime(&start, NULL);
uint64_t t;
fio_gettime(&start, NULL);
@@
-41,7
+41,7
@@
uint64_t usec_spin(unsigned int usec)
uint64_t usec_sleep(struct thread_data *td, unsigned long usec)
{
struct timespec req;
uint64_t usec_sleep(struct thread_data *td, unsigned long usec)
{
struct timespec req;
- struct time
val
tv;
+ struct time
spec
tv;
uint64_t t = 0;
do {
uint64_t t = 0;
do {
@@
-97,31
+97,38
@@
bool in_ramp_time(struct thread_data *td)
return td->o.ramp_time && !td->ramp_time_over;
}
return td->o.ramp_time && !td->ramp_time_over;
}
-static
void
parent_update_ramp(struct thread_data *td)
+static
bool
parent_update_ramp(struct thread_data *td)
{
struct thread_data *parent = td->parent;
if (!parent || parent->ramp_time_over)
{
struct thread_data *parent = td->parent;
if (!parent || parent->ramp_time_over)
- return;
+ return
false
;
reset_all_stats(parent);
reset_all_stats(parent);
- parent->ramp_time_over =
1
;
+ parent->ramp_time_over =
true
;
td_set_runstate(parent, TD_RAMP);
td_set_runstate(parent, TD_RAMP);
+ return true;
}
bool ramp_time_over(struct thread_data *td)
{
}
bool ramp_time_over(struct thread_data *td)
{
- struct timeval tv;
-
if (!td->o.ramp_time || td->ramp_time_over)
return true;
if (!td->o.ramp_time || td->ramp_time_over)
return true;
- fio_gettime(&tv, NULL);
- if (utime_since(&td->epoch, &tv) >= td->o.ramp_time) {
- td->ramp_time_over = 1;
+ if (utime_since_now(&td->epoch) >= td->o.ramp_time) {
+ td->ramp_time_over = true;
reset_all_stats(td);
reset_all_stats(td);
+ reset_io_stats(td);
td_set_runstate(td, TD_RAMP);
td_set_runstate(td, TD_RAMP);
- parent_update_ramp(td);
+
+ /*
+ * If we have a parent, the parent isn't doing IO. Hence
+ * the parent never enters do_io(), which will switch us
+ * from RAMP -> RUNNING. Do this manually here.
+ */
+ if (parent_update_ramp(td))
+ td_set_runstate(td, TD_RUNNING);
+
return true;
}
return true;
}
@@
-138,8
+145,7
@@
void fio_time_init(void)
* Check the granularity of the nanosleep function
*/
for (i = 0; i < 10; i++) {
* Check the granularity of the nanosleep function
*/
for (i = 0; i < 10; i++) {
- struct timeval tv;
- struct timespec ts;
+ struct timespec tv, ts;
unsigned long elapsed;
fio_gettime(&tv, NULL);
unsigned long elapsed;
fio_gettime(&tv, NULL);
@@
-170,7
+176,7
@@
void set_epoch_time(struct thread_data *td, int log_unix_epoch)
}
}
}
}
-void fill_start_time(struct time
val
*t)
+void fill_start_time(struct time
spec
*t)
{
memcpy(t, &genesis, sizeof(genesis));
}
{
memcpy(t, &genesis, sizeof(genesis));
}