Re: [fuse-devel] [RFC PATCH 0/5] fuse: make maximum read/write request size tunable

2012-07-13 Thread HAYASAKA Mitsuo

Hi Miklos,

Thank you for your comments.

(2012/07/12 19:13), Miklos Szeredi wrote:

HAYASAKA Mitsuo  writes:


Hi Yuan and Han-Wen,

Thank you for your comments.

(2012/07/06 22:58), Han-Wen Nienhuys wrote:

On Fri, Jul 6, 2012 at 2:53 AM, Liu Yuan   wrote:

On 07/05/2012 06:50 PM, Mitsuo Hayasaka wrote:

One of the ways to solve this is to make them tunable.
In this series, the new sysfs parameter max_pages_per_req is introduced.
It limits the maximum read/write size in fuse request and it can be
changed from 32 to 256 pages in current implementations. When the
max_read/max_write mount option is specified, FUSE request size is set
per mount. (The size is rounded-up to page size and limited up to
max_pages_per_req.)


Why maxim 256 pages? If we are here, we can go further: most of object
storage system has object size of multiple to dozens of megabytes. So I
think probably 1M is too small. Our distribution storage system has 4M
per object, so I think at least maxim size could be bigger than 4M.


The maximum pipe size on my system is 1M, so if you go beyond that,
splicing from the FD won't work.

Also, the userspace client must reserve a buffer this size so it can
receive a write, which is a waste since most requests are much
smaller.



I checked the maximum pipe size can be changed using fcntl(2) or
/proc/sys/fs/pipe-max-size. It is clear that it is not a fixed value.

Also, it seems that there is a request for setting the maximum number
of pages per fuse request to 4M (1024 pages). One of the reasons to
introduce the sysfs max_pages_per_req parameter is to set a threshold
of the maximum number of pages dynamically according to the
administrator's demand, and root can only change it.

So, when the maximum value is required to be set to not more than the
pipe-max-size, the max_pages_per_req should be changed considering it.
It seems that the upper limit of this parameter does not have to be
not more than it.

I'm planning to limit max_pages_per_req up to 1024 pages and add the
document to /Documentation/filesystems/fuse.txt, as follows.

"the sysfs max_pages_per_req parameter can be changed from 32 to 1024.
The default is 32 pages. Generally, the pipe-max-size is 1M (256 pages)
and it is better to set it to not more than the pipe-max-size."


Can't we just use pipe-max-size for the limit?


This is great!
I'd like to change this patch to using the pipe-max-size for the upper
limit of the max_pages_per_req sysfs paramter, and resubmit it.



Then we'll use the minimum of pipe-max-size and max_read/max_write for
sizing the requests.

Another comment: do we really need to allocate each and every request
with space for the pages?  I don't think that makes sense.  Let's leave
some small number of pages inline in the request and allocate a separate
array if the number of pages is too large.  There may even be some utilities
in the kernel to handle dynamically sized page arrays (I haven't looked
but I suspect there is).


This is interesting and enables to dramatically reduce the number of page
allocation and free. However, it seems that it is necessary to investigate
if this is feasible.

Thanks,



Thanks,
Miklos



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [fuse-devel] [RFC PATCH 0/5] fuse: make maximum read/write request size tunable

2012-07-13 Thread HAYASAKA Mitsuo

Hi Miklos,

Thank you for your comments.

(2012/07/12 19:13), Miklos Szeredi wrote:

HAYASAKA Mitsuomitsuo.hayasaka...@hitachi.com  writes:


Hi Yuan and Han-Wen,

Thank you for your comments.

(2012/07/06 22:58), Han-Wen Nienhuys wrote:

On Fri, Jul 6, 2012 at 2:53 AM, Liu Yuannamei.u...@gmail.com   wrote:

On 07/05/2012 06:50 PM, Mitsuo Hayasaka wrote:

One of the ways to solve this is to make them tunable.
In this series, the new sysfs parameter max_pages_per_req is introduced.
It limits the maximum read/write size in fuse request and it can be
changed from 32 to 256 pages in current implementations. When the
max_read/max_write mount option is specified, FUSE request size is set
per mount. (The size is rounded-up to page size and limited up to
max_pages_per_req.)


Why maxim 256 pages? If we are here, we can go further: most of object
storage system has object size of multiple to dozens of megabytes. So I
think probably 1M is too small. Our distribution storage system has 4M
per object, so I think at least maxim size could be bigger than 4M.


