All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation.
@ 2021-01-25 12:39 Hongwei Qin
  2021-01-25 12:39 ` [PATCH v6 1/3] Add a new parameter Hongwei Qin
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Hongwei Qin @ 2021-01-25 12:39 UTC (permalink / raw)
  To: fio; +Cc: axboe, sitsofe, Hongwei Qin

v4 -> v6:
	Use lower case thinktime_blocks in help.
	Modify fio.1 accordingly.

v3 -> v4:
	Use uint32_t for thinktime_blocks_type.
	The tests in patch1 has been re-verified.

v3:
	The first patch adds a new parameter thinktime_blocks_type
	to control the behavior of thinktime_blocks.
	It can be either `complete` or `issue`.
	If it is `complete` (default), fio triggers thinktime when
	thinktime_blocks number of blocks are **completed**.
	If it is `issue`, fio triggers thinktime when thinktime_blocks
	number of blocks are **issued**

	The second patch updates the compare time if handle_thinktime
	sleeps or spin.

Hongwei Qin (3):
  Add a new parameter.
  Calculate min_rate with the consideration of thinktime
  Fix fio.1

 HOWTO            |  7 +++++++
 backend.c        | 22 ++++++++++++++++------
 cconv.c          |  2 ++
 engines/cpu.c    |  1 +
 fio.1            |  6 ++++++
 fio.h            |  5 +++++
 options.c        | 22 ++++++++++++++++++++++
 thread_options.h |  5 +++++
 8 files changed, 64 insertions(+), 6 deletions(-)

-- 
1.8.3.1



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v6 1/3] Add a new parameter.
  2021-01-25 12:39 [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation Hongwei Qin
@ 2021-01-25 12:39 ` Hongwei Qin
  2021-01-25 12:40 ` [PATCH v6 2/3] Calculate min_rate with the consideration of thinktime Hongwei Qin
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Hongwei Qin @ 2021-01-25 12:39 UTC (permalink / raw)
  To: fio; +Cc: axboe, sitsofe, Hongwei Qin

This patch adds a new parameter thinktime_blocks_type to control
the behavior of thinktime_blocks. It can be either `complete`
or `issue`.
If it is `complete` (default), fio triggers thinktime when
thinktime_blocks number of blocks are **completed**.
If it is `issue`, fio triggers thinktime when thinktime_blocks
number of blocks are **issued**

Tests:
jobfile1:
```
[global]
thread
kb_base=1000
direct=1
size=1GiB
group_reporting
io_size=96KiB
ioengine=libaio
iodepth=8
bs=4096
filename=/dev/qblkdev
rw=randwrite

[fio_randwrite]
thinktime=2s
thinktime_blocks=4
```

jobfile2:
```
[global]
thread
kb_base=1000
direct=1
size=1GiB
group_reporting
io_size=96KiB
ioengine=libaio
iodepth=8
bs=4096
filename=/dev/qblkdev
rw=randwrite

