DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jan Viktorin <viktorin@rehivetech.com>
To: Thomas Monjalon <thomas.monjalon@6wind.com>,
	David Hunt <david.hunt@intel.com>,
	dev@dpdk.org
Subject: [dpdk-dev] [PATCH v2 00/16] Support ARMv7 architecture
Date: Mon, 26 Oct 2015 17:37:22 +0100	[thread overview]
Message-ID: <1445877458-31052-1-git-send-email-viktorin@rehivetech.com> (raw)

Hello DPDK community, Thomas, Dave,

here I propose the second version of the ARM support patch series. I've included
some ideas from Dave's patch. There are no big changes to the original series.

Important:

* The timer issue has now 2 solutions, the user may configure to use PMU counter
  or the clock_gettime API. The PMU counter may however break perf or other tools
  using the PMU Linux API. This is the reason why I did not make it the default.
  Also, I didn't include the Linux Kernel module that enables the PMU for userspace.
  There is a note in the rte_cycles.h about it. You should know what you are doing
  if you use that, so you may also write that simple driver or get from the Dave's
  patch. Later, we can integrate it, after we have some real PMD driver (and some
  supporting Linux Kernel module infra...).

* There is the NEON implementation of memcpy. It is faster then the native one
  (you can see stats in the patch), however, we must be sure, the target CPU contains
  the NEON co-processor. Also, for longer data lengths and ARM SoCs, the NEON memcpy
  implementation can be much slower then the native one. So this is again configurable.

* The cpuflags now contains the best from my and Dave's patchs.

* ACL build is broken. I've included a patch (16) that just prevents to pass -msse4.1
  into gcc if it does not support it. But that does not solve the whole issue.

* LPM build is broken unless you apply the patch 15. However, this is not the right
  solution and I provided just to have a workaround. I don't expect to merge it.

* I've added myself to the MAINTAINERS. Dave, would I like to be there as well?

* The Cortex A7, A8, A9 cores are non-LPAE (non Large Physical Address Extension)
  and thus there is no upstream support for huge pages in the Linux Kernel. It sounds
  like useless for devices with max 4 GB of RAM (usually 0.5-2 GB). However, our
  measurements have shown that it improve performance. A patch is somewhere deep in
  the kernel.org mailing lists.

* Only the GCC toolchain is considered at the moment.

Other details are included in each individual commit.

---

You can pull the changes from

  https://github.com/RehiveTech/dpdk.git arm-support-v2

since commit d08d304508a8a8caf255baf622ab65db1fec952c:

  eal/linux: make alarm not affected by system time jump (2015-10-21 17:01:24 +0200)

up to 57396c958571b651b4d14f90683b3d1b2d42a70e:

  acl: check for SSE 4.1 support (2015-10-26 17:29:36 +0100)

---

Regards
Jan Viktorin

Jan Viktorin (7):
  eal/arm: implement rdtsc by PMU or clock_gettime
  eal/arm: use vector memcpy only when NEON is enabled
  eal/arm: detect arm architecture in cpu flags
  eal/arm: rwlock support for ARM
  gcc/arm: avoid alignment errors to break build
  maintainers: claim responsibility for ARMv7
  acl: check for SSE 4.1 support

Vlastimil Kosar (9):
  mk: Introduce ARMv7 architecture
  eal/arm: atomic operations for ARM
  eal/arm: byte order operations for ARM
  eal/arm: cpu cycle operations for ARM
  eal/arm: prefetch operations for ARM
  eal/arm: spinlock operations for ARM (without HTM)
  eal/arm: vector memcpy for ARM
  eal/arm: cpu flag checks for ARM
  lpm/arm: implement rte_lpm_lookupx4 using rte_lpm_lookup_bulk on
    for-x86

 MAINTAINERS                                        |   4 +
 app/test/test_cpuflags.c                           |   5 +
 config/defconfig_arm-armv7-a-linuxapp-gcc          |  75 +++++
 lib/librte_acl/Makefile                            |   4 +
 .../common/include/arch/arm/rte_atomic.h           | 256 ++++++++++++++++
 .../common/include/arch/arm/rte_byteorder.h        | 148 ++++++++++
 .../common/include/arch/arm/rte_cpuflags.h         | 192 ++++++++++++
 .../common/include/arch/arm/rte_cycles.h           | 121 ++++++++
 .../common/include/arch/arm/rte_memcpy.h           | 325 +++++++++++++++++++++
 .../common/include/arch/arm/rte_prefetch.h         |  61 ++++
 .../common/include/arch/arm/rte_rwlock.h           |  40 +++
 .../common/include/arch/arm/rte_spinlock.h         | 114 ++++++++
 lib/librte_lpm/rte_lpm.h                           |  71 +++++
 mk/arch/arm/rte.vars.mk                            |  39 +++
 mk/machine/armv7-a/rte.vars.mk                     |  60 ++++
 mk/rte.cpuflags.mk                                 |   6 +
 mk/toolchain/gcc/rte.vars.mk                       |   6 +
 17 files changed, 1527 insertions(+)
 create mode 100644 config/defconfig_arm-armv7-a-linuxapp-gcc
 create mode 100644 lib/librte_eal/common/include/arch/arm/rte_atomic.h
 create mode 100644 lib/librte_eal/common/include/arch/arm/rte_byteorder.h
 create mode 100644 lib/librte_eal/common/include/arch/arm/rte_cpuflags.h
 create mode 100644 lib/librte_eal/common/include/arch/arm/rte_cycles.h
 create mode 100644 lib/librte_eal/common/include/arch/arm/rte_memcpy.h
 create mode 100644 lib/librte_eal/common/include/arch/arm/rte_prefetch.h
 create mode 100644 lib/librte_eal/common/include/arch/arm/rte_rwlock.h
 create mode 100644 lib/librte_eal/common/include/arch/arm/rte_spinlock.h
 create mode 100644 mk/arch/arm/rte.vars.mk
 create mode 100644 mk/machine/armv7-a/rte.vars.mk