The maximum pipe size on my system is 1M, so if you go beyond that,
splicing from the FD won't work.

Also, the userspace client must reserve a buffer this size so it can
receive a write, which is a waste since most requests are much
smaller.



I checked the maximum pipe size can be changed using fcntl(2) or
/proc/sys/fs/pipe-max-size. It is clear that it is not a fixed value.

Also, it seems that there is a request for setting the maximum number
of pages per fuse request to 4M (1024 pages). One of the reasons to
introduce the sysfs max_pages_per_req parameter is to set a threshold
of the maximum number of pages dynamically according to the
administrator's demand, and root can only change it.

So, when the maximum value is required to be set to not more than the
pipe-max-size, the max_pages_per_req should be changed considering it.
It seems that the upper limit of this parameter does not have to be
not more than it.

I'm planning to limit max_pages_per_req up to 1024 pages and add the
document to /Documentation/filesystems/fuse.txt, as follows.

the sysfs max_pages_per_req parameter can be changed from 32 to 1024.
The default is 32 pages. Generally, the pipe-max-size is 1M (256 pages)
and it is better to set it to not more than the pipe-max-size.


Can't we just use pipe-max-size for the limit?


This is great!
I'd like to change this patch to using the pipe-max-size for the upper
limit of the max_pages_per_req sysfs paramter, and resubmit it.



Then we'll use the minimum of pipe-max-size and max_read/max_write for
sizing the requests.

Another comment: do we really need to allocate each and every request
with space for the pages?  I don't think that makes sense.  Let's leave
some small number of pages inline in the request and allocate a separate
array if the number of pages is too large.  There may even be some utilities
in the kernel to handle dynamically sized page arrays (I haven't looked
but I suspect there is).


This is interesting and enables to dramatically reduce the number of page
allocation and free. However, it seems that it is necessary to investigate
if this is feasible.

Thanks,



Thanks,
Miklos



--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [fuse-devel] [RFC PATCH 0/5] fuse: make maximum read/write request size tunable

2012-07-12 Thread Miklos Szeredi
HAYASAKA Mitsuo  writes:

> Hi Yuan and Han-Wen,
>
> Thank you for your comments.
>
> (2012/07/06 22:58), Han-Wen Nienhuys wrote:
>> On Fri, Jul 6, 2012 at 2:53 AM, Liu Yuan  wrote:
>>> On 07/05/2012 06:50 PM, Mitsuo Hayasaka wrote:
 One of the ways to solve this is to make them tunable.
 In this series, the new sysfs parameter max_pages_per_req is introduced.
 It limits the maximum read/write size in fuse request and it can be
 changed from 32 to 256 pages in current implementations. When the
 max_read/max_write mount option is specified, FUSE request size is set
 per mount. (The size is rounded-up to page size and limited up to
 max_pages_per_req.)
>>>
>>> Why maxim 256 pages? If we are here, we can go further: most of object
>>> storage system has object size of multiple to dozens of megabytes. So I
>>> think probably 1M is too small. Our distribution storage system has 4M
>>> per object, so I think at least maxim size could be bigger than 4M.
>>
>> The maximum pipe size on my system is 1M, so if you go beyond that,
>> splicing from the FD won't work.
>>
>> Also, the userspace client must reserve a buffer this size so it can
>> receive a write, which is a waste since most requests are much
>> smaller.
>>
>
> I checked the maximum pipe size can be changed using fcntl(2) or
> /proc/sys/fs/pipe-max-size. It is clear that it is not a fixed value.
>
> Also, it seems that there is a request for setting the maximum number
> of pages per fuse request to 4M (1024 pages). One of the reasons to
> introduce the sysfs max_pages_per_req parameter is to set a threshold
> of the maximum number of pages dynamically according to the
> administrator's demand, and root can only change it.
>
> So, when the maximum value is required to be set to not more than the
> pipe-max-size, the max_pages_per_req should be changed considering it.
> It seems that the upper limit of this parameter does not have to be
> not more than it.
>
> I'm planning to limit max_pages_per_req up to 1024 pages and add the
> document to /Documentation/filesystems/fuse.txt, as follows.
>
> "the sysfs max_pages_per_req parameter can be changed from 32 to 1024.
> The default is 32 pages. Generally, the pipe-max-size is 1M (256 pages)
> and it is better to set it to not more than the pipe-max-size."

Can't we just use pipe-max-size for the limit?

Then we'll use the minimum of pipe-max-size and max_read/max_write for
sizing the requests.

