[dpdk-dev] [PATCH] examples/vhost: introduce a new vhost-user-scsi sample application

Yuanhan Liu yliu at fridaylinux.org
Fri Jul 7 02:50:35 CEST 2017


On Thu, Jun 29, 2017 at 05:28:32PM +0800, Changpeng Liu wrote:
> +.. note::
> +    You must check whether you Qemu can support "vhost-user-scsi" or not,
> +    the latest Qemu code is recommended.

You should specify the least QEMU version that supports vhost-user scsi here.

> +
> +Common Issues
> +-------------
> +
> +* QEMU fails to allocate memory on hugetlbfs, with an error like the
> +  following::
> +
> +      file_ram_alloc: can't mmap RAM pages: Cannot allocate memory
> +
> +  When running QEMU the above error indicates that it has failed to allocate
> +  memory for the Virtual Machine on the hugetlbfs. This is typically due to
> +  insufficient hugepages being free to support the allocation request. The
> +  number of free hugepages can be checked as follows:
> +
> +  .. code-block:: console
> +
> +      cat /sys/kernel/mm/hugepages/hugepages-<pagesize>/nr_hugepages
> +
> +  The command above indicates how many hugepages are free to support QEMU's
> +  allocation request.
> +
> +* vhost-user will not work with a QEMU version without shared memory mapping:
> +
> +  Make sure ``share=on`` QEMU option is given.

They are common pitfalls of vhost-user examples. You don't have to repeat
it again here. Instead, you could add a link to the vhost-example doc and
let this section only cover issues belong to vhost-user scsi.

> +* vhost_scsi can not start with block size 512 Bytes:
> +
> +  Currently DPDK vhost library was designed for NET device(althrough the APIs
> +  are generic now), for 512 Bytes block device, Qemu BIOS(x86 BIOS Enhanced
> +  Disk Device) will enumerate all block device and do some IO to those block
> +  devices with 512 Bytes sector size. DPDK vhost library can not process such
> +  scenarios(both BIOS and OS will enumerate the block device), so as a
> +  workaround, the vhost_scsi example application hardcoded the block size
> +  with 512 Bytes.

A bit confused here. You said we can not use 512 bytes while you hardcode it
with 512 bytes?

> +static void
> +scsi_task_build_sense_data(struct vhost_scsi_task *task, int sk,
> +			   int asc, int ascq)
> +{
> +	uint8_t *cp;
> +	int resp_code;
> +
> +	resp_code = 0x70; /* Current + Fixed format */

Could you add macros for those magic numbers? I saw quite a lot of them.

BTW, you might want to build it on a 32bit system. I think this patch
won't build successfully on it.

	--yliu


More information about the dev mailing list