linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RESEND PATCH v2 0/2] aio: decouple ctx's max_reqs and nr_events
@ 2017-05-24 19:36 Mauricio Faria de Oliveira
  2017-05-24 19:36 ` [RESEND PATCH v2 1/2] aio: make nr_events a parameter for aio_setup_ring() Mauricio Faria de Oliveira
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Mauricio Faria de Oliveira @ 2017-05-24 19:36 UTC (permalink / raw)
  To: bcrl, viro; +Cc: jmoyer, linux-aio, linux-fsdevel

Currently, using smaller nr_events in io_setup(), the max number of
allocation requests is inversely proportional to num_possible_cpus()
(which is a problem on larger/non-virtualized systems with many CPUs).

This happens because, internally, nr_events must be increased for the
percpu allocation scheme (according to the number of CPUs), but it is
being reflected on the max_reqs value (aio-nr), which is used to count
against the global limit (aio-max-nr).

This patchset decouples ctx->max_reqs and ctx->nr_events, so that the
extra nr_events which are internally required do not reflect into the
'aio-nr' counter which is externally visible & checked to 'aio-max-nr'.
    
This ensures that userspace can allocate most of the aio-max-nr value
that is made available/visible to it -- regardless of the number of
possible CPUs in the system.

P.S.: this patchset has been 'relatively acked' by Benjamin LaHaise [2],
      but for timing difficulties, it hasn't been queued nor re-submitted
      in a while; sorry.

v2:
 - adjust/move comment in PATCH 2/2 to commit message (Jeff Moyer [3])

Test-case:

     // 64k request (ie, aio-max-nr) to io_setup with nr_events = 1
     for (i = 0; i < 65536; i++)
         if (rc = io_setup(1, &ioctx[i]))
             break;

     printf("rc = %d, i = %d\n", rc, i);

  - on v4.12-rc2, it fails w/ -EAGAIN on request #102 (160 CPUs),
                  and aio-nr value is ~2x the aio-max-nr value (wrong):

    # ./test-case &
    rc = -11, i = 102

    # grep . /proc/sys/fs/aio-*
    /proc/sys/fs/aio-max-nr:65536
    /proc/sys/fs/aio-nr:130560


  - on v4.12-rc2 with patches, it fails w/ -ENOMEM on request #65515,
                 thus going way further toward the actual max limit:

    # ./test-case &
    rc = -12, i = 65515

    # grep . /proc/sys/fs/aio-*
    /proc/sys/fs/aio-max-nr:65536
    /proc/sys/fs/aio-nr:65515


Links:
[1] http://marc.info/?l=linux-aio&m=147562172703469&w=2
[2] http://marc.info/?l=linux-aio&m=147757894603034&w=2
[3] http://marc.info/?l=linux-aio&m=147769074702475&w=2

Mauricio Faria de Oliveira (2):
  aio: make nr_events a parameter for aio_setup_ring()
  aio: use ctx->max_reqs only for counting against the global limit

 fs/aio.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

-- 
1.8.3.1

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

end of thread, other threads:[~2017-06-09  0:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-05-24 19:36 [RESEND PATCH v2 0/2] aio: decouple ctx's max_reqs and nr_events Mauricio Faria de Oliveira
2017-05-24 19:36 ` [RESEND PATCH v2 1/2] aio: make nr_events a parameter for aio_setup_ring() Mauricio Faria de Oliveira
2017-05-24 19:36 ` [RESEND PATCH v2 2/2] aio: use ctx->max_reqs only for counting against the global limit Mauricio Faria de Oliveira
2017-06-09  0:26 ` [RESEND PATCH v2 0/2] aio: decouple ctx's max_reqs and nr_events Mauricio Faria de Oliveira

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).