From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2D06542B9A; Thu, 25 May 2023 13:23:40 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1F082410DC; Thu, 25 May 2023 13:23:40 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id 9F13540DDB for ; Thu, 25 May 2023 13:23:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1685013818; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=KYo/Yorzhem7u204L2rsZbgF3KnVFiNGJ8Veho+GbbA=; b=WZdgac6wHW6AxCUaJCQw0Zl1abGta4j4jKX+Sp3peWYeo8Y+vLov238bOVXJvVMAoH/OiC XwfmYJO69ylZ5+fyIEK1kfSSoHK7OFJuNoGpwD6Z6dQZW8S7NvELzUhyKU4dXsXGfRnwu2 Ou9oe1ma2iEoJFp5DYHfyvWeAuHhlRk= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-207-1SozNdHnMRu0Eih5RUzIRQ-1; Thu, 25 May 2023 07:23:34 -0400 X-MC-Unique: 1SozNdHnMRu0Eih5RUzIRQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 92783811E7C; Thu, 25 May 2023 11:23:33 +0000 (UTC) Received: from [10.39.208.23] (unknown [10.39.208.23]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 65F517AF5; Thu, 25 May 2023 11:23:31 +0000 (UTC) Message-ID: Date: Thu, 25 May 2023 13:23:30 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [RFC 15/27] vhost: add API to set max queue pairs To: "Xia, Chenbo" , "dev@dpdk.org" , "david.marchand@redhat.com" , "mkp@redhat.com" , "fbl@redhat.com" , "jasowang@redhat.com" , "Liang, Cunming" , "Xie, Yongji" , "echaudro@redhat.com" , "eperezma@redhat.com" , "amorenoz@redhat.com" References: <20230331154259.1447831-1-maxime.coquelin@redhat.com> <20230331154259.1447831-16-maxime.coquelin@redhat.com> From: Maxime Coquelin In-Reply-To: X-Scanned-By: MIMEDefang 3.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 5/5/23 07:07, Xia, Chenbo wrote: > Hi Maxime, > >> -----Original Message----- >> From: Maxime Coquelin >> Sent: Friday, March 31, 2023 11:43 PM >> To: dev@dpdk.org; david.marchand@redhat.com; Xia, Chenbo >> ; mkp@redhat.com; fbl@redhat.com; >> jasowang@redhat.com; Liang, Cunming ; Xie, Yongji >> ; echaudro@redhat.com; eperezma@redhat.com; >> amorenoz@redhat.com >> Cc: Maxime Coquelin >> Subject: [RFC 15/27] vhost: add API to set max queue pairs >> >> This patch introduces a new rte_vhost_driver_set_max_queues >> API as preliminary work for multiqueue support with VDUSE. >> >> Indeed, with VDUSE we need to pre-allocate the vrings at >> device creation time, so we need such API not to allocate >> the 128 queue pairs supported by the Vhost library. >> >> Calling the API is optional, 128 queue pairs remaining the >> default. >> >> Signed-off-by: Maxime Coquelin >> --- >> doc/guides/prog_guide/vhost_lib.rst | 4 ++++ >> lib/vhost/rte_vhost.h | 17 ++++++++++++++ >> lib/vhost/socket.c | 36 +++++++++++++++++++++++++++-- >> lib/vhost/version.map | 3 +++ >> 4 files changed, 58 insertions(+), 2 deletions(-) > > Also add changes in release notes? Btw: somewhere we should also mention vduse > support is added in release notes. Correct, I need to update the release note in v2. Thanks, Maxime > Thanks, > Chenbo > >> >> diff --git a/doc/guides/prog_guide/vhost_lib.rst >> b/doc/guides/prog_guide/vhost_lib.rst >> index e8bb8c9b7b..cd4b109139 100644 >> --- a/doc/guides/prog_guide/vhost_lib.rst >> +++ b/doc/guides/prog_guide/vhost_lib.rst >> @@ -334,6 +334,10 @@ The following is an overview of some key Vhost API >> functions: >> Clean DMA vChannel finished to use. After this function is called, >> the specified DMA vChannel should no longer be used by the Vhost >> library. >> >> +* ``rte_vhost_driver_set_max_queue_num(path, max_queue_pairs)`` >> + >> + Set the maximum number of queue pairs supported by the device. >> + >> Vhost-user Implementations >> -------------------------- >> >> diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h >> index 58a5d4be92..44cbfcb469 100644 >> --- a/lib/vhost/rte_vhost.h >> +++ b/lib/vhost/rte_vhost.h >> @@ -588,6 +588,23 @@ rte_vhost_driver_get_protocol_features(const char >> *path, >> int >> rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num); >> >> +/** >> + * @warning >> + * @b EXPERIMENTAL: this API may change, or be removed, without prior >> notice. >> + * >> + * Set the maximum number of queue pairs supported by the device. >> + * >> + * @param path >> + * The vhost-user socket file path >> + * @param max_queue_pairs >> + * The maximum number of queue pairs >> + * @return >> + * 0 on success, -1 on failure >> + */ >> +__rte_experimental >> +int >> +rte_vhost_driver_set_max_queue_num(const char *path, uint32_t >> max_queue_pairs); >> + >> /** >> * Get the feature bits after negotiation >> * >> diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c >> index ba54263824..e95c3ffeac 100644 >> --- a/lib/vhost/socket.c >> +++ b/lib/vhost/socket.c >> @@ -56,6 +56,8 @@ struct vhost_user_socket { >> >> uint64_t protocol_features; >> >> + uint32_t max_queue_pairs; >> + >> struct rte_vdpa_device *vdpa_dev; >> >> struct rte_vhost_device_ops const *notify_ops; >> @@ -821,7 +823,7 @@ rte_vhost_driver_get_queue_num(const char *path, >> uint32_t *queue_num) >> >> vdpa_dev = vsocket->vdpa_dev; >> if (!vdpa_dev) { >> - *queue_num = VHOST_MAX_QUEUE_PAIRS; >> + *queue_num = vsocket->max_queue_pairs; >> goto unlock_exit; >> } >> >> @@ -831,7 +833,36 @@ rte_vhost_driver_get_queue_num(const char *path, >> uint32_t *queue_num) >> goto unlock_exit; >> } >> >> - *queue_num = RTE_MIN((uint32_t)VHOST_MAX_QUEUE_PAIRS, >> vdpa_queue_num); >> + *queue_num = RTE_MIN(vsocket->max_queue_pairs, vdpa_queue_num); >> + >> +unlock_exit: >> + pthread_mutex_unlock(&vhost_user.mutex); >> + return ret; >> +} >> + >> +int >> +rte_vhost_driver_set_max_queue_num(const char *path, uint32_t >> max_queue_pairs) >> +{ >> + struct vhost_user_socket *vsocket; >> + int ret = 0; >> + >> + VHOST_LOG_CONFIG(path, INFO, "Setting max queue pairs to %u\n", >> max_queue_pairs); >> + >> + if (max_queue_pairs > VHOST_MAX_QUEUE_PAIRS) { >> + VHOST_LOG_CONFIG(path, ERR, "Library only supports up to %u >> queue pairs\n", >> + VHOST_MAX_QUEUE_PAIRS); >> + return -1; >> + } >> + >> + pthread_mutex_lock(&vhost_user.mutex); >> + vsocket = find_vhost_user_socket(path); >> + if (!vsocket) { >> + VHOST_LOG_CONFIG(path, ERR, "socket file is not registered >> yet.\n"); >> + ret = -1; >> + goto unlock_exit; >> + } >> + >> + vsocket->max_queue_pairs = max_queue_pairs; >> >> unlock_exit: >> pthread_mutex_unlock(&vhost_user.mutex); >> @@ -890,6 +921,7 @@ rte_vhost_driver_register(const char *path, uint64_t >> flags) >> goto out_free; >> } >> vsocket->vdpa_dev = NULL; >> + vsocket->max_queue_pairs = VHOST_MAX_QUEUE_PAIRS; >> vsocket->extbuf = flags & RTE_VHOST_USER_EXTBUF_SUPPORT; >> vsocket->linearbuf = flags & RTE_VHOST_USER_LINEARBUF_SUPPORT; >> vsocket->async_copy = flags & RTE_VHOST_USER_ASYNC_COPY; >> diff --git a/lib/vhost/version.map b/lib/vhost/version.map >> index d322a4a888..dffb126aa8 100644 >> --- a/lib/vhost/version.map >> +++ b/lib/vhost/version.map >> @@ -98,6 +98,9 @@ EXPERIMENTAL { >> # added in 22.11 >> rte_vhost_async_dma_unconfigure; >> rte_vhost_vring_call_nonblock; >> + >> + # added in 23.07 >> + rte_vhost_driver_set_max_queue_num; >> }; >> >> INTERNAL { >> -- >> 2.39.2 >