[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