Another comment: do we really need to allocate each and every request
with space for the pages?  I don't think that makes sense.  Let's leave
some small number of pages inline in the request and allocate a separate
array if the number of pages is too large.  There may even be some utilities
in the kernel to handle dynamically sized page arrays (I haven't looked
but I suspect there is).

Thanks,
Miklos
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [fuse-devel] [RFC PATCH 0/5] fuse: make maximum read/write request size tunable

2012-07-12 Thread Liu Yuan
On 07/12/2012 01:58 PM, HAYASAKA Mitsuo wrote:
> Hi Yuan and Han-Wen,
> 
> Thank you for your comments.
> 
> (2012/07/06 22:58), Han-Wen Nienhuys wrote:
>> On Fri, Jul 6, 2012 at 2:53 AM, Liu Yuan  wrote:
>>> On 07/05/2012 06:50 PM, Mitsuo Hayasaka wrote:
 One of the ways to solve this is to make them tunable.
 In this series, the new sysfs parameter max_pages_per_req is
 introduced.
 It limits the maximum read/write size in fuse request and it can be
 changed from 32 to 256 pages in current implementations. When the
 max_read/max_write mount option is specified, FUSE request size is set
 per mount. (The size is rounded-up to page size and limited up to
 max_pages_per_req.)
>>>
>>> Why maxim 256 pages? If we are here, we can go further: most of object
>>> storage system has object size of multiple to dozens of megabytes. So I
>>> think probably 1M is too small. Our distribution storage system has 4M
>>> per object, so I think at least maxim size could be bigger than 4M.
>>
>> The maximum pipe size on my system is 1M, so if you go beyond that,
>> splicing from the FD won't work.
>>
>> Also, the userspace client must reserve a buffer this size so it can
>> receive a write, which is a waste since most requests are much
>> smaller.
>>
> 
> I checked the maximum pipe size can be changed using fcntl(2) or
> /proc/sys/fs/pipe-max-size. It is clear that it is not a fixed value.
> 
> Also, it seems that there is a request for setting the maximum number
> of pages per fuse request to 4M (1024 pages). One of the reasons to
> introduce the sysfs max_pages_per_req parameter is to set a threshold
> of the maximum number of pages dynamically according to the
> administrator's demand, and root can only change it.
> 
> So, when the maximum value is required to be set to not more than the
> pipe-max-size, the max_pages_per_req should be changed considering it.
> It seems that the upper limit of this parameter does not have to be
> not more than it.
> 
> I'm planning to limit max_pages_per_req up to 1024 pages and add the
> document to /Documentation/filesystems/fuse.txt, as follows.
> 
> "the sysfs max_pages_per_req parameter can be changed from 32 to 1024.
> The default is 32 pages. Generally, the pipe-max-size is 1M (256 pages)
> and it is better to set it to not more than the pipe-max-size."
> 
> This is just a plan and any comments are appreciated.

This looks reasonable to me, we should try our best to maximize the
upper ceiling to deal with various of kinds of demands.

Thanks for your work, Mitsuo, as a user of FUSE, I'd vote +1 for your
patch set.

Thanks,
Yuan
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [fuse-devel] [RFC PATCH 0/5] fuse: make maximum read/write request size tunable

