nice, ok

Claudio Jeker(cje...@diehard.n-r-g.com) on 2020.01.09 16:25:58 +0100:
> The path_hash function is called reasonably often. Calling
> SipHash24_Update() over and over for small data is not optimal.
> Inspired by /sys/sys/proc.h add a aspath_hashstart and aspath_hashend to
> the struct rde_aspath and use that for the hash.
> 
> -- 
> :wq Claudio
> 
> Index: rde.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/rde.h,v
> retrieving revision 1.230
> diff -u -p -r1.230 rde.h
> --- rde.h     9 Jan 2020 13:31:52 -0000       1.230
> +++ rde.h     9 Jan 2020 15:12:47 -0000
> @@ -215,14 +215,16 @@ struct rde_aspath {
>       struct attr                     **others;
>       struct aspath                   *aspath;
>       u_int64_t                        hash;
> +     int                              refcnt;
>       u_int32_t                        flags;         /* internally used */
> +#define      aspath_hashstart        med
>       u_int32_t                        med;           /* multi exit disc */
>       u_int32_t                        lpref;         /* local pref */
>       u_int32_t                        weight;        /* low prio lpref */
> -     int                              refcnt;
>       u_int16_t                        rtlabelid;     /* route label id */
>       u_int16_t                        pftableid;     /* pf table id */
>       u_int8_t                         origin;
> +#define      aspath_hashend          others_len
>       u_int8_t                         others_len;
>  };
>  
> Index: rde_rib.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/rde_rib.c,v
> retrieving revision 1.212
> diff -u -p -r1.212 rde_rib.c
> --- rde_rib.c 9 Jan 2020 11:55:25 -0000       1.212
> +++ rde_rib.c 9 Jan 2020 15:14:27 -0000
> @@ -701,12 +701,8 @@ path_hash(struct rde_aspath *asp)
>       u_int64_t       hash;
>  
>       SipHash24_Init(&ctx, &pathtablekey);
> -     SipHash24_Update(&ctx, &asp->origin, sizeof(asp->origin));
> -     SipHash24_Update(&ctx, &asp->med, sizeof(asp->med));
> -     SipHash24_Update(&ctx, &asp->lpref, sizeof(asp->lpref));
> -     SipHash24_Update(&ctx, &asp->weight, sizeof(asp->weight));
> -     SipHash24_Update(&ctx, &asp->rtlabelid, sizeof(asp->rtlabelid));
> -     SipHash24_Update(&ctx, &asp->pftableid, sizeof(asp->pftableid));
> +     SipHash24_Update(&ctx, &asp->aspath_hashstart,
> +         (char *)&asp->aspath_hashend - (char *)&asp->aspath_hashstart);
>  
>       if (asp->aspath)
>               SipHash24_Update(&ctx, asp->aspath->data, asp->aspath->len);
> 

Reply via email to