-- 
2.6.1

             reply	other threads:[~2015-10-26 16:39 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-26 16:37 Jan Viktorin [this message]
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 01/16] mk: Introduce " Jan Viktorin
2015-10-28 13:34   ` David Marchand
2015-10-28 17:32     ` Jan Viktorin
2015-10-28 17:36       ` Richardson, Bruce
2015-10-28 13:39   ` David Marchand
2015-10-28 17:32     ` Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 02/16] eal/arm: atomic operations for ARM Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 03/16] eal/arm: byte order " Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 04/16] eal/arm: cpu cycle " Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 05/16] eal/arm: implement rdtsc by PMU or clock_gettime Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 06/16] eal/arm: prefetch operations for ARM Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 07/16] eal/arm: spinlock operations for ARM (without HTM) Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 08/16] eal/arm: vector memcpy for ARM Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 09/16] eal/arm: use vector memcpy only when NEON is enabled Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 10/16] eal/arm: cpu flag checks for ARM Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 11/16] eal/arm: detect arm architecture in cpu flags Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 12/16] eal/arm: rwlock support for ARM Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 13/16] gcc/arm: avoid alignment errors to break build Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 14/16] maintainers: claim responsibility for ARMv7 Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 15/16] lpm/arm: implement rte_lpm_lookupx4 using rte_lpm_lookup_bulk on for-x86 Jan Viktorin
2015-10-27 15:31   ` Ananyev, Konstantin
2015-10-27 15:38     ` Jan Viktorin
2015-10-26 16:37 ` [dpdk-dev] [PATCH v2 16/16] acl: check for SSE 4.1 support Jan Viktorin
2015-10-27 15:55   ` Ananyev, Konstantin
2015-10-27 17:10     ` Jan Viktorin
2015-10-27 19:13 ` [dpdk-dev] [PATCH v3 00/17] Support ARMv7 architecture Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 01/17] mk: Introduce " Jan Viktorin
2015-10-28 10:09     ` David Marchand
2015-10-28 10:56       ` Jan Viktorin
2015-10-28 13:40         ` David Marchand
2015-10-28 13:44         ` Hunt, David
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 02/17] eal/arm: atomic operations for ARM Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 03/17] eal/arm: byte order " Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 04/17] eal/arm: cpu cycle " Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 05/17] eal/arm: implement rdtsc by PMU or clock_gettime Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 06/17] eal/arm: prefetch operations for ARM Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 07/17] eal/arm: spinlock operations for ARM (without HTM) Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 08/17] eal/arm: vector memcpy for ARM Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 09/17] eal/arm: use vector memcpy only when NEON is enabled Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 10/17] eal/arm: cpu flag checks for ARM Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 11/17] eal/arm: detect arm architecture in cpu flags Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 12/17] eal/arm: rwlock support for ARM Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 13/17] gcc/arm: avoid alignment errors to break build Jan Viktorin
2015-10-28 12:16     ` David Marchand
2015-10-28 17:34       ` Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 14/17] maintainers: claim responsibility for ARMv7 Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 15/17] eal/arm: add very incomplete rte_vect Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 16/17] lpm/arm: implement rte_lpm_lookupx4 using rte_lpm_lookup_bulk for non-x86 Jan Viktorin
2015-10-27 19:13   ` [dpdk-dev] [PATCH v3 17/17] acl: handle when SSE 4.1 is unsupported Jan Viktorin
2015-10-28 14:54   ` [dpdk-dev] [PATCH v3 00/17] Support ARMv7 architecture David Marchand
2015-10-28 17:38     ` Jan Viktorin
2015-10-28 17:58       ` David Marchand
2015-10-29 14:02         ` Thomas Monjalon
2015-10-29 14:09           ` Jan Viktorin
2015-10-29 15:02             ` Thomas Monjalon
2015-10-29 12:43   ` [dpdk-dev] [PATCH v4 00/15] " Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 01/15] eal/arm: atomic operations for ARM Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 02/15] eal/arm: byte order " Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 03/15] eal/arm: cpu cycle " Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 04/15] eal/arm: implement rdtsc by PMU or clock_gettime Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 05/15] eal/arm: prefetch operations for ARM Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 06/15] eal/arm: spinlock operations for ARM (without HTM) Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 07/15] eal/arm: vector memcpy for ARM Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 08/15] eal/arm: use vector memcpy only when NEON is enabled Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 09/15] eal/arm: cpu flag checks for ARM Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 10/15] eal/arm: detect arm architecture in cpu flags Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 11/15] eal/arm: rwlock support for ARM Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 12/15] eal/arm: add very incomplete rte_vect Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 13/15] gcc/arm: avoid alignment errors to break build Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 14/15] mk: Introduce ARMv7 architecture Jan Viktorin
2015-10-29 12:43     ` [dpdk-dev] [PATCH v4 15/15] maintainers: claim responsibility for ARMv7 Jan Viktorin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1445877458-31052-1-git-send-email-viktorin@rehivetech.com \
    --to=viktorin@rehivetech.com \
    --cc=david.hunt@intel.com \
    --cc=dev@dpdk.org \
    --cc=thomas.monjalon@6wind.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).