Fórum Ubuntu CZ/SK
Ostatní => Archiv => Téma založeno: nettezzaumana 08 Ledna 2008, 10:20:32
-
Fujtajbl vespolek::
udelal jsem nesmirne zajimave (alespon pro me) zjisteni::
sed ma na mem pocitaci cca 15x rychlejsi vyhledavaci algoritmus nez grep ..
muzete vyzkouset (u me)::
-------------------------------------------------------------------------------
$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
real 0m1.492s
user 0m1.444s
sys 0m0.056s // vyhledavani pomoci sedu -- zjistujeme pocet polozek zobrazitelnych prikazem man, vyhledavame '\.gz$'
$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
real 0m22.253s
user 0m22.005s
sys 0m0.196s // vyhledavani pomoci grepu
$ perl -e '$HEH = 22.253 / 1.429; print $HEH."\n";' // spocitame si kolikrat jsme rychlejsi se sedem
15.5724282715185 // uff. nechci se opakovat, ale 15x me dostava
-------------------------------------------------------------------------------
Vyse uvedene prikazy by mely byt naprosto totozne -- v obou vyhledavame vyrazz '\.gz$' mezi manpagema ..
Vystup z prikazu by melo byt cislo, reprezentujici pocet polozek zobrazitelnych prikazem 'man'
Ja mam nainstalovano spousta -dev balicku, takze u me je to cislo relativne velike (11631).
Zajimalo by me, jestli mi i Vy ostatni potvrdite, ze onen vyhledavaci algoritmus v sedu je tolikrat (!15x)
rychlejsi nez v grepu ..
Muj system::
openSuSE 10.3 32bit, kernel 2.6.22.13-0.3-default
GNU grep version 2.5.2
GNU sed version 4.1.5
zdravi ntz
ps.:: zkusil jsem to same s vyrazy::
-------------------------------------------------------------------------------
$ echo $(find /usr/src/linux-2.6.22.13-0.3 | sed '/\.c$/!d') &>/dev/null & time wait
real 0m1.532s
user 0m1.500s
sys 0m0.180s // vyhledavame sedem vsechny '\.c$' ve zdrojacich jadra
$ echo $(find /usr/src/linux-2.6.22.13-0.3 | egrep '\.c$') &>/dev/null & time wait
real 0m21.108s
user 0m21.033s
sys 0m0.136s // vyhledavame grepem vsechny '\.c$' ve zdrojacich jadra
$ perl -e '$FUJ = 21.108 / 1.532; print $FUJ."\n";'
13.7780678851175 // uff. 13x je taky slusny..
$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null` & time wait
real 0m2.072s
user 0m1.064s
sys 0m0.992s // ted pro zmenu ziskavame komentare z /etc/init.d
$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null` & time wait
real 0m14.970s
user 0m13.777s
sys 0m1.096s
$ perl -e '$FUJ = 14.970 / 2.072; print $FUJ."\n";'
7.22490347490348 // 7x rychlejsi pri praci se skutecnymi soubory
-------------------------------------------------------------------------------
.. a jak vidite sami, o5 podobny vysledek .. po tomto zjisteni tedy budu na filtrovani pouzivat zasadne sed, protoze me nove heslo jest::
GNU grep sucks.. // 10-15x rychlejsi sed me skutecne prekvapil
pps.:: a co na to treba rychlost startu systemu(init skripty) a potazmo jan tleskac?
ad.2)
$ echo $(count=0; for x in $(for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/\<e\?grep\>/!d' $x; fi; done); do count=$(($count + 1)); done && echo $count)
sed: can't read /etc/init.d/spamd: Permission denied
1912 // as you can see, this scary command returns, that grep is used in /etc/init.d in 1912 cases -- & i presume, that in most of them
(likely very close to all of them) as a filter (& anyway, for what else should be used?)..
-
hmm ja mam teda opacnou zkusenost...
ufaak@notysek:~$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
[1] 7432
6236
[1]+ Done echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count)
real 0m1.040s
user 0m0.332s
sys 0m0.052s
ufaak@notysek:~$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
[1] 7437
6236
[1]+ Done echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count)
real 0m0.935s
user 0m0.312s
sys 0m0.024s
ufaak@notysek:~$ perl -e '$HEH = 0.935 / 1.040; print $HEH."\n";'
0.899038461538462
-
4 ufaak >> hmm. no to je teda dost zajimavy..
dik za odpoved
-
prosim, nemohl by jsi (nemohli by jste) to provest jako ufaak, ale udelat mi (mate -li napr. zdrojaky jadra -- a nebo ty komentare z z /etc/init.d) a postnout sem vypis::
(klidne bez vypoctu v perlu) ..
delam pro Linuxovou firmu a tohle bych rad doresil .. ps. pokud na zaver pridate vypis z ::
$ uname -r
$ grep -V
$ sed --version
budete uplne genialni -- tohle totiz vypada jako bug basesystemu .. uz jsem to postnul svym byvalym kolegum do suse.cz aka::
Hallo guys..
I made very exciting ascertainment :: // at least for me ;)
text filtering algorithm in sed is much more (!!7-15 times) faster than in grep..
just try as me::
-------------------------------------------------------------------------------
$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
real 0m1.492s
user 0m1.444s
sys 0m0.056s // let's calculate count of by man command accessible items
$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
real 0m22.253s
user 0m22.005s
sys 0m0.196s
$ perl -e '$HEH = 22.253 / 1.429; print $HEH."\n";'
15.5724282715185 // uff.. i can't believe..
$ echo $(find /usr/src/linux-2.6.22.13-0.3 | sed '/\.c$/!d') &>/dev/null & time wait
real 0m1.532s
user 0m1.500s
sys 0m0.180s // looking for '\.c$' ending files in linux source
$ echo $(find /usr/src/linux-2.6.22.13-0.3 | egrep '\.c$') &>/dev/null & time wait
real 0m21.108s
user 0m21.033s
sys 0m0.136s
$ perl -e '$FUJ = 21.108 / 1.532; print $FUJ."\n";'
13.7780678851175 // "uff.." secondly
$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null` & time wait
real 0m2.072s
user 0m1.064s
sys 0m0.992s // let's obtain comments from /etc/init.d
$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null` & time wait
real 0m14.970s
user 0m13.777s
sys 0m1.096s
$ perl -e '$FUJ = 14.970 / 2.072; print $FUJ."\n";'
7.22490347490348 // seven times faster while working with real files? --still not so bad
-----------------------------------------------------------------------------------
in all examples we are looking for RE via $(sed '/RE/!d') and $(grep -E 'RE')..
& results fundamentally differ
My system::
openSuSE 10.3 32bit, kernel 2.6.22.13-0.3-default
GNU grep version 2.5.2
GNU sed version 4.1.5 // hopefully fully updated
<b>what about globally substitute filtering algorithm in init scripts?
it should generally burst up system boot time.
so. let's become in real::
grep should suck no more!</b>
have a nice day and pray u 'good hunting' with your business.
exclusively for suse developers by nettezzaumana
ps.:: for guys in prague office >>
Pokud Vam to chlapci prijde minimalne tak zajimave jako me, postnete to na maso@suse.cz
Best Regards
ad.1)
$ echo $(count=0; for x in $(for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/\<e\?grep\>/!d' $x; fi; done); do count=$(($count + 1)); done && echo $count)
sed: can't read /etc/init.d/spamd: Permission denied
1912 // as you can see, this scary command returns, that grep is used in /etc/init.d in 1912 cases -- & i presume, that in most of them
(likely very close to all of them) as a filter (& anyway, for what else should be used?)..
-
pokud bude nekdo tak laskav, tak bych uvital, kdyby jste mi postli Vas vypis z prikazu:
$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null` & time wait
$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null` & time wait
// a mate li zdrojaky jadra:: samozrejme musite zmenit verzi na vasi
$ echo $(find /usr/src/linux-2.6.22.13-0.3 | sed '/\.c$/!d') &>/dev/null & time wait
$ echo $(find /usr/src/linux-2.6.22.13-0.3 | egrep '\.c$') &>/dev/null & time wait
$ uname -r
$ grep -V
$ sed --version
dikec a zdravi ntz
-
Tak posílám podruhé, tentokrát z práce pres Putty...
ufaak@notysek:~$ echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count) & time wait
[1] 7652
6236
[1]+ Done echo $(count=0; for x in $(find /usr/share/man/ | sed '/\.gz$/!d'); do count=$(($count + 1)); done && echo $count)
real 0m0.358s
user 0m0.344s
sys 0m0.020s
ufaak@notysek:~$ echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count) & time wait
[1] 7657
6236
[1]+ Done echo $(count=0; for x in $(find /usr/share/man/ | egrep '\.gz$'); do count=$(($count + 1)); done && echo $count)
real 0m0.426s
user 0m0.400s
sys 0m0.044s
ufaak@notysek:~$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null` & time wait
[1] 7662
[1]+ Done `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then sed '/^#/!d' $x; fi; done &>/dev/null`
real 0m0.224s
user 0m0.152s
sys 0m0.072s
ufaak@notysek:~$ `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null` & time wait
[1] 7757
[1]+ Done `for x in $(find /etc/init.d); do if [ ! -d "$x" ]; then grep -E '^#' $x; fi; done &>/dev/null`
real 0m0.210s
user 0m0.140s
sys 0m0.072s
ufaak@notysek:~$ uname -r
2.6.22-14-generic
ufaak@notysek:~$ grep -V
grep (GNU grep) 2.5.1
Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
Toto je volnĂŠ programovĂŠ vybavenĂ; podmĂnky pro kopĂrovĂĄnĂ a rozĹĄiĹovĂĄnĂ
naleznete ve zdrojovĂ˝ch textech. Toto programovĂŠ vybavenĂ je zcela BEZ ZĂRUKY,
a to i bez zĂĄruky PRODEJNOSTI nebo VHODNOSTI PRO NÄJAKĂ
ufaak@notysek:~$ sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
Toto je volnĂŠ programovĂŠ vybavenĂ; podmĂnky pro kopĂrovĂĄnĂ a rozĹĄiĹovĂĄnĂ
naleznete ve zdrojovĂ˝ch textech. Toto programovĂŠ vybavenĂ je zcela BEZ ZĂRUKY,
a to i bez zĂĄruky PRODEJNOSTI nebo VHODNOSTI PRO NÄJAKĂ
ufaak@notysek:~$
jen dodam, ze pouzivam Ubuntu 7.10 :)
-
Ufaaku >> jeden applaud je pro Tebe malo ..
dikec synku ;)
zdravi ntz
ps. jeste ti nejak hapruje cestina v konzoli :: reseni je spousta::
pokud Ti nevadi anglictina, zkus do ~/.bashrc pridat radek 'export LANG=en_US.utf8'
a nebo si pohraj s konzolovym fontem ..
pps. co to mas za stroj? mas to nejake ultrarychle ;)
-
cestina mi hapruje akorat kdyz se pripojim z prace z windows... a to mi nijak extra nevadi :)
vic by mi asi vadila ta anglictina :D
mam to v popisku, ale je to http://www.czechcomputer.cz/product.jsp?artno=36385
-
ted ho budu davat na druhou reklamaci, predpokladam, ze mi zase nepujde vysunout mechanika :D
no a pak se to stejne stane potreti a pujdu zas do nejakyho novyho :)
-
to je strasne zvlastni >> mate hrozne nizke ty casy .. checknete nekdo pls, jestli me prikazy (mam suse) funguji stejne i na ubuntu ..