From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id C6DB5AF7F for ; Thu, 25 Sep 2014 04:50:42 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP; 24 Sep 2014 19:56:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.04,593,1406617200"; d="scan'208";a="605006785" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga002.fm.intel.com with ESMTP; 24 Sep 2014 19:56:40 -0700 Received: from FMSMSX110.amr.corp.intel.com (10.18.116.10) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.195.1; Wed, 24 Sep 2014 19:56:39 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx110.amr.corp.intel.com (10.18.116.10) with Microsoft SMTP Server (TLS) id 14.3.195.1; Wed, 24 Sep 2014 19:56:39 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.204]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.203]) with mapi id 14.03.0195.001; Thu, 25 Sep 2014 10:56:38 +0800 From: "Liu, Yong" To: "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v2 00/10] VM Power Management Thread-Index: AQHP2By5vtNvuYXjSkOWbp4tiuFT6JwRJ5Gg Date: Thu, 25 Sep 2014 02:56:37 +0000 Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E10CE0C71@SHSMSX103.ccr.corp.intel.com> References: <1411410879-28872-1-git-send-email-alan.carew@intel.com> <1411579576-21786-1-git-send-email-alan.carew@intel.com> In-Reply-To: <1411579576-21786-1-git-send-email-alan.carew@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 00/10] VM Power Management 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, 25 Sep 2014 02:50:43 -0000 Tested-by: Liu Yong This patch set has been tested by Intel. Please see information as the following: Host: OS : Fedora 20 x86_64 Kernel : 3.11.10-301 GCC : 4.8.3 CPU : Intel Xeon CPU E5-2680 v2 @ 2.80GHz NIC : Intel Niantic 82599 Qemu : 1.6.2 Libvirt :1.1.3 Guest: OS : Fedora 20 x86_64 Kernel : 3.11.10-301 GCC : 4.8.3 We verified vm power management by unit test and function test. The detail information is listed below. vm power unit test Passed vm power channel connected Passed vm power frequency max Passed vm power frequency min Passed vm power frequency up Passed vm power frequency down Passed vm power l3fwd-power Passed > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Alan Carew > Sent: Thursday, September 25, 2014 1:26 AM > To: dev@dpdk.org > Subject: [dpdk-dev] [PATCH v2 00/10] VM Power Management >=20 > Virtual Machine Power Management. >=20 > The following patches add two DPDK sample applications and an alternate > implementation of librte_power for use in virtualized environments. > The idea is to provide librte_power functionality from within a VM to add= ress > the lack of MSRs to facilitate frequency changes from within a VM. > It is ideally suited for Haswell which provides per core frequency scalin= g. >=20 > The current librte_power affects frequency changes via the acpi-cpufreq > 'userspace' power governor, accessed via sysfs. >=20 > General Overview:(more information in each patch that follows). > The VM Power Management solution provides two components: >=20 > 1)VM: Allows for the a DPDK application in a VM to reuse the librte_powe= r > interface. Each lcore opens a Virto-Serial endpoint channel to the host, > where the re-implementation of librte_power simply forwards the requests > for > frequency change to a host based monitor. The host monitor itself uses > librte_power. > Each lcore channel corresponds to a > serial device '/dev/virtio-ports/virtio.serial.port.poweragent.' > which is opened in non-blocking mode. > While each Virtual CPU can be mapped to multiple physical CPUs it is > recommended that each vCPU should be mapped to a single core only. >=20 > 2)Host: The host monitor is managed by a CLI, it allows for adding qemu/= KVM > virtual machines and associated channels to the monitor, manually changi= ng > CPU frequency, inspecting the state of VMs, vCPU to pCPU pinning and > managing > channels. > Host channel endpoints are Virto-Serial endpoints configured as AF_UNIX = file > sockets which follow a specific naming convention > i.e /tmp/powermonitor/., > each channel has an 1:1 mapping to a VM endpoint > i.e. /dev/virtio-ports/virtio.serial.port.poweragent. > Host channel endpoints are opened in non-blocking mode and are monitored > via epoll. > Requests over each channel to change frequency are forwarded to the > original > librte_power. >=20 > Channels must be manually configured as qemu-kvm command line arguments > or > libvirt domain definition(xml) e.g. > >
> > > path=3D'/tmp/powermonitor/.'/> > /> >
'= /> > >=20 > Where multiple channels can be configured by specifying multiple > elements, by replacing , . > (port number) should be incremented by 1 for each new channel > element. > More information on Virtio-Serial can be found here: > http://fedoraproject.org/wiki/Features/VirtioSerial > To enable the Hypervisor creation of channels, the host endpoint director= y > must be created with qemu permissions: > mkdir /tmp/powermonitor > chown qemu:qemu /tmp/powermonitor >=20 > The host application runs on two separate lcores: > Core N) CLI: For management of Virtual Machines adding channels to Monito= r > thread, > inspecting state and manually setting CPU frequency [PATCH 02/09] > Core N+1) Monitor Thread: An epoll based infinite loop that waits on chan= nel > events > from VMs and calls the corresponding librte_power functions. >=20 > A sample application is also provided to run on Virtual Machines, this > application provides a CLI to manually set the frequency of a > vCPU[PATCH 08/09] >=20 > The current l3fwd-power sample application can also be run on a VM. >=20 > Changes in V2: > Runtime selection of librte_power implementations. > Updated Unit tests to cover librte_power changes. > PATCH[0/3] was sent twice, again as PATCH[0/4] > Miscellaneous fixes. >=20 > Alan Carew (10): > Channel Manager and Monitor for VM Power Management(Host). > VM Power Management CLI(Host). > CPU Frequency Power Management(Host). > VM Power Management application and Makefile. > VM Power Management CLI(Guest). > VM communication channels for VM Power Management(Guest). > librte_power common interface for Guest and Host > Packet format for VM Power Management(Host and Guest). > Build system integration for VM Power Management(Guest and Host) > VM Power Management Unit Tests >=20 > app/test/Makefile | 3 +- > app/test/autotest_data.py | 26 + > app/test/test_power.c | 445 ++------------ > app/test/test_power_acpi_cpufreq.c | 544 +++++++++++++++= ++ > app/test/test_power_kvm_vm.c | 308 ++++++++++ > examples/vm_power_manager/Makefile | 57 ++ > examples/vm_power_manager/channel_manager.c | 645 > +++++++++++++++++++++ > examples/vm_power_manager/channel_manager.h | 273 +++++++++ > examples/vm_power_manager/channel_monitor.c | 228 ++++++++ > examples/vm_power_manager/channel_monitor.h | 102 ++++ > examples/vm_power_manager/guest_cli/Makefile | 56 ++ > examples/vm_power_manager/guest_cli/main.c | 86 +++ > examples/vm_power_manager/guest_cli/main.h | 52 ++ > .../guest_cli/vm_power_cli_guest.c | 155 +++++ > .../guest_cli/vm_power_cli_guest.h | 55 ++ > examples/vm_power_manager/main.c | 113 ++++ > examples/vm_power_manager/main.h | 52 ++ > examples/vm_power_manager/power_manager.c | 244 ++++++++ > examples/vm_power_manager/power_manager.h | 186 ++++++ > examples/vm_power_manager/vm_power_cli.c | 568 > ++++++++++++++++++ > examples/vm_power_manager/vm_power_cli.h | 47 ++ > lib/librte_power/Makefile | 3 +- > lib/librte_power/channel_commands.h | 68 +++ > lib/librte_power/guest_channel.c | 162 ++++++ > lib/librte_power/guest_channel.h | 89 +++ > lib/librte_power/rte_power.c | 540 +++------------= -- > lib/librte_power/rte_power.h | 120 +++- > lib/librte_power/rte_power_acpi_cpufreq.c | 545 > +++++++++++++++++ > lib/librte_power/rte_power_acpi_cpufreq.h | 192 ++++++ > lib/librte_power/rte_power_common.h | 39 ++ > lib/librte_power/rte_power_kvm_vm.c | 160 +++++ > lib/librte_power/rte_power_kvm_vm.h | 179 ++++++ > 32 files changed, 5430 insertions(+), 912 deletions(-) > create mode 100644 app/test/test_power_acpi_cpufreq.c > create mode 100644 app/test/test_power_kvm_vm.c > create mode 100644 examples/vm_power_manager/Makefile > create mode 100644 examples/vm_power_manager/channel_manager.c > create mode 100644 examples/vm_power_manager/channel_manager.h > create mode 100644 examples/vm_power_manager/channel_monitor.c > create mode 100644 examples/vm_power_manager/channel_monitor.h > create mode 100644 examples/vm_power_manager/guest_cli/Makefile > create mode 100644 examples/vm_power_manager/guest_cli/main.c > create mode 100644 examples/vm_power_manager/guest_cli/main.h > create mode 100644 > examples/vm_power_manager/guest_cli/vm_power_cli_guest.c > create mode 100644 > examples/vm_power_manager/guest_cli/vm_power_cli_guest.h > create mode 100644 examples/vm_power_manager/main.c > create mode 100644 examples/vm_power_manager/main.h > create mode 100644 examples/vm_power_manager/power_manager.c > create mode 100644 examples/vm_power_manager/power_manager.h > create mode 100644 examples/vm_power_manager/vm_power_cli.c > create mode 100644 examples/vm_power_manager/vm_power_cli.h > create mode 100644 lib/librte_power/channel_commands.h > create mode 100644 lib/librte_power/guest_channel.c > create mode 100644 lib/librte_power/guest_channel.h > create mode 100644 lib/librte_power/rte_power_acpi_cpufreq.c > create mode 100644 lib/librte_power/rte_power_acpi_cpufreq.h > create mode 100644 lib/librte_power/rte_power_common.h > create mode 100644 lib/librte_power/rte_power_kvm_vm.c > create mode 100644 lib/librte_power/rte_power_kvm_vm.h >=20 > -- > 1.9.3