From f512744be77f2c65e17e3ddde90c2458124ac152 Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Mon, 9 Dec 2024 15:47:58 +1000 Subject: [PATCH] nfs: add support for new libnfs API New update of libnfs will have a new API that changes some signatures, primarily in order to make nfs_[p]read[_async] calls zero-copy in the sense that (almost) no data copy is done in the library and READ3/READ4 payloads are read straigth from the socket into the application buffer. In-library zero-copy only works for !krb5 and !tls sessions but can provide significant boost for read-intensive workloads when can be used. Signed-off-by: Ronnie Sahlberg Link: https://lore.kernel.org/r/20241209054758.3269700-1-ronniesahlberg@gmail.com Signed-off-by: Vincent Fu --- engines/nfs.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/engines/nfs.c b/engines/nfs.c index 6bc4af1fac..13b55038cc 100644 --- a/engines/nfs.c +++ b/engines/nfs.c @@ -157,16 +157,28 @@ static int queue_write(struct fio_libnfs_options *o, struct io_u *io_u) { struct nfs_data *nfs_data = io_u->engine_data; +#ifdef LIBNFS_API_V2 + return nfs_pwrite_async(o->context, nfs_data->nfsfh, + io_u->buf, io_u->buflen, io_u->offset, + nfs_callback, io_u); +#else return nfs_pwrite_async(o->context, nfs_data->nfsfh, io_u->offset, io_u->buflen, io_u->buf, nfs_callback, io_u); +#endif } static int queue_read(struct fio_libnfs_options *o, struct io_u *io_u) { struct nfs_data *nfs_data = io_u->engine_data; +#ifdef LIBNFS_API_V2 + return nfs_pread_async(o->context, nfs_data->nfsfh, + io_u->buf, io_u->buflen, io_u->offset, + nfs_callback, io_u); +#else return nfs_pread_async(o->context, nfs_data->nfsfh, io_u->offset, io_u->buflen, nfs_callback, io_u); +#endif } static enum fio_q_status fio_libnfs_queue(struct thread_data *td,