Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2960945imm; Mon, 28 May 2018 21:01:10 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJiQEIPSkVyaA5GiHLE9YtbO6gBL8fySF1VbdsczEmj7F+Iwd0IcuksaUxBG/KhTfI2ZWWD X-Received: by 2002:a65:6007:: with SMTP id m7-v6mr8419131pgu.92.1527566470565; Mon, 28 May 2018 21:01:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527566470; cv=none; d=google.com; s=arc-20160816; b=0OKoPBOZljDT1tJHBd3NeV+B97iFnSY/I2Ny84LEkOxylwmGN8pdst1CbHiEBOQnDQ DFn+/fJh/zifv7yRZ4ZmVO61osxQLFcm0IHz+id3KacibGmjtQjHWV8oYoAzuy8VU2FF hVk9UMsawHeOX8OCiH4UsKQtMK/rGUoe/0gPw0PfJvpRk43ufuEQ+QRVf7n3Ge1Vse6Y urT1NtbcJPUq7UIP1lKjP679tck3caxZ0rgSsu1Wm6QPLLWpf1oqdvz6Cn7Twb8WesV+ bmvtShHjsEQSZaVDEXzVLpj1i1GhsuEzvugjPrYfTMlng5buX0GDBWToxzPSg6epFrJI Dn3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=41i6I7ZPefqSG1VayPBDmT8hvvWSOmKeLQzTvHCqsok=; b=S2tOn7j+c1V3dBsdYeBsMl9P5CIlvZzOU3kLvxwghujayiYOSEiBk63P3vKpL7DZqS niS5hDWxk8l0Vnry5CkcxDgYTWLhJwRELWlYzSPA4f9kJWOEA0eFhq2e3Fng6UWehYQH q66r7ObDzJ/sFTXLxBk81kH/tlprT/B9xdCmjehGq7rP4SGTiSRwTJ62jZEKm4etsAMw Y78jdsQ6tVfrhdlkl9E0k2T7sm6uIaZZ7B+F+Ur07e8xcgw7iRtZ4qFHydDHDdTeH5UV NN5A9hNchW+duX7fSy//Y7eOZEM5k+6BwJqJf/2zEeDCKVZh1UVzx7DBnaqUOAv0HaGU UFCA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p63-v6si20720549pga.484.2018.05.28.21.00.55; Mon, 28 May 2018 21:01:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932783AbeE2CKp (ORCPT + 99 others); Mon, 28 May 2018 22:10:45 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:36976 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932332AbeE2CKo (ORCPT ); Mon, 28 May 2018 22:10:44 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 517397D664; Tue, 29 May 2018 02:10:43 +0000 (UTC) Received: from jason-ThinkPad-T450s.redhat.com (ovpn-12-44.pek2.redhat.com [10.72.12.44]) by smtp.corp.redhat.com (Postfix) with ESMTP id A41AB1116705; Tue, 29 May 2018 02:10:32 +0000 (UTC) From: Jason Wang To: mst@redhat.com, jasowang@redhat.com Cc: kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, jfreimann@redhat.com, wexu@redhat.com, tiwei.bie@intel.com Subject: [RFC V5 PATCH 0/8] Packed ring layout for vhost Date: Tue, 29 May 2018 10:10:22 +0800 Message-Id: <1527559830-8133-1-git-send-email-jasowang@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Tue, 29 May 2018 02:10:43 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Tue, 29 May 2018 02:10:43 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'jasowang@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi all: This RFC implement packed ring layout. The code were tested with Tiwei's RFC V5 at https://lkml.org/lkml/2018/5/22/138. Some fixups and tweaks were needed on top of Tiwei's code to make it run for event index. Pktgen reports about 20% improvement on TX PPS when doing pktgen from guest to host. No ovbious improvement on RX PPS. We can do lots of optimizations on top but for simple and for correceness first, this version does not do much. This version were tested with: - Zerocopy (Out of Order) support - vIOMMU support - mergeable buffer on/off - busy polling on/off Notes for tester: - Start from this version, vhost need qemu co-operation to work correctly. Or you can comment out the packed specific code for GET/SET_VRING_BASE. - Changes from V4: - fix signalled_used index recording - track avail index correctly - various minor fixes Changes from V3: - Fix math on event idx checking - Sync last avail wrap counter through GET/SET_VRING_BASE - remove desc_event prefix in the driver/device structure Changes from V2: - do not use & in checking desc_event_flags - off should be most significant bit - remove the workaround of mergeable buffer for dpdk prototype - id should be in the last descriptor in the chain - keep _F_WRITE for write descriptor when adding used - device flags updating should use ADDR_USED type - return error on unexpected unavail descriptor in a chain - return false in vhost_ve_avail_empty is descriptor is available - track last seen avail_wrap_counter - correctly examine available descriptor in get_indirect_packed() - vhost_idx_diff should return u16 instead of bool Changes from V1: - Refactor vhost used elem code to avoid open coding on used elem - Event suppression support (compile test only). - Indirect descriptor support (compile test only). - Zerocopy support. - vIOMMU support. - SCSI/VSOCK support (compile test only). - Fix several bugs Jason Wang (8): vhost: move get_rx_bufs to vhost.c vhost: hide used ring layout from device vhost: do not use vring_used_elem vhost_net: do not explicitly manipulate vhost_used_elem vhost: vhost_put_user() can accept metadata type virtio: introduce packed ring defines vhost: packed ring support vhost: event suppression for packed ring drivers/vhost/net.c | 144 ++---- drivers/vhost/scsi.c | 62 +-- drivers/vhost/vhost.c | 926 +++++++++++++++++++++++++++++++++---- drivers/vhost/vhost.h | 52 ++- drivers/vhost/vsock.c | 42 +- include/uapi/linux/virtio_config.h | 9 + include/uapi/linux/virtio_ring.h | 32 ++ 7 files changed, 1000 insertions(+), 267 deletions(-) -- 2.7.4