From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f41.google.com (mail-pa0-f41.google.com [209.85.220.41]) by dpdk.org (Postfix) with ESMTP id 636BE5A87 for ; Thu, 24 Dec 2015 04:54:09 +0100 (CET) Received: by mail-pa0-f41.google.com with SMTP id jx14so115527862pad.2 for ; Wed, 23 Dec 2015 19:54:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=igel-co-jp.20150623.gappssmtp.com; s=20150623; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-type:content-transfer-encoding; bh=GhQzfXRLiLA6k/thiOL6YRVta2UyoZUF+oS8VdKIN7w=; b=h9eRD5r+AoF762fYEkeTXuPW7b2IqB4a6Rq5kSmdWC3u2BwyWkk0/prvwkLouPMVQr BBlWmU0ZcUJYBxYbMo9lgHL/i/qKG4kT/Hl9VwAY6sMbNwxu8t6CpBRkAWmHL1Ru8/5c MNCOHbK0NT4hiiFuMMRk97aHnn61YyaO9fpsAG7aG49EUAvELIdyrsPJLz+nxwMzPkt8 9j1+wHumOz0YtZWOEklyopLWhnjUOq+V6mCo7qIeRJTpZ1vHhfSRB/ga7D5pQp/e3Wk8 W99msfU/PSUZoD6WDDX03cvEzpxjDDplmdF4X24cSnPK3CsKlx2S+x/oLm6impiQOzGd 0qSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-type :content-transfer-encoding; bh=GhQzfXRLiLA6k/thiOL6YRVta2UyoZUF+oS8VdKIN7w=; b=ZVvNLP5exv8zs9R3dRp7r5tTUyoVwOfndd8roWQc6nV88XfWXOOzUvGGG1Fi59d1hk WO7Pgu2n7+DDoJThFR88dAWmMJRhORg/ja2geZAz7lW5fj349vC5Vwulpm7r6NE3+p7C 4PghlVBT8ekTL5TLCarb1lcum2X0ktT+lW+h3oQA/1TALv/zb+oD0Dyi6rOCdHLnj7iJ oowLaihYQEds6/zkDmXWD6qgZIlT+Bwx0QzvfstmIwvpX9T8SR0WmyB8Zn+8apMNNWCC F+CKxgUB4XPRhPQT4MpYcSZ4S0MI5+/jSa8QumU2EQ0jEoAuH8BwLcmGa1gfB3Lre1Eb Mm0Q== X-Gm-Message-State: ALoCoQlRqh97zVeMB5a55lYgyYEc4HksvQeudMFIphM8TNjDCAxKVp+Q6+5zvMc6gUi/esuSvH0n3ecOucM7Npw8j37/FXqZRw== X-Received: by 10.66.216.73 with SMTP id oo9mr49294474pac.148.1450929248716; Wed, 23 Dec 2015 19:54:08 -0800 (PST) Received: from [10.16.129.101] (napt.igel.co.jp. [219.106.231.132]) by smtp.googlemail.com with ESMTPSA id 72sm45689195pfa.92.2015.12.23.19.54.06 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 23 Dec 2015 19:54:07 -0800 (PST) To: Rich Lane , Yuanhan Liu References: <1447392031-24970-3-git-send-email-mukawa@igel.co.jp> <1448355603-21275-1-git-send-email-mukawa@igel.co.jp> <1448355603-21275-2-git-send-email-mukawa@igel.co.jp> <20151217114223.GC29571@yliu-dev.sh.intel.com> <56737A5E.1030803@igel.co.jp> <20151218041536.GI29571@yliu-dev.sh.intel.com> <56738B5C.1030206@igel.co.jp> <20151222034158.GH18863@yliu-dev.sh.intel.com> <567B61D6.1090806@igel.co.jp> From: Tetsuya Mukawa X-Enigmail-Draft-Status: N1110 Message-ID: <567B6C60.7090204@igel.co.jp> Date: Thu, 24 Dec 2015 12:54:08 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <567B61D6.1090806@igel.co.jp> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: dev@dpdk.org, ann.zhuangyanying@huawei.com Subject: Re: [dpdk-dev] [PATCH v5 1/3] vhost: Add callback and private data for vhost PMD X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Dec 2015 03:54:09 -0000 On 2015/12/24 12:09, Tetsuya Mukawa wrote: > On 2015/12/22 13:47, Rich Lane wrote: >> On Mon, Dec 21, 2015 at 7:41 PM, Yuanhan Liu >> wrote: >> >>> On Fri, Dec 18, 2015 at 10:01:25AM -0800, Rich Lane wrote: >>>> I'm using the vhost callbacks and struct virtio_net with the vhost PMD >>> in a few >>>> ways: >>> Rich, thanks for the info! >>> >>>> 1. new_device/destroy_device: Link state change (will be covered by the >>> link >>>> status interrupt). >>>> 2. new_device: Add first queue to datapath. >>> I'm wondering why vring_state_changed() is not used, as it will also be >>> triggered at the beginning, when the default queue (the first queue) is >>> enabled. >>> >> Turns out I'd misread the code and it's already using the >> vring_state_changed callback for the >> first queue. Not sure if this is intentional but vring_state_changed is >> called for the first queue >> before new_device. >> >> >>>> 3. vring_state_changed: Add/remove queue to datapath. >>>> 4. destroy_device: Remove all queues (vring_state_changed is not called >>> when >>>> qemu is killed). >>> I had a plan to invoke vring_state_changed() to disable all vrings >>> when destroy_device() is called. >>> >> That would be good. >> >> >>>> 5. new_device and struct virtio_net: Determine NUMA node of the VM. >>> You can get the 'struct virtio_net' dev from all above callbacks. >> >>> 1. Link status interrupt. >>> >>> To vhost pmd, new_device()/destroy_device() equals to the link status >>> interrupt, where new_device() is a link up, and destroy_device() is link >>> down(). >>> >>> >>>> 2. New queue_state_changed callback. Unlike vring_state_changed this >>> should >>>> cover the first queue at new_device and removal of all queues at >>>> destroy_device. >>> As stated above, vring_state_changed() should be able to do that, except >>> the one on destroy_device(), which is not done yet. >>> >>>> 3. Per-queue or per-device NUMA node info. >>> You can query the NUMA node info implicitly by get_mempolicy(); check >>> numa_realloc() at lib/librte_vhost/virtio-net.c for reference. >>> >> Your suggestions are exactly how my application is already working. I was >> commenting on the >> proposed changes to the vhost PMD API. I would prefer to >> use RTE_ETH_EVENT_INTR_LSC >> and rte_eth_dev_socket_id for consistency with other NIC drivers, instead >> of these vhost-specific >> hacks. The queue state change callback is the one new API that needs to be >> added because >> normal NICs don't have this behavior. >> >> You could add another rte_eth_event_type for the queue state change >> callback, and pass the >> queue ID, RX/TX direction, and enable bit through cb_arg. > Hi Rich, > > So far, EAL provides rte_eth_dev_callback_register() for event handling. > DPDK app can register callback handler and "callback argument". > And EAL will call callback handler with the argument. > Anyway, vhost library and PMD cannot change the argument. > > I guess the callback handler will need to call ethdev APIs to know what > causes the interrupt. > Probably rte_eth_dev_socket_id() is to know numa_node, and > rte_eth_dev_info_get() is to know the number of queues. It seems rte_eth_dev_info_get() is not enough, because DPDK application needs not only the number of queues, but also which queues are enabled or disabled at least. I guess current interrupt mechanism and ethdev APIs cannot provides such information, because it's something special for vhost case. Tetsuya > Is this okay for your case? > > Thanks, > Tetsuya