[fio_randwrite]
thinktime=2s
thinktime_blocks=4
thinktime_blocks_type=issue
```

Results:
Current HEAD:
fio jobfile1:
	write: IOPS=5, BW=24.6kB/s (24.0KiB/s)(98.3kB/4002msec); 0 zone resets
blktrace:
	11 reqs -- 2s -- 8 reqs -- 2s -- 5 reqs -- end

This patch:
fio jobfile1:
	write: IOPS=5, BW=24.6kB/s (24.0KiB/s)(98.3kB/4001msec); 0 zone resets
blktrace:
	11 reqs -- 2s -- 8 reqs -- 2s -- 5 reqs -- end

fio jobfile2:
	write: IOPS=1, BW=8190B/s (8190B/s)(98.3kB/12002msec); 0 zone resets
blktrace:
	4 reqs -- 2s -- 4 reqs ... -- 4 reqs -- 2s -- end

Server:
fio --server=192.168.1.172,8765
Client (On the same machine):
fio --client=192.168.1.172,8765 jobfile1
	write: IOPS=5, BW=24.6kB/s (24.0KiB/s)(98.3kB/4001msec); 0 zone resets
blktrace:
	11 reqs -- 2s -- 8 reqs -- 2s -- 5 reqs -- end

fio --client=192.168.1.172,8765 jobfile2
	write: IOPS=1, BW=8191B/s (8191B/s)(98.3kB/12001msec); 0 zone resets
blktrace:
	4 reqs -- 2s -- 4 reqs ... -- 4 reqs -- 2s -- end

Signed-off-by: Hongwei Qin <glqinhongwei@gmail.com>
---
 HOWTO            |  7 +++++++
 backend.c        | 16 +++++++++++-----
 cconv.c          |  2 ++
 engines/cpu.c    |  1 +
 fio.1            |  6 ++++++
 fio.h            |  5 +++++
 options.c        | 22 ++++++++++++++++++++++
 thread_options.h |  5 +++++
 8 files changed, 59 insertions(+), 5 deletions(-)

diff --git a/HOWTO b/HOWTO
index 372f268..e178bdf 100644
--- a/HOWTO
+++ b/HOWTO
@@ -2562,6 +2562,13 @@ I/O rate
 	before we have to complete it and do our :option:`thinktime`. In other words, this
 	setting effectively caps the queue depth if the latter is larger.
 
+.. option:: thinktime_blocks_type=str
+
+	Only valid if :option:`thinktime` is set - control how :option:`thinktime_blocks`
+	triggers. The default is `complete`, which triggers thinktime when fio completes
+	:option:`thinktime_blocks` blocks. If this is set to `issue`, then the trigger happens
+	at the issue side.
+
 .. option:: rate=int[,int][,int]
 
 	Cap the bandwidth used by this job. The number is in bytes/sec, the normal
diff --git a/backend.c b/backend.c
index e20a2e0..874e193 100644
--- a/backend.c
+++ b/backend.c
@@ -864,8 +864,8 @@ static void handle_thinktime(struct thread_data *td, enum fio_ddir ddir)
 	uint64_t total;
 	int left;
 
-	b = ddir_rw_sum(td->io_blocks);
-	if (b % td->o.thinktime_blocks)
+	b = ddir_rw_sum(td->thinktime_blocks_counter);
+	if (b % td->o.thinktime_blocks || !b)
 		return;
 
 	io_u_quiesce(td);
@@ -1076,6 +1076,10 @@ reap:
 		}
 		if (ret < 0)
 			break;
+
+		if (ddir_rw(ddir) && td->o.thinktime)
+			handle_thinktime(td, ddir);
+
 		if (!ddir_rw_sum(td->bytes_done) &&
 		    !td_ioengine_flagged(td, FIO_NOIO))
 			continue;
@@ -1090,9 +1094,6 @@ reap:
 		}
 		if (!in_ramp_time(td) && td->o.latency_target)
 			lat_target_check(td);
-
-		if (ddir_rw(ddir) && td->o.thinktime)
-			handle_thinktime(td, ddir);
 	}
 
 	check_update_rusage(td);
@@ -1744,6 +1745,11 @@ static void *thread_main(void *data)
 	if (rate_submit_init(td, sk_out))
 		goto err;
 
+	if (td->o.thinktime_blocks_type == THINKTIME_BLOCKS_TYPE_COMPLETE)
+		td->thinktime_blocks_counter = td->io_blocks;
+	else
+		td->thinktime_blocks_counter = td->io_issues;
+
 	set_epoch_time(td, o->log_unix_epoch);
 	fio_getrusage(&td->ru_start);
 	memcpy(&td->bw_sample_time, &td->epoch, sizeof(td->epoch));
diff --git a/cconv.c b/cconv.c
index 62c2fc2..b10868f 100644
--- a/cconv.c
+++ b/cconv.c
@@ -210,6 +210,7 @@ void convert_thread_options_to_cpu(struct thread_options *o,
 	o->thinktime = le32_to_cpu(top->thinktime);
 	o->thinktime_spin = le32_to_cpu(top->thinktime_spin);
 	o->thinktime_blocks = le32_to_cpu(top->thinktime_blocks);
+	o->thinktime_blocks_type = le32_to_cpu(top->thinktime_blocks_type);
 	o->fsync_blocks = le32_to_cpu(top->fsync_blocks);
 	o->fdatasync_blocks = le32_to_cpu(top->fdatasync_blocks);
 	o->barrier_blocks = le32_to_cpu(top->barrier_blocks);
@@ -431,6 +432,7 @@ void convert_thread_options_to_net(struct thread_options_pack *top,
 	top->thinktime = cpu_to_le32(o->thinktime);
 	top->thinktime_spin = cpu_to_le32(o->thinktime_spin);
 	top->thinktime_blocks = cpu_to_le32(o->thinktime_blocks);
+	top->thinktime_blocks_type = __cpu_to_le32(o->thinktime_blocks_type);
 	top->fsync_blocks = cpu_to_le32(o->fsync_blocks);
 	top->fdatasync_blocks = cpu_to_le32(o->fdatasync_blocks);
 	top->barrier_blocks = cpu_to_le32(o->barrier_blocks);
diff --git a/engines/cpu.c b/engines/cpu.c
index ccbfe00..ce74dbc 100644
--- a/engines/cpu.c
+++ b/engines/cpu.c
@@ -268,6 +268,7 @@ static int fio_cpuio_init(struct thread_data *td)
 	 * set thinktime_sleep and thinktime_spin appropriately
 	 */
 	o->thinktime_blocks = 1;
+	o->thinktime_blocks_type = THINKTIME_BLOCKS_TYPE_COMPLETE;
 	o->thinktime_spin = 0;
 	o->thinktime = ((unsigned long long) co->cpucycle *
 				(100 - co->cpuload)) / co->cpuload;
diff --git a/fio.1 b/fio.1
index d477b50..5d08e81 100644
--- a/fio.1
+++ b/fio.1
@@ -2313,6 +2313,12 @@ queue depth setting redundant, since no more than 1 I/O will be queued
 before we have to complete it and do our \fBthinktime\fR. In other words, this
 setting effectively caps the queue depth if the latter is larger.
 .TP
+.BI thinktime_blocks_type \fR=\fPstr
+Only valid if \fBthinktime\fR is set - control how \fBthinktime_blocks triggers.
+The default is `complete`, which triggers thinktime when fio completes
+\fBthinktime_blocks blocks. If this is set to `issue`, then the trigger happens
+at the issue side.
+.TP
 .BI rate \fR=\fPint[,int][,int]
 Cap the bandwidth used by this job. The number is in bytes/sec, the normal
 suffix rules apply. Comma-separated values may be specified for reads,
diff --git a/fio.h b/fio.h
index ee582a7..ae6ac76 100644
--- a/fio.h
+++ b/fio.h
@@ -149,6 +149,9 @@ enum {
 
 	RATE_PROCESS_LINEAR = 0,
 	RATE_PROCESS_POISSON = 1,
+
+	THINKTIME_BLOCKS_TYPE_COMPLETE = 0,
+	THINKTIME_BLOCKS_TYPE_ISSUE = 1,
 };
 
 enum {
@@ -355,6 +358,8 @@ struct thread_data {
 	struct fio_sem *sem;
 	uint64_t bytes_done[DDIR_RWDIR_CNT];
 
+	uint64_t *thinktime_blocks_counter;
+
 	/*
 	 * State for random io, a bitmap of blocks done vs not done
 	 */
diff --git a/options.c b/options.c
index 955bf95..e62e0cf 100644
--- a/options.c
+++ b/options.c
@@ -3609,6 +3609,28 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
 		.group	= FIO_OPT_G_THINKTIME,
 	},
 	{
+		.name	= "thinktime_blocks_type",
+		.lname	= "Thinktime blocks type",
+		.type	= FIO_OPT_STR,
+		.off1	= offsetof(struct thread_options, thinktime_blocks_type),
+		.help	= "How thinktime_blocks takes effect",
+		.def	= "complete",
+		.category = FIO_OPT_C_IO,
+		.group	= FIO_OPT_G_THINKTIME,
+		.posval = {
+			  { .ival = "complete",
+			    .oval = THINKTIME_BLOCKS_TYPE_COMPLETE,
+			    .help = "thinktime_blocks takes effect at the completion side",
+			  },
+			  {
+			    .ival = "issue",
+			    .oval = THINKTIME_BLOCKS_TYPE_ISSUE,
+			    .help = "thinktime_blocks takes effect at the issue side",
+			  },
+		},
+		.parent = "thinktime",
+	},
+	{
 		.name	= "rate",
 		.lname	= "I/O rate",
 		.type	= FIO_OPT_ULL,
diff --git a/thread_options.h b/thread_options.h
index 0a03343..f6b1540 100644
--- a/thread_options.h
+++ b/thread_options.h
@@ -177,6 +177,7 @@ struct thread_options {
 	unsigned int thinktime;
 	unsigned int thinktime_spin;
 	unsigned int thinktime_blocks;
+	unsigned int thinktime_blocks_type;
 	unsigned int fsync_blocks;
 	unsigned int fdatasync_blocks;
 	unsigned int barrier_blocks;
@@ -479,6 +480,7 @@ struct thread_options_pack {
 	uint32_t thinktime;
 	uint32_t thinktime_spin;
 	uint32_t thinktime_blocks;
+	uint32_t thinktime_blocks_type;
 	uint32_t fsync_blocks;
 	uint32_t fdatasync_blocks;
 	uint32_t barrier_blocks;
@@ -506,6 +508,9 @@ struct thread_options_pack {
 	uint32_t stonewall;
 	uint32_t new_group;
 	uint32_t numjobs;
+
+	uint8_t pad3[4];
+
 	/*
 	 * We currently can't convert these, so don't enable them
 	 */
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v6 2/3] Calculate min_rate with the consideration of thinktime
  2021-01-25 12:39 [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation Hongwei Qin
  2021-01-25 12:39 ` [PATCH v6 1/3] Add a new parameter Hongwei Qin
