Commit 4d2a5442 authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Tomasz Zawadzki
Browse files

nvmf: improve request layout #2



zcopy_phase is used in the hot path hence move to first cache line.

dif_enabled is not used by generic code but used in the hot path on
tcp and rdma transport.

By using single bits for flags we can reduce 8 bytes and create some
headroom for future flags.

Change-Id: Ib3a1059bb47b9bce18db902099e6680ff5277148
Signed-off-by: default avatarJacek Kalwas <jacek.kalwas@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21345


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 0bff3e7e
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -76,8 +76,15 @@ struct spdk_nvmf_request {
	struct spdk_nvmf_qpair		*qpair;
	uint32_t			length;
	uint8_t				xfer; /* type enum spdk_nvme_data_transfer */
	bool				data_from_pool;
	bool				dif_enabled;
	union {
		uint8_t raw;
		struct {
			uint8_t data_from_pool		: 1;
			uint8_t dif_enabled		: 1;
			uint8_t rsvd			: 6;
		};
	};
	uint8_t				zcopy_phase; /* type enum spdk_nvmf_zcopy_phase */
	uint8_t				iovcnt;
	union nvmf_h2c_msg		*cmd;
	union nvmf_c2h_msg		*rsp;
@@ -92,6 +99,7 @@ struct spdk_nvmf_request {
	struct spdk_accel_sequence	*accel_sequence;

	struct iovec			iov[NVMF_REQ_MAX_BUFFERS];

	struct spdk_nvmf_stripped_data	*stripped_data;

	struct spdk_nvmf_dif_info	dif;
@@ -102,13 +110,11 @@ struct spdk_nvmf_request {
	struct spdk_nvmf_request	*req_to_abort;
	struct spdk_poller		*poller;
	struct spdk_bdev_io		*zcopy_bdev_io; /* Contains the bdev_io when using ZCOPY */
	enum spdk_nvmf_zcopy_phase	zcopy_phase;
	uint8_t				rsvd[4];

	/* Timeout tracked for connect and abort flows. */
	uint64_t timeout_tsc;
};
SPDK_STATIC_ASSERT(sizeof(struct spdk_nvmf_request) == 784, "Incorrect size");
SPDK_STATIC_ASSERT(sizeof(struct spdk_nvmf_request) == 776, "Incorrect size");

enum spdk_nvmf_qpair_state {
	SPDK_NVMF_QPAIR_UNINITIALIZED = 0,