diff options
author | Jens Axboe <axboe@fb.com> | 2015-01-22 12:07:58 -0700 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-01-29 09:25:34 -0800 |
commit | ac3dd5bd128b1d1ce2a037775766f39d06a4848a (patch) | |
tree | 9e6390eac98ffbbe5d7d82e6c585125ed9bba0cf /include/linux/nvme.h | |
parent | 4ca5829ac8b1297715bf609443ade2c332f3fd0c (diff) | |
download | lwn-ac3dd5bd128b1d1ce2a037775766f39d06a4848a.tar.gz lwn-ac3dd5bd128b1d1ce2a037775766f39d06a4848a.zip |
NVMe: avoid kmalloc/kfree for smaller IO
Currently we allocate an nvme_iod for each IO, which holds the
sg list, prps, and other IO related info. Set a threshold of
2 pages and/or 8KB of data, below which we can just embed this
in the per-command pdu in blk-mq. For any IO at or below
NVME_INT_PAGES and NVME_INT_BYTES, we save a kmalloc and kfree.
For higher IOPS, this saves up to 1% of CPU time.
Signed-off-by: Jens Axboe <axboe@fb.com>
Reviewed-by: Keith Busch <keith.busch@intel.com>
Diffstat (limited to 'include/linux/nvme.h')
-rw-r--r-- | include/linux/nvme.h | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/include/linux/nvme.h b/include/linux/nvme.h index 258945fcabf1..19a5d4b23209 100644 --- a/include/linux/nvme.h +++ b/include/linux/nvme.h @@ -132,13 +132,12 @@ struct nvme_ns { * allocated to store the PRP list. */ struct nvme_iod { - void *private; /* For the use of the submitter of the I/O */ + unsigned long private; /* For the use of the submitter of the I/O */ int npages; /* In the PRP list. 0 means small pool in use */ int offset; /* Of PRP list */ int nents; /* Used in scatterlist */ int length; /* Of data, in bytes */ dma_addr_t first_dma; - struct list_head node; struct scatterlist sg[0]; }; |