@ 2021-01-25 12:40 ` Hongwei Qin
  2021-01-25 12:40 ` [PATCH v6 3/3] Fix fio.1 Hongwei Qin
  2021-01-26 15:59 ` [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation Jens Axboe
  3 siblings, 0 replies; 7+ messages in thread
From: Hongwei Qin @ 2021-01-25 12:40 UTC (permalink / raw)
  To: fio; +Cc: axboe, sitsofe, Hongwei Qin

This patch updates the compare time if handle_thinktime
sleeps or spin.

Signed-off-by: Hongwei Qin <glqinhongwei@gmail.com>
---
 backend.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/backend.c b/backend.c
index 874e193..f2efddd 100644
--- a/backend.c
+++ b/backend.c
@@ -858,7 +858,8 @@ static long long usec_for_io(struct thread_data *td, enum fio_ddir ddir)
 	return 0;
 }
 
-static void handle_thinktime(struct thread_data *td, enum fio_ddir ddir)
+static void handle_thinktime(struct thread_data *td, enum fio_ddir ddir,
+			     struct timespec *time)
 {
 	unsigned long long b;
 	uint64_t total;
@@ -898,6 +899,9 @@ static void handle_thinktime(struct thread_data *td, enum fio_ddir ddir)
 		/* adjust for rate_process=poisson */
 		td->last_usec[ddir] += total;
 	}
+
+	if (time && should_check_rate(td))
+		fio_gettime(time, NULL);
 }
 
 /*
@@ -1078,7 +1082,7 @@ reap:
 			break;
 
 		if (ddir_rw(ddir) && td->o.thinktime)
-			handle_thinktime(td, ddir);
+			handle_thinktime(td, ddir, &comp_time);
 
 		if (!ddir_rw_sum(td->bytes_done) &&
 		    !td_ioengine_flagged(td, FIO_NOIO))
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v6 3/3] Fix fio.1
  2021-01-25 12:39 [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation Hongwei Qin
  2021-01-25 12:39 ` [PATCH v6 1/3] Add a new parameter Hongwei Qin
  2021-01-25 12:40 ` [PATCH v6 2/3] Calculate min_rate with the consideration of thinktime Hongwei Qin
@ 2021-01-25 12:40 ` Hongwei Qin
  2021-01-26  7:49   ` Sitsofe Wheeler
  2021-01-26 15:59 ` [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation Jens Axboe
  3 siblings, 1 reply; 7+ messages in thread
From: Hongwei Qin @ 2021-01-25 12:40 UTC (permalink / raw)
  To: fio; +Cc: axboe, sitsofe, Hongwei Qin

Fix the manual format.

Signed-off-by: Hongwei Qin <glqinhongwei@gmail.com>
---
 fio.1 | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fio.1 b/fio.1
index 5d08e81..bf5d2b5 100644
--- a/fio.1
+++ b/fio.1
@@ -2314,9 +2314,9 @@ before we have to complete it and do our \fBthinktime\fR. In other words, this
 setting effectively caps the queue depth if the latter is larger.
 .TP
 .BI thinktime_blocks_type \fR=\fPstr
-Only valid if \fBthinktime\fR is set - control how \fBthinktime_blocks triggers.
-The default is `complete`, which triggers thinktime when fio completes
-\fBthinktime_blocks blocks. If this is set to `issue`, then the trigger happens
+Only valid if \fBthinktime\fR is set - control how \fBthinktime_blocks\fR triggers.
+The default is `complete', which triggers \fBthinktime\fR when fio completes
+\fBthinktime_blocks\fR blocks. If this is set to `issue', then the trigger happens
 at the issue side.
 .TP
 .BI rate \fR=\fPint[,int][,int]
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 3/3] Fix fio.1
  2021-01-25 12:40 ` [PATCH v6 3/3] Fix fio.1 Hongwei Qin
@ 2021-01-26  7:49   ` Sitsofe Wheeler
  2021-01-26 15:42     ` Hongwei Qin
  0 siblings, 1 reply; 7+ messages in thread
From: Sitsofe Wheeler @ 2021-01-26  7:49 UTC (permalink / raw)
  To: Jens Axboe, Hongwei Qin; +Cc: fio

On Mon, 25 Jan 2021 at 12:40, Hongwei Qin <glqinhongwei@gmail.com> wrote:
>
> Fix the manual format.
>
> Signed-off-by: Hongwei Qin <glqinhongwei@gmail.com>
> ---
>  fio.1 | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/fio.1 b/fio.1
> index 5d08e81..bf5d2b5 100644
> --- a/fio.1
> +++ b/fio.1
> @@ -2314,9 +2314,9 @@ before we have to complete it and do our \fBthinktime\fR. In other words, this
>  setting effectively caps the queue depth if the latter is larger.
>  .TP
>  .BI thinktime_blocks_type \fR=\fPstr
> -Only valid if \fBthinktime\fR is set - control how \fBthinktime_blocks triggers.
> -The default is `complete`, which triggers thinktime when fio completes
> -\fBthinktime_blocks blocks. If this is set to `issue`, then the trigger happens
> +Only valid if \fBthinktime\fR is set - control how \fBthinktime_blocks\fR triggers.
> +The default is `complete', which triggers \fBthinktime\fR when fio completes
> +\fBthinktime_blocks\fR blocks. If this is set to `issue', then the trigger happens
>  at the issue side.
>  .TP
>  .BI rate \fR=\fPint[,int][,int]
> --
> 1.8.3.1
>

Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>

LGTM - Jens can you pull this set?

Hongwei: In general it's preferable to squash/rebase changes like this
last manual fix into the original commit but you've patiently revised
these patches multiple timesso I don't think it's worth changing again
unless something else comes up :-)

--
Sitsofe


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 3/3] Fix fio.1
  2021-01-26  7:49   ` Sitsofe Wheeler
@ 2021-01-26 15:42     ` Hongwei Qin
  0 siblings, 0 replies; 7+ messages in thread
From: Hongwei Qin @ 2021-01-26 15:42 UTC (permalink / raw)
  To: Sitsofe Wheeler; +Cc: Jens Axboe, fio

Hi Sitsofe,
Thank you for your introduction and review. I'll follow in future
submissions :-)

Best,
Hongwei

On Tue, Jan 26, 2021 at 3:50 PM Sitsofe Wheeler <sitsofe@gmail.com> wrote:
>
> On Mon, 25 Jan 2021 at 12:40, Hongwei Qin <glqinhongwei@gmail.com> wrote:
> >
> > Fix the manual format.
> >
> > Signed-off-by: Hongwei Qin <glqinhongwei@gmail.com>
> > ---
> >  fio.1 | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/fio.1 b/fio.1
> > index 5d08e81..bf5d2b5 100644
> > --- a/fio.1
> > +++ b/fio.1
> > @@ -2314,9 +2314,9 @@ before we have to complete it and do our \fBthinktime\fR. In other words, this
> >  setting effectively caps the queue depth if the latter is larger.
> >  .TP
> >  .BI thinktime_blocks_type \fR=\fPstr
> > -Only valid if \fBthinktime\fR is set - control how \fBthinktime_blocks triggers.
> > -The default is `complete`, which triggers thinktime when fio completes
> > -\fBthinktime_blocks blocks. If this is set to `issue`, then the trigger happens
> > +Only valid if \fBthinktime\fR is set - control how \fBthinktime_blocks\fR triggers.
> > +The default is `complete', which triggers \fBthinktime\fR when fio completes
> > +\fBthinktime_blocks\fR blocks. If this is set to `issue', then the trigger happens
> >  at the issue side.
> >  .TP
> >  .BI rate \fR=\fPint[,int][,int]
> > --
> > 1.8.3.1
> >
>
> Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
>
> LGTM - Jens can you pull this set?
>
> Hongwei: In general it's preferable to squash/rebase changes like this
> last manual fix into the original commit but you've patiently revised
> these patches multiple timesso I don't think it's worth changing again
> unless something else comes up :-)
>
> --
> Sitsofe


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation.
  2021-01-25 12:39 [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation Hongwei Qin
                   ` (2 preceding siblings ...)
  2021-01-25 12:40 ` [PATCH v6 3/3] Fix fio.1 Hongwei Qin
@ 2021-01-26 15:59 ` Jens Axboe
  3 siblings, 0 replies; 7+ messages in thread
