From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id D8B9EB480 for ; Tue, 17 Feb 2015 14:47:26 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP; 17 Feb 2015 05:39:56 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,594,1418112000"; d="scan'208";a="528625971" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by orsmga003.jf.intel.com with ESMTP; 17 Feb 2015 05:38:50 -0800 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id t1HDlNMN000675 for ; Tue, 17 Feb 2015 21:47:23 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id t1HDlJ7X024519 for ; Tue, 17 Feb 2015 21:47:21 +0800 Received: (from dyzhou@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t1HDlJjP024515 for dev@dpdk.org; Tue, 17 Feb 2015 21:47:19 +0800 From: Zhou Danny To: dev@dpdk.org Date: Tue, 17 Feb 2015 21:47:14 +0800 Message-Id: <1424180839-24483-1-git-send-email-danny.zhou@intel.com> X-Mailer: git-send-email 1.7.4.1 Subject: [dpdk-dev] [PATCH v3 0/5] Interrupt mode 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: Tue, 17 Feb 2015 13:47:27 -0000 v3 changes - Add return value for interrupt enable/disable functions - Move spinlok from PMD to L3fwd-power - Remove unnecessary variables in e1000_mac_info - Fix miscelleous review comments v2 changes - Fix compilation issue in Makefile for missed header file. - Consolidate internal and community review comments of v1 patch set. The patch series introduce low-latency one-shot rx interrupt into DPDK with polling and interrupt mode switch control example. DPDK userspace interrupt notification and handling mechanism is based on UIO with below limitation: 1) It is designed to handle LSC interrupt only with inefficient suspended pthread wakeup procedure (e.g. UIO wakes up LSC interrupt handling thread which then wakes up DPDK polling thread). In this way, it introduces non-deterministic wakeup latency for DPDK polling thread as well as packet latency if it is used to handle Rx interrupt. 2) UIO only supports a single interrupt vector which has to been shared by LSC interrupt and interrupts assigned to dedicated rx queues. This patchset includes below features: 1) Enable one-shot rx queue interrupt in ixgbe PMD(PF & VF) and igb PMD(PF only). 2) Build on top of the VFIO mechanism instead of UIO, so it could support up to 64 interrupt vectors for rx queue interrupts. 3) Have 1 DPDK polling thread handle per Rx queue interrupt with a dedicated VFIO eventfd, which eliminates non-deterministic pthread wakeup latency in user space. 4) Demonstrate interrupts control APIs and userspace NAIP-like polling/interrupt switch algorithms in L3fwd-power example. Known limitations: 1) It does not work for UIO due to a single interrupt eventfd shared by LSC and rx queue interrupt handlers causes a mess. 2) LSC interrupt is not supported by VF driver, so it is by default disabled in L3fwd-power now. Feel free to turn in on if you want to support both LSC and rx queue interrupts on a PF. Danny Zhou (5): ethdev: add rx interrupt enable/disable functions ixgbe: enable rx queue interrupts for both PF and VF igb: enable rx queue interrupts for PF eal: add per rx queue interrupt handling based on VFIO l3fwd-power: enable one-shot rx interrupt and polling/interrupt mode switch examples/l3fwd-power/main.c | 153 ++++++--- lib/librte_eal/common/include/rte_eal.h | 12 + lib/librte_eal/linuxapp/eal/Makefile | 1 + lib/librte_eal/linuxapp/eal/eal_interrupts.c | 190 ++++++++--- lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 12 +- .../linuxapp/eal/include/exec-env/rte_interrupts.h | 4 + lib/librte_ether/rte_ethdev.c | 43 +++ lib/librte_ether/rte_ethdev.h | 57 ++++ lib/librte_pmd_e1000/e1000_ethdev.h | 3 + lib/librte_pmd_e1000/igb_ethdev.c | 228 +++++++++++-- lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 365 ++++++++++++++++++++- lib/librte_pmd_ixgbe/ixgbe_ethdev.h | 6 + 13 files changed, 963 insertions(+), 114 deletions(-) -- 1.8.1.4