Re: [rlug] buffer

2008-12-19 Fir de Conversatie Dan Uscatu

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

2008-12-18 Fir de Conversatie Dan Uscatu

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 Fir de Conversatie Petru Ratiu
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

2008-12-18 Fir de Conversatie Dan Uscatu

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 Fir de Conversatie Petru Ratiu
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

2008-12-18 Fir de Conversatie Dan Uscatu

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 Fir de Conversatie Petru Ratiu
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

2008-12-18 Fir de Conversatie Dragos Chiriac

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 Fir de Conversatie Petru Ratiu
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