Spdk/lib/nvme
Tomasz Zawadzki 062da7a08a nvme/pcie: reduce physically contiguous memory for CQ/SQ
Following patch made sure that CQ/SQ are allocated in
physically contiguous manner:
(64db67) nvme/pcie: make sure sq and cq are physically contiguous

Using MAX_IO_QUEUE_ENTRIES is enough to make sure that either
queue does not span multiple hugepages.

Yet the patch made sure that whole page is occupied only
by the queue. Which unnecessarily increases memory consumption
up to two hugepages per each qpair.

This patch changes it so that each queue alignment is limited
up to its size.

Changes in hugepages consumed when allocating io_qpair in hello_world
application:
io_queue_size		Without patch	With patch
256			8MiB		0MiB
1024			12MiB		4MiB
4096			24MiB		16MiB
Note: 0MiB means no new hugepages were required and qpair fits into
previously allocated hugepages (see all steps before io_qpair
allocation in hello_world).

Intersting result of this patch is that since we required alignment
up to the hugepage size this resulted in reserving even two 2MiB
hugepages to account for DPDK internal malloc trailing element.
See alloc_sz in try_expand_heap_primary() within malloc_heap.c

This patch not only reduces overall memory reserved for the
queues, but decreases increase in heap consumption on DPDK side.

Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2244 (master)

(cherry picked from commit d3cf561199)
Change-Id: I75bf86e93674b4822d8204df3fb99458dec61e9c
Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2510
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2020-05-28 08:55:44 +00:00
..
Makefile lib/nvme: add NVMe character device 2019-10-24 23:43:59 +00:00
nvme_ctrlr_cmd.c nvme: add spdk_nvme_ctrlr_cmd_get_log_page_ext() 2020-01-10 08:46:33 +00:00
nvme_ctrlr_ocssd_cmd.c ocssd: hold lock when calling nvme_ctrlr_submit_admin_request 2019-02-15 21:27:58 +00:00
nvme_ctrlr.c nvme: detach the controller in STUB and flush the admin active requests at last 2020-03-19 08:09:53 +00:00
nvme_cuse.c lib/nvme: fix cuse return status code 2020-01-16 09:20:20 +00:00
nvme_cuse.h lib/nvme: add RPC for interacting with CUSE devices 2019-10-24 23:43:59 +00:00
nvme_fabric.c nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvme_internal.h nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvme_io_msg.c lib/nvme: stop all NVMe io producers on detach 2019-11-28 12:36:58 +00:00
nvme_io_msg.h lib/nvme: stop all NVMe io producers on detach 2019-11-28 12:36:58 +00:00
nvme_ns_cmd.c nvme: Add spdk_nvme_ns_cmd_comparev_with_md function 2020-01-07 12:31:32 +00:00
nvme_ns_ocssd_cmd.c vtophys: add length parameter to the vtophys function 2019-01-09 08:24:59 +00:00
nvme_ns.c nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvme_opal_internal.h Opal: Add async function for revert TPer 2019-10-24 17:09:57 +00:00
nvme_opal.c Opal: Add clean response buffer process 2019-12-24 08:13:57 +00:00
nvme_pcie.c nvme/pcie: reduce physically contiguous memory for CQ/SQ 2020-05-28 08:55:44 +00:00
nvme_qpair.c nvme: fix command specific status code 2020-03-19 08:09:53 +00:00
nvme_quirks.c nvme: add quirk for a minimum io queue size 2019-12-13 11:02:04 +00:00
nvme_rdma.c nvme: set transport string before the probe based on transport type 2020-03-19 08:09:53 +00:00
nvme_tcp.c nvme: set transport string before the probe based on transport type 2020-03-19 08:09:53 +00:00
nvme_transport.c lib/nvme: make transport.c use fn tables. 2020-01-16 09:10:38 +00:00
nvme_uevent.c nvme: add vfio driver parse event 2019-05-29 02:36:41 +00:00
nvme_uevent.h nvme: Add support of hotplug for vfio-attached devices. 2017-12-06 17:04:49 -05:00
nvme.c lib/nvme: Fix scanbuild issue about uninitialized value. 2020-03-20 19:03:49 +00:00