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; |