2012-07-12 Thread Liu Yuan
On 07/12/2012 01:58 PM, HAYASAKA Mitsuo wrote:
 Hi Yuan and Han-Wen,
 
 Thank you for your comments.
 
 (2012/07/06 22:58), Han-Wen Nienhuys wrote:
 On Fri, Jul 6, 2012 at 2:53 AM, Liu Yuannamei.u...@gmail.com  wrote:
 On 07/05/2012 06:50 PM, Mitsuo Hayasaka wrote:
 One of the ways to solve this is to make them tunable.
 In this series, the new sysfs parameter max_pages_per_req is
 introduced.
 It limits the maximum read/write size in fuse request and it can be
 changed from 32 to 256 pages in current implementations. When the
 max_read/max_write mount option is specified, FUSE request size is set
 per mount. (The size is rounded-up to page size and limited up to
 max_pages_per_req.)

 Why maxim 256 pages? If we are here, we can go further: most of object
 storage system has object size of multiple to dozens of megabytes. So I
 think probably 1M is too small. Our distribution storage system has 4M
 per object, so I think at least maxim size could be bigger than 4M.

 The maximum pipe size on my system is 1M, so if you go beyond that,
 splicing from the FD won't work.

 Also, the userspace client must reserve a buffer this size so it can
 receive a write, which is a waste since most requests are much
 smaller.

 
 I checked the maximum pipe size can be changed using fcntl(2) or
 /proc/sys/fs/pipe-max-size. It is clear that it is not a fixed value.
 
 Also, it seems that there is a request for setting the maximum number
 of pages per fuse request to 4M (1024 pages). One of the reasons to
 introduce the sysfs max_pages_per_req parameter is to set a threshold
 of the maximum number of pages dynamically according to the
 administrator's demand, and root can only change it.
 
 So, when the maximum value is required to be set to not more than the
 pipe-max-size, the max_pages_per_req should be changed considering it.
 It seems that the upper limit of this parameter does not have to be
 not more than it.
 
 I'm planning to limit max_pages_per_req up to 1024 pages and add the
 document to /Documentation/filesystems/fuse.txt, as follows.
 
 the sysfs max_pages_per_req parameter can be changed from 32 to 1024.
 The default is 32 pages. Generally, the pipe-max-size is 1M (256 pages)
 and it is better to set it to not more than the pipe-max-size.
 
 This is just a plan and any comments are appreciated.

This looks reasonable to me, we should try our best to maximize the
upper ceiling to deal with various of kinds of demands.

Thanks for your work, Mitsuo, as a user of FUSE, I'd vote +1 for your
patch set.

Thanks,
Yuan
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [fuse-devel] [RFC PATCH 0/5] fuse: make maximum read/write request size tunable

2012-07-12 Thread Miklos Szeredi
HAYASAKA Mitsuo mitsuo.hayasaka...@hitachi.com writes:

 Hi Yuan and Han-Wen,

 Thank you for your comments.

 (2012/07/06 22:58), Han-Wen Nienhuys wrote:
 On Fri, Jul 6, 2012 at 2:53 AM, Liu Yuannamei.u...@gmail.com  wrote:
 On 07/05/2012 06:50 PM, Mitsuo Hayasaka wrote:
 One of the ways to solve this is to make them tunable.
 In this series, the new sysfs parameter max_pages_per_req is introduced.
 It limits the maximum read/write size in fuse request and it can be
 changed from 32 to 256 pages in current implementations. When the
 max_read/max_write mount option is specified, FUSE request size is set
 per mount. (The size is rounded-up to page size and limited up to
 max_pages_per_req.)

 Why maxim 256 pages? If we are here, we can go further: most of object
 storage system has object size of multiple to dozens of megabytes. So I
 think probably 1M is too small. Our distribution storage system has 4M
 per object, so I think at least maxim size could be bigger than 4M.

 The maximum pipe size on my system is 1M, so if you go beyond that,
 splicing from the FD won't work.

 Also, the userspace client must reserve a buffer this size so it can
 receive a write, which is a waste since most requests are much
 smaller.


 I checked the maximum pipe size can be changed using fcntl(2) or
 /proc/sys/fs/pipe-max-size. It is clear that it is not a fixed value.

 Also, it seems that there is a request for setting the maximum number
 of pages per fuse request to 4M (1024 pages). One of the reasons to
 introduce the sysfs max_pages_per_req parameter is to set a threshold
 of the maximum number of pages dynamically according to the
 administrator's demand, and root can only change it.

 So, when the maximum value is required to be set to not more than the
 pipe-max-size, the max_pages_per_req should be changed considering it.
 It seems that the upper limit of this parameter does not have to be
 not more than it.

 I'm planning to limit max_pages_per_req up to 1024 pages and add the
 document to /Documentation/filesystems/fuse.txt, as follows.

 the sysfs max_pages_per_req parameter can be changed from 32 to 1024.
 The default is 32 pages. Generally, the pipe-max-size is 1M (256 pages)
 and it is better to set it to not more than the pipe-max-size.

Can't we just use pipe-max-size for the limit?

Then we'll use the minimum of pipe-max-size and max_read/max_write for
sizing the requests.

Another comment: do we really need to allocate each and every request
with space for the pages?  I don't think that makes sense.  Let's leave
some small number of pages inline in the request and allocate a separate
array if the number of pages is too large.  There may even be some utilities
in the kernel to handle dynamically sized page arrays (I haven't looked
but I suspect there is).

Thanks,
Miklos
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [fuse-devel] [RFC PATCH 0/5] fuse: make maximum read/write request size tunable

2012-07-11 Thread HAYASAKA Mitsuo

