Kana nharaunda inoshanduka ichimhanyisa maitiro ne40 times

Nhasi tinoda kutaura nezve zvimwe zvichangobva kuitika kuSherlock system [iyi iboka rekuita-pamusoro paStanford University - approx. trans.], iyo inomhanyisa zvakanyanya kunyora mafaera mumadhairekitori ane nhamba huru yezvinyorwa.

Kusiyana nezvinyorwa zvenguva dzose, iyi yakawanda yemushumo wemukati wekuti tinogara tichishanda sei paSherlock kuti irambe ichimhanya zvakanyanya kune vashandisi vedu. Tinotarisira kutsikisa zvimwe zvinyorwa zvakaita seizvi mune ramangwana.

Kunyora mafaira akawanda kunotora nguva

Izvo zvese zvakatanga nemubvunzo wetsigiro wehunyanzvi kubva kumushandisi. Akarondedzera dambudziko kuti kuurayiwa ls inotora maminetsi mashoma mudhairekitori ine anopfuura 15 ekupinda mukati $SCRATCH [dhairekitori yemafaira enguva pfupi - approx. mugwagwa].

Zviuru zvemafaira mune rimwe dhairekitori zvinowanzoisa mutoro kune iyo faira system uye haina kukurudzirwa. Mushandisi aiziva izvi uye akabvuma kuti zvainge zvisina kunaka, asi akataura kuti rondedzero yacho yaive nguva dze1000 nekukurumidza palaptop yake kupfuura Sherlock. Chokwadi, izvi zvakatirwadza. Saka takatarisa zvakadzama.

Nekuti ls inotaridzika zvakanaka

Takatarisa zvainoita chaizvo ls kana uchinyora dhairekitori, uye nei maitiro acho achitora nguva yakareba kudaro. Pakugovera kwazvino uno ls by default inomhanya se ls --color=auto, nokuti munhu wose anoda mavara.

Asi mavara akanaka anouya pamutengo: kune yega faira ls inofanirwa kuwana ruzivo nezve rudzi rwefaira, mvumo dzayo, mireza, hunhu hwakawedzerwa uye nezvimwe kuitira kuti usarudze ruvara rwakakodzera.

Imwe mhinduro yakapusa kudambudziko ndeyekudzima ruvara mu ls zvachose, asi fungidzira kutsamwa kwevashandisi. Pasina mamiriro ezvinhu iwe unofanirwa kubvisa iyo ruvara kubuda, isu hatisi monsters.

Saka takatarisa zvakadzama. ls mavara ekupinda kuburikidza nemamiriro ekunze akasiyana LS_COLORS, iyo yakaiswa dircolors(1) zvichibva pane faira rekugadzirisa dir_colors(5)... Ehe, iyo inogoneka inoverenga faira yekumisikidza kugadzira nharaunda inoshanduka, iyo inozoshandisa (uye kana iwe usingazive nezve mafaera musuo (ita), ipapo dir_colors ichashanda, Pasinei nezvose).

Ngatinyatsoongororai

Kuti uone kuti ndeupi chirongwa chemavara chinokonzera kudzikira, takagadzira nharaunda yekuyedza:

$ 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 masekonzi e10 mafaera, asina kunyatsonaka.

Nenzira, tinoda mureza --color=always: kunyange achitendeukira kuna ls --color=autoasi ls inoona kana isina kubatana kune terminal (semuenzaniso nepombi kana neinobuditsa redirection) uye inodzima coloring kana yaiswa auto. Mukomana akangwara.

Saka chii chiri kutora nguva yakareba kudaro? Takatarisa pamwe 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
[...]

Wow: 10 mafoni lstat(), 10 mafoni getxattr() (izvo zvese zvinokundikana nekuti nharaunda yedu haina hunhu ls iri kutsvaga), 10 mafoni capget().

Chokwadi izvi zvinogona kugadziriswa.

Kugona hunhu? kwete

Kutevera zano bug kubva makore gumi apfuura, takaedza kudzima kutarisa kwehunhu zvigone:

$ 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

Wow, kusvika kumasekonzi masere ekumhanyisa! Takabva tasiyana nefoni dzese dzaidhura getxattr(), nematambudziko capget() yakanyangarika zvakare, zvikuru.

Asi kuchine macalls anosvota aya lstat(), Nyangwe…

Iwe unoda maruva mangani?

Nokudaro, takanyatsoongorora LS_COLORS.

Kutanga isu takangodzima iyi shanduko:

$ 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

Chii!?! Zvichiri 13 seconds?

Zvinoitika kuti kana zvakatipoteredza chinja LS_COLORS chimwe chete chezvikamu zvayo ndicho chisingatsanangurirwe kana kuti chisipo <type>=color:, inoshandisa iyo yakavakirwa-mukati dhatabhesi nekukasira uye ichiri kushandisa mavara. Saka kana iwe uchida kudzima colorization kune imwe faira mhando, iwe unofanirwa kuipfuura nayo <type>=: kana <type> 00 mufaira DIR_COLORS.

Mushure mekuedza kwakawanda uye kukanganisa, takapfupisa kutsvaga kwedu kune izvi:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

iyo yakanyorwa kuti

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

Izvi zvinoreva: usapende mafaera nehunhu. zvigone, asi zvishoma nezvishoma setuid/setgid, kana na executability mureza.

Isu tinomhanyisa ls

Uye kana iwe usingaite chero cheki idzi, wobva wafona lstat() kunyangarika, uye ikozvino inyaya yakasiyana zvachose:

$ 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 masekondi pane rondedzero yegumi mafaera, rekodhi.

Kugadzira Sherlock

Kubva pamasekonzi gumi nematatu ane default marongero kusvika 13 masekonzi ane zvidiki zvigadziriso LS_COLORS zvinoreva kukwidziridzwa kwakapetwa makumi mana nekuda kwekusavapo setuid / setgid uye ane mavara eexecutable mafaira. Kwete kurasikirwa kukuru.

Ehe, izvi zvino zvakagadzirirwa muSherlock kumushandisi wega wega.

Asi kana iwe uchida kudzosa iyo coloring, unogona kungodzokera kune default marongero:

$ unset LS_COLORS

Asi ipapo pamadhairekitori ane akawanda mafaera, ita shuwa kubika kofi ichiri kushanda ls.

Source: www.habr.com

Voeg