diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2023-07-11 14:04:40 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2023-10-02 12:19:06 -0400 |
commit | 1afa241472709b32baf5e3e1fd3ba6ebd5fd1bf6 (patch) | |
tree | 12670aba43a4a692683f802bdbc4720a412e88b1 /src/bftw.c | |
parent | dba692ca0fb44678fdcc7634d821f04eac2f8042 (diff) | |
download | bfs-1afa241472709b32baf5e3e1fd3ba6ebd5fd1bf6.tar.xz |
ioq: Use io_uring
Closes #65.
Diffstat (limited to 'src/bftw.c')
-rw-r--r-- | src/bftw.c | 23 |
1 files changed, 18 insertions, 5 deletions
@@ -470,21 +470,34 @@ static int bftw_state_init(struct bftw_state *state, const struct bftw_args *arg state->error = 0; - if (args->nopenfd < 1) { + if (args->nopenfd < 2) { errno = EMFILE; return -1; } - bftw_cache_init(&state->cache, args->nopenfd); - state->nthreads = args->nthreads; - if (state->nthreads > 0) { - state->ioq = ioq_create(4096, state->nthreads); + size_t nopenfd = args->nopenfd; + size_t qdepth = 4096; + size_t nthreads = args->nthreads; + +#if BFS_USE_LIBURING + // io_uring uses one fd per ring, ioq uses one ring per thread + if (nthreads >= nopenfd - 1) { + nthreads = nopenfd - 2; + } + nopenfd -= nthreads; +#endif + + bftw_cache_init(&state->cache, nopenfd); + + if (nthreads > 0) { + state->ioq = ioq_create(qdepth, nthreads); if (!state->ioq) { return -1; } } else { state->ioq = NULL; } + state->nthreads = nthreads; SLIST_INIT(&state->to_open); SLIST_INIT(&state->to_read); |