On Fri, Aug 18, 2006 at 01:29:01PM +0200, Jan-Bernd Themann wrote:

Was there noticeable performance difference when explicit prefetching is
removed? At some (invisible) point CPUs will become smarter about prefetching
than programmers and this code will be slower than possible.

> +static inline struct sk_buff *get_skb_by_index(struct sk_buff **skb_array,
> +                                            int arr_len,
> +                                            struct ehea_cqe *cqe)
> +{
> +     struct sk_buff *skb;
> +     void *pref;
> +     int x;
> +     int skb_index = EHEA_BMASK_GET(EHEA_WR_ID_INDEX, cqe->wr_id);
> +
> +     x = skb_index + 1;
> +     x &= (arr_len - 1);
> +
> +     pref = (void*)skb_array[x];
> +     prefetchw(pref);
> +     prefetchw(pref + EHEA_CACHE_LINE);
> +
> +     pref = (void*)(skb_array[x]->data);
> +     prefetch(pref);
> +     prefetch(pref + EHEA_CACHE_LINE);
> +     prefetch(pref + EHEA_CACHE_LINE * 2);
> +     prefetch(pref + EHEA_CACHE_LINE * 3);
> +     skb = skb_array[skb_index];
> +     skb_array[skb_index] = NULL;
> +     return skb;
> +}
> +
> +static inline struct sk_buff *get_skb_by_index_ll(struct sk_buff **skb_array,
> +                                               int arr_len, int wqe_index)
> +{
> +     struct sk_buff *skb;
> +     void *pref;
> +     int x;
> +
> +     x = wqe_index + 1;
> +     x &= (arr_len - 1);
> +
> +     pref = (void*)skb_array[x];
> +     prefetchw(pref);
> +     prefetchw(pref + EHEA_CACHE_LINE);
> +
> +     pref = (void*)(skb_array[x]->data);
> +     prefetchw(pref);
> +     prefetchw(pref + EHEA_CACHE_LINE);
> +
> +     skb = skb_array[wqe_index];
> +     skb_array[wqe_index] = NULL;
> +     return skb;
> +}

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to