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
| ||
|
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