Pe a fa'avavevave le fa'agasologa o le si'osi'omaga e 40 taimi

O le asō matou te fia talanoa e uiga i nisi o faʻafouga sili ona lata mai i le Sherlock system [o se faʻaputuga maualuga lea i le Iunivesite o Stanford - approx. trans.], lea e matua faatelevaveina ai le lisiina o faila i totonu o lisi ma le tele o faʻamaumauga.

E le pei o tala masani, o le tele lea o se lipoti a le tagata mai totonu i le auala matou te galulue ai e le aunoa i Sherlock e faʻaauau pea ona faʻagasolo lelei mo matou tagata faʻaoga. Matou te fa'amoemoe e fa'asalalau nisi tala fa'apenei i le lumana'i.

Lisi le tele o faila e alu ai le taimi

Na amata uma i se fesili lagolago faʻapitoa mai se tagata faʻaoga. Na ia lipotia le faafitauli o le faasalaga ls e ave ni nai minute i totonu o se lisi e sili atu i le 15 faʻamatalaga i totonu $SCRATCH [directory mo faila le tumau - approx. ala].

O le faitau afe o faila i totonu o le lisi e tasi e masani ona avea ma avega i le faila faila ma e mautinoa lava e le fautuaina. Na iloa e le tagata faʻaoga lenei mea ma ioeina e le lelei, ae na taʻua o le lisi e 1000 taimi sili atu i luga o lana komepiuta nai lo Sherlock. Ioe, o lenei mea ua tiga ai i tatou. O lea na matou vaavaai atili ai.

Aua e foliga manaia

Sa matou tilotilo i le mea moni e fai ls pe a lisiina se lisi, ma pe aisea e umi ai le faagasologa. I le tele o fa'asalalauga fa'aonaponei ls e ala i le faaletonu e tamoe e pei ls --color=auto, aua e fiafia tagata uma i lanu.

Ae o lanu matagofie e sau i se tau: mo faila uma ls e tatau ona maua faʻamatalaga e uiga i le faila faila, ana faʻatagaga, fuʻa, faʻalauteleina uiga ma isi mea faapena ina ia mafai ai ona filifili le lanu talafeagai.

O se tasi o fofo faigofie i le faʻafitauli o le faʻamalo le lanu i le ls atoa, ae mafaufau i le ita o tagata faʻaoga. I lalo o le leai o se tulaga e tatau ona e aveesea le lanu lanu, matou te le o sauʻai.

O lea na matou vaavaai atili ai. ls fa'ailoga lanu e ala ile fesuiaiga ole siosiomaga LS_COLORS, lea ua setiina dircolors(1) faʻavae i luga o faila faʻatulagaina dir_colors(5). Ioe, e faitau e le executable le faila fetuutuunai e fatu ai se fesuiaiga o le siosiomaga, lea e faʻaaogaina (ma afai e te le iloa e uiga i faila faitotoa (fai), ona dir_colors o le a galue, E ui lava i mea uma).

Sei o tatou tilotilo totoa

Ina ia iloa po o fea lanu lanu e mafua ai le faʻagesegese, matou faia se siosiomaga faʻataʻitaʻi:

$ mkdir $SCRATCH/dont
$ touch $SCRATCH/dont/{1..10000} # don't try this at home!
$ time ls --color=always $SCRATCH/dont | wc -l
10000

real    0m12.758s
user    0m0.104s
sys     0m0.699s

12,7 sekone mo 10 faila, e le lelei tele.

I le ala, matou te manaʻomia se fuʻa --color=always: e ui ina liliu atu i ls --color=auto, ae ls e iloa pe a le feso'ota'i i se fa'alava (fa'ata'ita'iga i le paipa po'o le toe fa'atonuina o mea e fai) ma fa'agata le valivali pe a seti i auto. Tagata poto.

O le a la le mea ua umi tele? Sa matou tilotilo ma strace:

$ strace -c ls --color=always $SCRATCH/dont | wc -l
10000
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 44.21    0.186617          19     10000           lstat
 42.60    0.179807          18     10000     10000 getxattr
 12.19    0.051438           5     10000           capget
  0.71    0.003002          38        80           getdents
  0.07    0.000305          10        30           mmap
  0.05    0.000217          12        18           mprotect
  0.03    0.000135          14        10           read
  0.03    0.000123          11        11           open
  0.02    0.000082           6        14           close
[...]

