lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Sun, 5 Nov 2006 17:36:41 +0100 (MET)
From:	Jan Engelhardt <jengelh@...ux01.gwdg.de>
To:	Jens Axboe <jens.axboe@...cle.com>
cc:	Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
	Sam Ravnborg <sam@...nborg.org>
Subject: menuconfig benchmark for if/endif vs depends-on



In response to http://lkml.org/lkml/2006/10/20/357 I did a poor-man's 
benchmark over whether

	(1) depends on BLOCK

	(2) if BLOCK/endif

is faster, and surprisingly,

	(1) 8.92s 8.90s 8.92s

	(2) 9.19s 9.21s 9.21s

came up.

This is the `generate` script used:

#!/bin/bash
ele=50000;
for((i = 0; i < $ele; ++i)); do
    echo -en "config V$i\n bool \"$i\"\n depends on BLOCK\n\n";
done >fs/big-thing1;
(
    echo -en "if BLOCK\n\n";
    for((i = 0; i < $ele; ++i)); do
        echo -en "config V$i\n bool \"$i\"\n\n";
    done;
    echo -en "endif\n\n";
) >fs/big-thing2;

One of the generated file would then be included in e.g. fs/Kconfig 
using a "source" statement.

This the patch:
Index: linux-2.6.19-rc4/scripts/kconfig/mconf.c
===================================================================
--- linux-2.6.19-rc4.orig/scripts/kconfig/mconf.c
+++ linux-2.6.19-rc4/scripts/kconfig/mconf.c
@@ -8,6 +8,7 @@
  * i18n, 2005, Arnaldo Carvalho de Melo <acme@...ectiva.com.br>
  */
 
+#include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/wait.h>
 #include <ctype.h>
@@ -858,6 +859,27 @@ static void conf_cleanup(void)
 	tcsetattr(1, TCSAFLUSH, &ios_org);
 }
 
+static void tv_delta(const struct timeval *past, const struct timeval *now,
+  struct timeval *dest)
+{
+    /* Calculates the time difference between "past" and "now" and stores the
+    result in "dest". All parameters in ┬Ás. */
+    unsigned long sec = now->tv_sec - past->tv_sec;
+    long acc = now->tv_usec - past->tv_usec;
+
+    if(acc < 0) {
+        // past: 1.5, now: 2.0, sec = 2 - 1 = 1, acc = 0 - 500000 = -500000;
+        dest->tv_sec = --sec;
+#define MICROSECOND 1000000
+        dest->tv_usec = MICROSECOND + acc;
+    } else {
+        dest->tv_sec = sec;
+        dest->tv_usec = acc;
+    }
+
+    return;
+}
+
 int main(int ac, char **av)
 {
 	struct symbol *sym;
@@ -868,9 +890,17 @@ int main(int ac, char **av)
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);
 
+        struct timeval tv_past, tv_now, tv_diff;
+        gettimeofday(&tv_past, NULL);
+
 	conf_parse(av[1]);
 	conf_read(NULL);
 
+        gettimeofday(&tv_now, NULL);
+        tv_delta(&tv_past, &tv_now, &tv_diff);
+        printf("Parse time took %ld.%06ld\n", tv_diff.tv_sec, tv_diff.tv_usec);
+        exit(0);
+
 	sym = sym_lookup("KERNELVERSION", 0);
 	sym_calc_value(sym);
 	sprintf(menu_backtitle, _("Linux Kernel v%s Configuration"),
#<EOF>


	-`J'
-- 

Powered by blists - more mailing lists