Hi Yuan and Han-Wen,

Thank you for your comments.

(2012/07/06 22:58), Han-Wen Nienhuys wrote:

On Fri, Jul 6, 2012 at 2:53 AM, Liu Yuan  wrote:

On 07/05/2012 06:50 PM, Mitsuo Hayasaka wrote:

One of the ways to solve this is to make them tunable.
In this series, the new sysfs parameter max_pages_per_req is introduced.
It limits the maximum read/write size in fuse request and it can be
changed from 32 to 256 pages in current implementations. When the
max_read/max_write mount option is specified, FUSE request size is set
per mount. (The size is rounded-up to page size and limited up to
max_pages_per_req.)


Why maxim 256 pages? If we are here, we can go further: most of object
storage system has object size of multiple to dozens of megabytes. So I
think probably 1M is too small. Our distribution storage system has 4M
per object, so I think at least maxim size could be bigger than 4M.


The maximum pipe size on my system is 1M, so if you go beyond that,
splicing from the FD won't work.

Also, the userspace client must reserve a buffer this size so it can
receive a write, which is a waste since most requests are much
smaller.



I checked the maximum pipe size can be changed using fcntl(2) or
/proc/sys/fs/pipe-max-size. It is clear that it is not a fixed value.

Also, it seems that there is a request for setting the maximum number
of pages per fuse request to 4M (1024 pages). One of the reasons to
introduce the sysfs max_pages_per_req parameter is to set a threshold
of the maximum number of pages dynamically according to the
administrator's demand, and root can only change it.

So, when the maximum value is required to be set to not more than the
pipe-max-size, the max_pages_per_req should be changed considering it.
It seems that the upper limit of this parameter does not have to be
not more than it.

I'm planning to limit max_pages_per_req up to 1024 pages and add the
document to /Documentation/filesystems/fuse.txt, as follows.

"the sysfs max_pages_per_req parameter can be changed from 32 to 1024.
The default is 32 pages. Generally, the pipe-max-size is 1M (256 pages)
and it is better to set it to not more than the pipe-max-size."

This is just a plan and any comments are appreciated.

Thanks,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [fuse-devel] [RFC PATCH 0/5] fuse: make maximum read/write request size tunable

2012-07-11 Thread HAYASAKA Mitsuo

Hi Yuan and Han-Wen,

Thank you for your comments.

(2012/07/06 22:58), Han-Wen Nienhuys wrote:

On Fri, Jul 6, 2012 at 2:53 AM, Liu Yuannamei.u...@gmail.com  wrote:

On 07/05/2012 06:50 PM, Mitsuo Hayasaka wrote:

One of the ways to solve this is to make them tunable.
In this series, the new sysfs parameter max_pages_per_req is introduced.
It limits the maximum read/write size in fuse request and it can be
changed from 32 to 256 pages in current implementations. When the
max_read/max_write mount option is specified, FUSE request size is set
per mount. (The size is rounded-up to page size and limited up to
max_pages_per_req.)


Why maxim 256 pages? If we are here, we can go further: most of object
storage system has object size of multiple to dozens of megabytes. So I
think probably 1M is too small. Our distribution storage system has 4M
per object, so I think at least maxim size could be bigger than 4M.


The maximum pipe size on my system is 1M, so if you go beyond that,
splicing from the FD won't work.

Also, the userspace client must reserve a buffer this size so it can
receive a write, which is a waste since most requests are much
smaller.



I checked the maximum pipe size can be changed using fcntl(2) or
/proc/sys/fs/pipe-max-size. It is clear that it is not a fixed value.

Also, it seems that there is a request for setting the maximum number
of pages per fuse request to 4M (1024 pages). One of the reasons to
introduce the sysfs max_pages_per_req parameter is to set a threshold
of the maximum number of pages dynamically according to the
administrator's demand, and root can only change it.

So, when the maximum value is required to be set to not more than the
pipe-max-size, the max_pages_per_req should be changed considering it.
It seems that the upper limit of this parameter does not have to be
not more than it.

I'm planning to limit max_pages_per_req up to 1024 pages and add the
document to /Documentation/filesystems/fuse.txt, as follows.

the sysfs max_pages_per_req parameter can be changed from 32 to 1024.
The default is 32 pages. Generally, the pipe-max-size is 1M (256 pages)
and it is better to set it to not more than the pipe-max-size.

This is just a plan and any comments are appreciated.

Thanks,
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/