* Fix a bug of rbd engine when specify invalidate=1 or fadvise_hint=1
@ 2014-05-19 17:38 xan.peng
2014-05-19 19:35 ` Jens Axboe
0 siblings, 1 reply; 4+ messages in thread
From: xan.peng @ 2014-05-19 17:38 UTC (permalink / raw)
To: Jens Axboe, daniel.gollub, fio@vger.kernel.org
When specify invalidate=1 or fadvise_hint=1, fio will call
posix_fadvise(2), which will return -EBADF and prevent fio librbd
engine acting normally.
Here is the call path: ... > td_io_open_file() >
file_invalidate_cache() > __file_invalidate_cache() > posix_fadvise(fd
= -1) > ...
The patch work-around this problem by setting file type to
FIO_TYPE_CHAR in fio_rbd_open().
Here the GitHub pull request: https://github.com/axboe/fio/pull/11.
Signed-off-by: Xan Peng xanpeng@gmail.com
---
diff --git a/engines/rbd.c b/engines/rbd.c
index dc6e7db..f5f7a06 100644
--- a/engines/rbd.c
+++ b/engines/rbd.c
@@ -401,6 +401,16 @@ cleanup:
static int fio_rbd_open(struct thread_data *td, struct fio_file *f)
{
+ /*
+ * This is to work-around mandatory setting of "invalidate=0".
+ *
+ * As files used in rbd engine is artificial (fd equals -1), with
+ * "invalidte=1" or "fadvise_hint=1" set, fio will call posix_fadvise(2)
+ * and EBADF will be returned.
+ *
+ * Set file type to FIO_TYPE_CHAR will work-around call of
posix_fadvise(2).
+ */
+ f->filetype = FIO_TYPE_CHAR;
return 0;
}
diff --git a/examples/rbd.fio b/examples/rbd.fio
index fcb494a..aa34a99 100644
--- a/examples/rbd.fio
+++ b/examples/rbd.fio
@@ -15,7 +15,8 @@ ioengine=rbd
clientname=admin
pool=rbd
rbdname=fio_test
-invalidate=0 # mandatory
+invalidate=0 # not mandatory, but set to 1 with no effect
+fadvise_hint=0 # not mandatory, but set to 1 with no effect
rw=randwrite
bs=4k
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: Fix a bug of rbd engine when specify invalidate=1 or fadvise_hint=1
2014-05-19 17:38 Fix a bug of rbd engine when specify invalidate=1 or fadvise_hint=1 xan.peng
@ 2014-05-19 19:35 ` Jens Axboe
2014-05-20 1:32 ` xan.peng
0 siblings, 1 reply; 4+ messages in thread
From: Jens Axboe @ 2014-05-19 19:35 UTC (permalink / raw)
To: xan.peng, daniel.gollub, fio@vger.kernel.org
On 2014-05-19 11:38, xan.peng wrote:
> When specify invalidate=1 or fadvise_hint=1, fio will call
> posix_fadvise(2), which will return -EBADF and prevent fio librbd
> engine acting normally.
> Here is the call path: ... > td_io_open_file() >
> file_invalidate_cache() > __file_invalidate_cache() > posix_fadvise(fd
> = -1) > ...
>
> The patch work-around this problem by setting file type to
> FIO_TYPE_CHAR in fio_rbd_open().
Might be better to add a new type for this, like FIO_TYPE_SPECIAL or
something. Otherwise we could risk running into other cases, where fio
then thinks it really is a char device.
--
Jens Axboe
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Fix a bug of rbd engine when specify invalidate=1 or fadvise_hint=1
2014-05-19 19:35 ` Jens Axboe
@ 2014-05-20 1:32 ` xan.peng
2014-05-20 1:59 ` Jens Axboe
0 siblings, 1 reply; 4+ messages in thread
From: xan.peng @ 2014-05-20 1:32 UTC (permalink / raw)
To: Jens Axboe; +Cc: daniel.gollub, fio@vger.kernel.org
Sure, it's better to have a new type.
the pull request (https://github.com/axboe/fio/pull/11) is updated in
the following way:
---
diff --git a/engines/rbd.c b/engines/rbd.c
index f5f7a06..f1d9fd0 100644
--- a/engines/rbd.c
+++ b/engines/rbd.c
@@ -406,11 +406,11 @@ static int fio_rbd_open(struct thread_data *td,
struct fio_file *f)
*
* As files used in rbd engine is artificial (fd equals -1), with
* "invalidte=1" or "fadvise_hint=1" set, fio will call posix_fadvise(2)
- * and EBADF will be returned.
+ * and -EBADF will be returned.
*
- * Set file type to FIO_TYPE_CHAR will work-around call of
posix_fadvise(2).
+ * Set file type to FIO_TYPE_SPECIAL will work-around call of
posix_fadvise(2).
*/
- f->filetype = FIO_TYPE_CHAR;
+ f->filetype = FIO_TYPE_SPECIAL;
return 0;
}
diff --git a/file.h b/file.h
index add7773..9398cb7 100644
--- a/file.h
+++ b/file.h
@@ -17,6 +17,7 @@ enum fio_filetype {
FIO_TYPE_BD, /* block device */
FIO_TYPE_CHAR, /* character device */
FIO_TYPE_PIPE, /* pipe */
+ FIO_TYPE_SPECIAL, /* special file, e.g.,
artificial file */
};
enum fio_file_flags {
diff --git a/filesetup.c b/filesetup.c
index ad7fb85..ceeda47 100644
--- a/filesetup.c
+++ b/filesetup.c
@@ -419,7 +419,8 @@ static int __file_invalidate_cache(struct
thread_data *td, struct fio_file *f,
}
ret = 0;
}
- } else if (f->filetype == FIO_TYPE_CHAR || f->filetype == FIO_TYPE_PIPE)
+ } else if (f->filetype == FIO_TYPE_CHAR || f->filetype == FIO_TYPE_PIPE
+ || f->filetype == FIO_TYPE_SPECIAL)
ret = 0;
/*
On Tue, May 20, 2014 at 3:35 AM, Jens Axboe <axboe@kernel.dk> wrote:
> On 2014-05-19 11:38, xan.peng wrote:
>>
>> When specify invalidate=1 or fadvise_hint=1, fio will call
>> posix_fadvise(2), which will return -EBADF and prevent fio librbd
>> engine acting normally.
>> Here is the call path: ... > td_io_open_file() >
>> file_invalidate_cache() > __file_invalidate_cache() > posix_fadvise(fd
>> = -1) > ...
>>
>> The patch work-around this problem by setting file type to
>> FIO_TYPE_CHAR in fio_rbd_open().
>
>
> Might be better to add a new type for this, like FIO_TYPE_SPECIAL or
> something. Otherwise we could risk running into other cases, where fio then
> thinks it really is a char device.
>
> --
> Jens Axboe
>
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: Fix a bug of rbd engine when specify invalidate=1 or fadvise_hint=1
2014-05-20 1:32 ` xan.peng
@ 2014-05-20 1:59 ` Jens Axboe
0 siblings, 0 replies; 4+ messages in thread
From: Jens Axboe @ 2014-05-20 1:59 UTC (permalink / raw)
To: xan.peng; +Cc: daniel.gollub, fio@vger.kernel.org
On 2014-05-19 19:32, xan.peng wrote:
> Sure, it's better to have a new type.
> the pull request (https://github.com/axboe/fio/pull/11) is updated in
> the following way:
So thinking more about it, I think it would be a lot cleaner to simply
add an ->invalidate() IO ops hook instead. This retains that this is a
file, special sort of loses that. And it mirrors what we do in other
places, like the very open that rbd hooks in as well.
Committed this:
http://git.kernel.dk/?p=fio.git;a=commit;h=d9b100fc117a963334fb71b8b662be90cd456068
--
Jens Axboe
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-05-20 1:59 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-19 17:38 Fix a bug of rbd engine when specify invalidate=1 or fadvise_hint=1 xan.peng
2014-05-19 19:35 ` Jens Axboe
2014-05-20 1:32 ` xan.peng
2014-05-20 1:59 ` Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox