[ovs-dev] [PATCH 06/10] lib: Add prefetch support (for GCC)

Ethan Jackson ethan at nicira.com
Fri Apr 25 00:55:30 UTC 2014


I think there should be a comment explaining when to use prefetch vs
prefetch_write.  I certainly don't know off the top of my head.

Acked-by: Ethan Jackson <ethan at nicira.com>


On Fri, Apr 18, 2014 at 12:41 PM, Jarno Rajahalme <jrajahalme at nicira.com> wrote:
> Define OVS_PREFETCH() and OVS_PREFETCH_WRITE() using builtin prefetch
> for GCC, and ovs_prefetch_range() for prefetching a range of addresses.
>
> Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
> ---
>  lib/compiler.h |    8 ++++++++
>  lib/util.h     |   14 ++++++++++++++
>  2 files changed, 22 insertions(+)
>
> diff --git a/lib/compiler.h b/lib/compiler.h
> index 3b59813..981605c 100644
> --- a/lib/compiler.h
> +++ b/lib/compiler.h
> @@ -206,4 +206,12 @@
>      static void f(void)
>  #endif
>
> +#if __GNUC__
> +#define OVS_PREFETCH(addr) __builtin_prefetch((addr))
> +#define OVS_PREFETCH_WRITE(addr) __builtin_prefetch((addr), 1)
> +#else
> +#define OVS_PREFETCH(addr)
> +#define OVS_PREFETCH_WRITE(addr)
> +#endif
> +
>  #endif /* compiler.h */
> diff --git a/lib/util.h b/lib/util.h
> index aff17a5..5c3668a 100644
> --- a/lib/util.h
> +++ b/lib/util.h
> @@ -151,6 +151,19 @@ is_pow2(uintmax_t x)
>  #define CACHE_LINE_SIZE 64
>  BUILD_ASSERT_DECL(IS_POW2(CACHE_LINE_SIZE));
>
> +#define CACHE_LINE_SIZE 64      /* Correct for most CPUs. */
> +
> +static inline void
> +ovs_prefetch_range(const void *start, size_t size)
> +{
> +    const char *addr = (const char *)start;
> +    size_t ofs;
> +
> +    for (ofs = 0; ofs < size; ofs += CACHE_LINE_SIZE) {
> +        OVS_PREFETCH(addr + ofs);
> +    }
> +}
> +
>  #ifndef MIN
>  #define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
>  #endif
> @@ -503,6 +516,7 @@ uint64_t bitwise_get(const void *src, unsigned int src_len,
>                       unsigned int src_ofs, unsigned int n_bits);
>
>  void xsleep(unsigned int seconds);
> +
>  #ifdef _WIN32
>
>  char *ovs_format_message(int error);
> --
> 1.7.10.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list