From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 66F3BA0588; Thu, 16 Apr 2020 13:48:42 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4E3E11DBDE; Thu, 16 Apr 2020 13:48:42 +0200 (CEST) Received: from mail-io1-f68.google.com (mail-io1-f68.google.com [209.85.166.68]) by dpdk.org (Postfix) with ESMTP id 32C6E1DB4F for ; Thu, 16 Apr 2020 13:48:41 +0200 (CEST) Received: by mail-io1-f68.google.com with SMTP id w20so20696425iob.2 for ; Thu, 16 Apr 2020 04:48:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=rVJ7gSPtY1fl9Z2jmGXBzQCXNMsYibf3+Yugy3C8Y2s=; b=tc9Rt55aElt0mmDKseNUqJ7xhJN2oVfqlHpog1RPbAH9cQzxM+FK7qT4cZmGprrouz UUx/9CYUcjigWUAeW09tNbeDwc5/ykw/lGj+x9eCJSTMt4jo0EbZHWAe+lGkUht7UCps Dr1kalP5IyOy8E2bumwyeIvVG9MC0w3k88c5i79NcQOpI1O39a8HSWe4c/WmmmrlI/b+ rEnJgjMoUkuJTlItA+EAvpOXWw0kBtimClCPsLZqy5OzUlqKbQFpvcZMrmjkfZkhYcpk CQ15Aig9+xhQEHtlFQ+wsCGXVwqZuZCcAxXQLajj0FpYhgk4D088dUZR9pBKgOMNbwlj YvuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=rVJ7gSPtY1fl9Z2jmGXBzQCXNMsYibf3+Yugy3C8Y2s=; b=iqJ14LkSNKhCQzaTqtOUj+GzrUTiNL7hqn60BJMWxrUpN1kgSjFgPmOFwYUQd070el w88dFsRJ4soQ2I3nVg5vphSUJCKl6FW7tkaSDM1a+0tPoty2Mma+3xhjHte64QWUjH8i DZPTGFb2vW65/JftZZZ1+MJ5L3xcAsaSf2UV3FVfhHPeBNNJtfREdLlamV6UmkDuBrSL muGOhcNsFFtfLQm9u9VIlbblbIIdubGUKqLhlUOT7IUwiGg1IN7ouzvM4l8/eAAeBaiH B1DTPf1OoztOkyEdlvF6tsnNKP70sk+hNYthlsp+xrUHnMPOU5uJm9+RjqSYVlS6TE8O sqiQ== X-Gm-Message-State: AGi0PuYYaSjzpKh09RYcPPo94jzqO2YHJrDieB0DPj3MJYxnZdiS1Ngd /lDn4DYHHyWn+DJU3253jwofwjoR1AEVbztOg3A= X-Google-Smtp-Source: APiQypJv9r/ljj7pWFwO5FOz0aRHnLk9yNfrDy+erPjzmxacDePE6T2hW6ToMUAluoaG01nPqllZbQFE7JwHdTRt85Q= X-Received: by 2002:a5e:9806:: with SMTP id s6mr5137170ioj.59.1587037720478; Thu, 16 Apr 2020 04:48:40 -0700 (PDT) MIME-Version: 1.0 References: <20200415231119.27845-1-dg@adax.com> <2114f9a2-bda4-4796-7872-bf21f7e9f327@ericsson.com> In-Reply-To: <2114f9a2-bda4-4796-7872-bf21f7e9f327@ericsson.com> From: Jerin Jacob Date: Thu, 16 Apr 2020 17:18:24 +0530 Message-ID: To: =?UTF-8?Q?Mattias_R=C3=B6nnblom?= Cc: Dan Gora , Thomas Monjalon , David Marchand , dpdk-dev , Gavin Hu , Honnappa Nagarahalli Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-dev] [PATCH] eal: choose initial PRNG seed source at runtime X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Thu, Apr 16, 2020 at 5:06 PM Mattias R=C3=B6nnblom wrote: > > On 2020-04-16 08:07, Jerin Jacob wrote: > > On Thu, Apr 16, 2020 at 4:42 AM Dan Gora wrote: > >> Instead of choosing to use getentropy() or the rdseed instruction for > >> the random number generator entropy source using compilation flags, > >> determine the best source at run time. > >> > >> This is accomplished by defining a weak symbol for getentropy(), > >> checking that the compiler can generate the rdseed instruction even if > >> the compilation platform does not natively support it, and checking fo= r > >> the availability of the rdseed instruction on the execution platform > >> using rte_cpu_get_flag_enabled(). > >> > >> If neither getentropy() or rdseed is available, rte_get_timer_cycles() > >> will be continue to be used as the entropy source. > >> > >> This also allows non-Mason builds to use getentropy(). > >> > >> Signed-off-by: Dan Gora > >> --- > >> config/x86/meson.build | 7 +++++++ > >> lib/librte_eal/common/rte_random.c | 29 ++++++++++++++++++++++++----= - > >> lib/librte_eal/meson.build | 3 --- > >> mk/rte.cpuflags.mk | 8 ++++++++ > >> 4 files changed, 39 insertions(+), 8 deletions(-) > >> > >> diff --git a/config/x86/meson.build b/config/x86/meson.build > >> index adc857ba2..214b16f2a 100644 > >> --- a/config/x86/meson.build > >> +++ b/config/x86/meson.build > >> @@ -20,6 +20,13 @@ if cc.get_define('__SSE4_2__', args: machine_args) = =3D=3D '' > >> machine_args +=3D '-msse4' > >> endif > >> > >> +# set -mrdseed if necessary so _rdseed32_step compiles if the > >> +# compilation host does not support the RDSEED instruction. > >> +if cc.get_define('__RDSEED__', args: machine_args) =3D=3D '' and cc.h= as_argument('-mrdseed') > >> + machine_args +=3D '-mrdseed' > >> + message('RDSEED not enabled by default, explicitly setting -mr= dseed') > >> +endif > >> + > >> base_flags =3D ['SSE', 'SSE2', 'SSE3','SSSE3', 'SSE4_1', 'SSE4_2'] > >> foreach f:base_flags > >> dpdk_conf.set('RTE_MACHINE_CPUFLAG_' + f, 1) > >> diff --git a/lib/librte_eal/common/rte_random.c b/lib/librte_eal/commo= n/rte_random.c > >> index 57ec8fb2b..40f8b5aab 100644 > >> --- a/lib/librte_eal/common/rte_random.c > >> +++ b/lib/librte_eal/common/rte_random.c > >> @@ -25,6 +25,8 @@ struct rte_rand_state { > >> > >> static struct rte_rand_state rand_states[RTE_MAX_LCORE]; > >> > >> +__rte_weak int getentropy(void *__buffer, size_t __length); > >> + > >> static uint32_t > >> __rte_rand_lcg32(uint32_t *seed) > >> { > >> @@ -176,10 +178,24 @@ rte_rand_max(uint64_t upper_bound) > >> return res; > >> } > >> > >> +/* Use rte_get_timer_cycles() if the system does not have > >> + * genentropy() or the rdseed instruction. > >> + */ > >> +__rte_weak int > >> +getentropy(void *__buffer, size_t __length __rte_unused) > >> +{ > >> + uint64_t *ge_seed =3D __buffer; > >> +#ifdef RTE_MACHINE_CPUFLAG_RDSEED > >> + if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_RDSEED)) > >> + return -1; > >> +#endif > >> + *ge_seed =3D rte_get_timer_cycles(); > >> + return 0; > > IMO, we need to create a new arch EAL abstraction to get uint64_t > > random number. Reason being: > > 1) ARMv8.5 supports similar instruction > > https://developer.arm.com/docs/ddi0595/c/aarch64-system-registers/rndr > > > How many ARMv8.5 system will there be running a libc older than 2.25 or > a Linux kernel older than 3.17? Probably none. > > > > 2) Avoid #ifdef clutter in common code. > > > > Abstraction can return a random uint64_t number. Based on the arch > > capabilities, it can hook > > to specialized instruction or rte_get_timer_cycles()