From: Jens Axboe @ 2021-01-26 15:59 UTC (permalink / raw)
  To: Hongwei Qin, fio; +Cc: sitsofe

On 1/25/21 5:39 AM, Hongwei Qin wrote:
> v4 -> v6:
> 	Use lower case thinktime_blocks in help.
> 	Modify fio.1 accordingly.
> 
> v3 -> v4:
> 	Use uint32_t for thinktime_blocks_type.
> 	The tests in patch1 has been re-verified.
> 
> v3:
> 	The first patch adds a new parameter thinktime_blocks_type
> 	to control the behavior of thinktime_blocks.
> 	It can be either `complete` or `issue`.
> 	If it is `complete` (default), fio triggers thinktime when
> 	thinktime_blocks number of blocks are **completed**.
> 	If it is `issue`, fio triggers thinktime when thinktime_blocks
> 	number of blocks are **issued**
> 
> 	The second patch updates the compare time if handle_thinktime
> 	sleeps or spin.

Applied, folding patch 3 into patch 1.

-- 
Jens Axboe



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-01-26 15:59 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-25 12:39 [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation Hongwei Qin
2021-01-25 12:39 ` [PATCH v6 1/3] Add a new parameter Hongwei Qin
2021-01-25 12:40 ` [PATCH v6 2/3] Calculate min_rate with the consideration of thinktime Hongwei Qin
2021-01-25 12:40 ` [PATCH v6 3/3] Fix fio.1 Hongwei Qin
2021-01-26  7:49   ` Sitsofe Wheeler
2021-01-26 15:42     ` Hongwei Qin
2021-01-26 15:59 ` [PATCH v6 0/3] Add a new parameter and fix minimal rate calculation Jens Axboe

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.