Re: [rlug] buffer
Heh, eram pe aproape, mersi. Pentru alti curiosi, threadul e la http://lists.lug.ro/lurker/thread/20051227.101645.4a412fad.en.html De notat ca s-au implinit aproape 3 ani si tot Dan Uscatu l-a deschis si atunci :D Mda, eram aproape sigur ca am mai intilnit problema. In cele din urma, inteleg ca e foarte neclar de ce cele doua sisteme se comporta diferit. Am comparat o gramada de variabile din *.h, au aceleasi valori. ulimit -p este 8 pe ambele. ___ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug
[rlug] buffer
Salut Rulez urmatoarea secventa de comenzi pe risnita 1: tail -f /path/to/file | grep string1 | grep string2 Merge cum m-as astepta, in sensul ca imediat ce vine o linie care contine ambele stringuri, imi apare pe ecran. Merg pe risnita 2 si rulez aceeasi secventa. Pe ecran imi apar liniile respective doar dupa ce se aduna destul de multe, deci pina se umple ceva buffer. Cum mi-as putea da seama ce anume setare imi produce respectivul buffer ? Cum l-as putea convinge pe grep (sau pe tail ?) sa nu mai lucreze asa, ci cum face risnita 1 ? Multumesc ___ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug
Re: [rlug] buffer
2008/12/18 Dan Uscatu dusc...@lunatech.ro: Salut Rulez urmatoarea secventa de comenzi pe risnita 1: tail -f /path/to/file | grep string1 | grep string2 Merge cum m-as astepta, in sensul ca imediat ce vine o linie care contine ambele stringuri, imi apare pe ecran. Merg pe risnita 2 si rulez aceeasi secventa. Pe ecran imi apar liniile respective doar dupa ce se aduna destul de multe, deci pina se umple ceva buffer. Cum mi-as putea da seama ce anume setare imi produce respectivul buffer ? Cum l-as putea convinge pe grep (sau pe tail ?) sa nu mai lucreze asa, ci cum face risnita 1 ? grep --line-buffered PS: pt. chestii mai complicate, cred ca iesi mai curat si mai uscat daca inlocuiesti grepurile cu un sed/awk/perl, nu mai trebuie sa cauti in cinspe locuri unde e bufferul. PS2: O cautare dupa buffer in manualul lui grep poate face minuni. -- Unix was written to play Spacewar and cheat at Scrabble, but Linux was created merely to prove that it booted. - a.s.r. quote ___ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug
Re: [rlug] buffer
grep --line-buffered PS: pt. chestii mai complicate, cred ca iesi mai curat si mai uscat daca inlocuiesti grepurile cu un sed/awk/perl, nu mai trebuie sa cauti in cinspe locuri unde e bufferul. PS2: O cautare dupa buffer in manualul lui grep poate face minuni. Iti dai seama ca prima oara am citit man-ul, dar: - pe risnita pe care merge cum trebuie: [r...@mail ~]# man grep | grep buffer Use line buffering, it can be a performance penality. - pe risnita pe care merge cu buffer mare: [r...@proximus01 root]# man grep | grep buffer [r...@proximus01 root]# Nu mi-e foarte clar de ce primul grep din comanda totusi merge cu buffer de o linie, dar al doilea nu. Pentru ca daca folosesc un singur grep, rezultatul e identic pe ambele risnite. ___ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug
Re: [rlug] buffer
2008/12/18 Dan Uscatu dusc...@lunatech.ro: grep --line-buffered PS: pt. chestii mai complicate, cred ca iesi mai curat si mai uscat daca inlocuiesti grepurile cu un sed/awk/perl, nu mai trebuie sa cauti in cinspe locuri unde e bufferul. PS2: O cautare dupa buffer in manualul lui grep poate face minuni. Iti dai seama ca prima oara am citit man-ul, dar: - pe risnita pe care merge cum trebuie: [r...@mail ~]# man grep | grep buffer Use line buffering, it can be a performance penality. - pe risnita pe care merge cu buffer mare: [r...@proximus01 root]# man grep | grep buffer [r...@proximus01 root]# Nu mi-e foarte clar de ce primul grep din comanda totusi merge cu buffer de o linie, dar al doilea nu. Pentru ca daca folosesc un singur grep, rezultatul e identic pe ambele risnite. Simplu, bufferingul se face la output (adica scrie pe stdout cate o linie sau cate un calup). Rasnita pe care merge are un grep care face implicit line-buffering (vezi grep -V) . Ca sa simulezi pe aia pe care nu merge, try: tail -f | grep --line-buffered | grep Echivalentul perl al lui grep --line-buffered ar fi ceva gen: do_something | perl -lne 'BEGIN {$|=1} print if /regexp/' | do_something_else chestie care dupa parerea mea e mai portabila cu mai putine surprize decat grepurile mai mult sau mai putin posixoase sau gnuiste. -- Unix was written to play Spacewar and cheat at Scrabble, but Linux was created merely to prove that it booted. - a.s.r. quote ___ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug
Re: [rlug] buffer
Simplu, bufferingul se face la output (adica scrie pe stdout cate o linie sau cate un calup). Rasnita pe care merge are un grep care face implicit line-buffering (vezi grep -V) . Ca sa simulezi pe aia pe care nu merge, try: tail -f | grep --line-buffered | grep Echivalentul perl al lui grep --line-buffered ar fi ceva gen: do_something | perl -lne 'BEGIN {$|=1} print if /regexp/' | do_something_else chestie care dupa parerea mea e mai portabila cu mai putine surprize decat grepurile mai mult sau mai putin posixoase sau gnuiste. Nu cred ca ne intelegem. Pe ambele risnite, tail -f file | grep string face acelasi lucru, anume prezinta cite o linie imediat ce aceasta apare in file. Comportamentul se schimba cind se mai adauga un | grep. Anyway, surpriza emisiunii este ca versiunea de grep este aceeasi (2.5.1) si, desi nu scrie in man, si cea de pe risnita cu buffer mare suporta optiunea --line-buffer. De unde anume se seteaza optiunile implicite pentru grep ? Si de ce anume primul grep din sir se comporta intr-un fel (line buffer) cind scrie pe stdout, dar altfel (buffer mare) cind scrie catre un pipe ? ___ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug
Re: [rlug] buffer
2008/12/18 Dan Uscatu dusc...@lunatech.ro: Simplu, bufferingul se face la output (adica scrie pe stdout cate o linie sau cate un calup). Rasnita pe care merge are un grep care face implicit line-buffering (vezi grep -V) . Ca sa simulezi pe aia pe care nu merge, try: tail -f | grep --line-buffered | grep Echivalentul perl al lui grep --line-buffered ar fi ceva gen: do_something | perl -lne 'BEGIN {$|=1} print if /regexp/' | do_something_else chestie care dupa parerea mea e mai portabila cu mai putine surprize decat grepurile mai mult sau mai putin posixoase sau gnuiste. Nu cred ca ne intelegem. Pe ambele risnite, tail -f file | grep string face acelasi lucru, anume prezinta cite o linie imediat ce aceasta apare in file. Comportamentul se schimba cind se mai adauga un | grep. Anyway, surpriza emisiunii este ca versiunea de grep este aceeasi (2.5.1) si, desi nu scrie in man, si cea de pe risnita cu buffer mare suporta optiunea --line-buffer. De unde anume se seteaza optiunile implicite pentru grep ? Si de ce anume primul grep din sir se comporta intr-un fel (line buffer) cind scrie pe stdout, dar altfel (buffer mare) cind scrie catre un pipe ? Cred ca aici deja ne trebuie un kernel guru care sa ne explice comportamentul lui pipe() (apelat de shell cand apare |) si buffer size-ul implicit. Din ce stiu eu parametrul ala pentru GNU grep sau $| la perl le spune sa forteze pipe-ul sa faca flush la buffer dupa fiecare linie scrisa. Pipe-ul sta in OS nu in grep, kernelul e cel care decide ce se intampla cand e consumata de alt proces sau de un char device. Nu-s mare kernel hacker si e posibil sa fi zis o tampenie, asa ca sunt si eu curios ce zice cineva care chiar stie detalii. -- Unix was written to play Spacewar and cheat at Scrabble, but Linux was created merely to prove that it booted. - a.s.r. quote ___ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug
Re: [rlug] buffer
Petru Ratiu wrote: 2008/12/18 Dan Uscatu dusc...@lunatech.ro: Simplu, bufferingul se face la output (adica scrie pe stdout cate o linie sau cate un calup). Rasnita pe care merge are un grep care face implicit line-buffering (vezi grep -V) . Ca sa simulezi pe aia pe care nu merge, try: tail -f | grep --line-buffered | grep Echivalentul perl al lui grep --line-buffered ar fi ceva gen: do_something | perl -lne 'BEGIN {$|=1} print if /regexp/' | do_something_else chestie care dupa parerea mea e mai portabila cu mai putine surprize decat grepurile mai mult sau mai putin posixoase sau gnuiste. Nu cred ca ne intelegem. Pe ambele risnite, tail -f file | grep string face acelasi lucru, anume prezinta cite o linie imediat ce aceasta apare in file. Comportamentul se schimba cind se mai adauga un | grep. Anyway, surpriza emisiunii este ca versiunea de grep este aceeasi (2.5.1) si, desi nu scrie in man, si cea de pe risnita cu buffer mare suporta optiunea --line-buffer. De unde anume se seteaza optiunile implicite pentru grep ? Si de ce anume primul grep din sir se comporta intr-un fel (line buffer) cind scrie pe stdout, dar altfel (buffer mare) cind scrie catre un pipe ? Cred ca aici deja ne trebuie un kernel guru care sa ne explice comportamentul lui pipe() (apelat de shell cand apare |) si buffer size-ul implicit. Din ce stiu eu parametrul ala pentru GNU grep sau $| la perl le spune sa forteze pipe-ul sa faca flush la buffer dupa fiecare linie scrisa. Pipe-ul sta in OS nu in grep, kernelul e cel care decide ce se intampla cand e consumata de alt proces sau de un char device. Nu-s mare kernel hacker si e posibil sa fi zis o tampenie, asa ca sunt si eu curios ce zice cineva care chiar stie detalii. E un thread care se numeste tcpdump q prin decembrie 2005 in care s-au contrat Liviu Daia cu Tarhon Onu Victor pe teme de buffering si kernel. Nu cred ca s-au schimbat prea multe de pe vremea aia. Dragos ___ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug
Re: [rlug] buffer
2008/12/18 Dragos Chiriac dra...@secured.ro: E un thread care se numeste tcpdump q prin decembrie 2005 in care s-au contrat Liviu Daia cu Tarhon Onu Victor pe teme de buffering si kernel. Nu cred ca s-au schimbat prea multe de pe vremea aia. Heh, eram pe aproape, mersi. Pentru alti curiosi, threadul e la http://lists.lug.ro/lurker/thread/20051227.101645.4a412fad.en.html De notat ca s-au implinit aproape 3 ani si tot Dan Uscatu l-a deschis si atunci :D -- Unix was written to play Spacewar and cheat at Scrabble, but Linux was created merely to prove that it booted. - a.s.r. quote ___ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug