diff options
| author | Jens Axboe <axboe@kernel.dk> | 2018-12-04 11:45:32 -0500 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2018-12-18 10:29:58 -0500 |
| commit | a79d40e9b0f309dcddc4e0bf5b64e51e28153e55 (patch) | |
| tree | f7974ad993b0b69c6702c2330cc0df37ade170df | |
| parent | 2bc4ca9bb600cbe36941da2b2a67189fc4302a04 (diff) | |
aio: only use blk plugs for > 2 depth submissions
Plugging is meant to optimize submission of a string of IOs, if we don't
have more than 2 being submitted, don't bother setting up a plug.
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
| -rw-r--r-- | fs/aio.c | 18 |
1 files changed, 14 insertions, 4 deletions
| @@ -70,6 +70,12 @@ struct aio_ring { | |||
| 70 | struct io_event io_events[0]; | 70 | struct io_event io_events[0]; |
| 71 | }; /* 128 bytes + ring size */ | 71 | }; /* 128 bytes + ring size */ |
| 72 | 72 | ||
| 73 | /* | ||
| 74 | * Plugging is meant to work with larger batches of IOs. If we don't | ||
| 75 | * have more than the below, then don't bother setting up a plug. | ||
| 76 | */ | ||
| 77 | #define AIO_PLUG_THRESHOLD 2 | ||
| 78 | |||
| 73 | #define AIO_RING_PAGES 8 | 79 | #define AIO_RING_PAGES 8 |
| 74 | 80 | ||
| 75 | struct kioctx_table { | 81 | struct kioctx_table { |
| @@ -1921,7 +1927,8 @@ SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, nr, | |||
| 1921 | if (nr > ctx->nr_events) | 1927 | if (nr > ctx->nr_events) |
| 1922 | nr = ctx->nr_events; | 1928 | nr = ctx->nr_events; |
| 1923 | 1929 | ||
| 1924 | blk_start_plug(&plug); | 1930 | if (nr > AIO_PLUG_THRESHOLD) |
| 1931 | blk_start_plug(&plug); | ||
| 1925 | for (i = 0; i < nr; i++) { | 1932 | for (i = 0; i < nr; i++) { |
| 1926 | struct iocb __user *user_iocb; | 1933 | struct iocb __user *user_iocb; |
| 1927 | 1934 | ||
| @@ -1934,7 +1941,8 @@ SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, nr, | |||
| 1934 | if (ret) | 1941 | if (ret) |
| 1935 | break; | 1942 | break; |
| 1936 | } | 1943 | } |
| 1937 | blk_finish_plug(&plug); | 1944 | if (nr > AIO_PLUG_THRESHOLD) |
| 1945 | blk_finish_plug(&plug); | ||
| 1938 | 1946 | ||
| 1939 | percpu_ref_put(&ctx->users); | 1947 | percpu_ref_put(&ctx->users); |
| 1940 | return i ? i : ret; | 1948 | return i ? i : ret; |
| @@ -1961,7 +1969,8 @@ COMPAT_SYSCALL_DEFINE3(io_submit, compat_aio_context_t, ctx_id, | |||
| 1961 | if (nr > ctx->nr_events) | 1969 | if (nr > ctx->nr_events) |
| 1962 | nr = ctx->nr_events; | 1970 | nr = ctx->nr_events; |
| 1963 | 1971 | ||
| 1964 | blk_start_plug(&plug); | 1972 | if (nr > AIO_PLUG_THRESHOLD) |
| 1973 | blk_start_plug(&plug); | ||
| 1965 | for (i = 0; i < nr; i++) { | 1974 | for (i = 0; i < nr; i++) { |
| 1966 | compat_uptr_t user_iocb; | 1975 | compat_uptr_t user_iocb; |
| 1967 | 1976 | ||
| @@ -1974,7 +1983,8 @@ COMPAT_SYSCALL_DEFINE3(io_submit, compat_aio_context_t, ctx_id, | |||
| 1974 | if (ret) | 1983 | if (ret) |
| 1975 | break; | 1984 | break; |
| 1976 | } | 1985 | } |
| 1977 | blk_finish_plug(&plug); | 1986 | if (nr > AIO_PLUG_THRESHOLD) |
| 1987 | blk_finish_plug(&plug); | ||
| 1978 | 1988 | ||
| 1979 | percpu_ref_put(&ctx->users); | 1989 | percpu_ref_put(&ctx->users); |
| 1980 | return i ? i : ret; | 1990 | return i ? i : ret; |