Oka: 10 telefoni lstat(), 10 telefoni getxattr() (lea e le manuia uma ona o lo tatou siosiomaga e leai ni uiga o loʻo sailia), 10 telefoni capget().

E mautinoa lava e mafai ona fa'alelei.

Fa'ailoga agavaa? Leai

Mulimuli i fautuaga bug mai le 10 tausaga talu ai, matou taumafai e fa'amalo le siakiina o uiga mafai gafatia:

$ eval $(dircolors -b | sed s/ca=[^:]*:/ca=:/)
$ time strace -c ls --color=always $SCRATCH/dont | wc -l
10000
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 98.95    0.423443          42     10000           lstat
  0.78    0.003353          42        80           getdents
  0.04    0.000188          10        18           mprotect
  0.04    0.000181           6        30           mmap
  0.02    0.000085           9        10           read
  0.02    0.000084          28         3           mremap
  0.02    0.000077           7        11           open
  0.02    0.000066           5        14           close
[...]
------ ----------- ----------- --------- --------- ----------------
100.00    0.427920                 10221         6 total

real    0m8.160s
user    0m0.115s
sys     0m0.961s

Oka, e oo atu i le 8 sekone o le saoasaoa! Na matou aveesea uma na telefoni taugata getxattr(), ma luitau capget() na mou atu foi, sili.

Ae o loo i ai pea nei valaau faasoesa lstat(), E ui lava…

E fia fugala'au e te mana'omia?

O le mea lea, na matou vaʻavaʻai totoʻa ai LS_COLORS.

Muamua na matou faʻagataina lenei fesuiaiga:

$ echo $LS_COLORS
rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
$ unset LS_COLORS
$ echo $LS_COLORS

$  time ls --color=always $SCRATCH/dont | wc -l
10000

real    0m13.037s
user    0m0.077s
sys     0m1.092s

E a!?! Ae 13 sekone?

E foliga mai pe a fesuisuiai le siosiomaga LS_COLORS e na o le tasi o ona elemene e le o faamatalaina pe o misi <type>=color:, e faʻaaogaina le faʻamaumauga tuʻufaʻatasia e ala i le faaletonu ma faʻaaoga pea lanu. O lea afai e te manaʻo e faʻamalo le lanu mo se ituaiga faila, e tatau ona e faʻaaogaina <type>=: poʻo <type> 00 i faila DIR_COLORS.

Ina ua maeʻa le tele o tofotofoga ma mea sese, na matou faʻaititia la matou sailiga i lalo i lenei:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

lea ua tusia e faapea

LS_COLORS='ex=00:su=00:sg=00:ca=00:'

O lona uiga: aua le valivali faila i uiga. mafai gafatia, ae o sina mea itiiti setuid/setgid, e le o le fu'a fa'atinoina.

Tatou faavavevave ls

Ma afai e te le faia se tasi o nei siaki, ona valaʻau lea lstat() mou atu, ma o lenei ua matua ese lava mataupu:

$ export LS_COLORS='ex=00:su=00:sg=00:ca=00:'
$ time strace -c ls --color=always $SCRATCH/dont | wc -l
10000
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 63.02    0.002865          36        80           getdents
  8.10    0.000368          12        30           mmap
  5.72    0.000260          14        18           mprotect
  3.72    0.000169          15        11           open
  2.79    0.000127          13        10           read
[...]
------ ----------- ----------- --------- --------- ----------------
100.00    0.004546                   221         6 total

real    0m0.337s
user    0m0.032s
sys     0m0.029s

0,3 sekone i luga o se lisi o 10 faila, o se faamaumauga.

Faʻatulagaina Sherlock

Mai le 13 sekone fa'atasi ai ma tulaga fa'aletonu i le 0,3 sekone fa'atasi ai ma suiga laiti LS_COLORS o lona uiga o le 40-sa'i fa'avavevave ona o le leai setuid / setgid ma faila faila lanu. E le o se gau tele.

Ioe, ua faʻatulagaina nei i Sherlock mo tagata taʻitasi.

Ae afai e te manaʻo e toe faʻafoʻi le valivali, e mafai ona e toe foʻi i tulaga faʻaletonu:

$ unset LS_COLORS

Ae i luga o faʻatonuga ma le tele o faila, ia mautinoa e faʻafefete le kofe aʻo tamoʻe ls.

puna: www.habr.com

Faaopoopo i ai se faamatalaga