[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#6658: [PATCH] randread: don't require -lrt
From: |
Paul Eggert |
Subject: |
bug#6658: [PATCH] randread: don't require -lrt |
Date: |
Fri, 16 Jul 2010 14:17:42 -0700 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.10) Gecko/20100527 Thunderbird/3.0.5 |
In looking at the random part of coreutils some more, I see some
issues.
1. Apps that use random numbers typically must link to -lrt,
for a very small benefit (nanosecond resolution rather than
microsecond resolution time stamp for random seed). Often
this "benefit" is illusory as the time stamps really are not
nanosecond resolution.
2. If /dev/urandom is available, it should be used to seed
the ISAAC generator. This will cost more than invoking
gettimeofday() but it's far more random.
3. We could get about 2X CPU performance on 64-bit machines by using
ISAAC64 instead of ISAAC.
The patch below implements (1); I haven't installed it. I'd like to
do (2) and (3) too, but thought I'd ask for feedback first.
>From aa279ddf6d766ca8f280295632d14cfbf4926c5b Mon Sep 17 00:00:00 2001
From: Paul R. Eggert <address@hidden>
Date: Fri, 16 Jul 2010 14:02:08 -0700
Subject: [PATCH] randread: don't require -lrt
Programs like 'sort' were linking to -lrt in order to get
clock_gettime, but this was misguided: it wasted considerable
resources while gaining at most 10 bits of entropy. Almost nobody
needs the entropy, and there are better ways to get much better
entropy for people who do need it.
* gl/lib/rand-isaac.c (isaac_seed): Include <sys/time.h> not
"gethrxtime.h".
(isaac_seed): Use gettimeofday rather than gethrxtime.
* gl/modules/randread (Depends-on): Depend on gettimeofday
and not gethrxtime.
* src/Makefile.am (mktemp_LDADD, shred_LDADD, shuf_LDADD, sort_LDADD):
(tac_LDADD): Omit $(LIB_GETHRXTIME); no longer needed.
---
gl/lib/rand-isaac.c | 6 +++---
gl/modules/randread | 2 +-
src/Makefile.am | 7 +------
3 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/gl/lib/rand-isaac.c b/gl/lib/rand-isaac.c
index 52d53a3..377caa6 100644
--- a/gl/lib/rand-isaac.c
+++ b/gl/lib/rand-isaac.c
@@ -35,10 +35,9 @@
#include "rand-isaac.h"
#include <string.h>
+#include <sys/time.h>
#include <unistd.h>
-#include "gethrxtime.h"
-
/* This index operation is more efficient on many processors */
#define ind(mm, x) \
@@ -292,7 +291,8 @@ isaac_seed (struct isaac_state *s)
{ gid_t t = getgid (); ISAAC_SEED (s, t); }
{
- xtime_t t = gethrxtime ();
+ struct timeval t;
+ gettimeofday (&t, NULL);
ISAAC_SEED (s, t);
}
diff --git a/gl/modules/randread b/gl/modules/randread
index 9870cc8..efc7958 100644
--- a/gl/modules/randread
+++ b/gl/modules/randread
@@ -11,7 +11,7 @@ Depends-on:
error
exitfail
fopen-safer
-gethrxtime
+gettimeofday
quotearg
stdbool
stdint
diff --git a/src/Makefile.am b/src/Makefile.am
index d87fbb5..1a19fa6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -328,13 +328,8 @@ ls_LDADD += $(LIB_CLOCK_GETTIME)
pr_LDADD += $(LIB_CLOCK_GETTIME)
touch_LDADD += $(LIB_CLOCK_GETTIME)
-# for gethrxtime, randint, randread, gen_tempname, mkstemp
+# for gethrxtime
dd_LDADD += $(LIB_GETHRXTIME)
-mktemp_LDADD += $(LIB_GETHRXTIME)
-shred_LDADD += $(LIB_GETHRXTIME)
-shuf_LDADD += $(LIB_GETHRXTIME)
-sort_LDADD += $(LIB_GETHRXTIME)
-tac_LDADD += $(LIB_GETHRXTIME)
# for cap_get_file
ls_LDADD += $(LIB_CAP)
--
1.7.1