Thaum ib puag ncig hloov pauv ceev cov txheej txheem los ntawm 40 zaug

Niaj hnub no peb xav tham txog qee qhov kev hloov tshiab tshiab rau Sherlock system [qhov no yog pawg ua haujlwm siab ntawm Stanford University - kwv yees. trans.], uas ua rau kom ceev cov ntaub ntawv teev npe hauv cov npe nrog coob tus nkag.

Tsis zoo li cov ntawv tsis tu ncua, qhov no yog ntau tshaj ntawm cov neeg sab hauv daim ntawv qhia txog yuav ua li cas peb niaj hnub ua haujlwm ntawm Sherlock kom nws khiav ntawm qhov zoo tshaj plaws rau peb cov neeg siv. Peb cia siab tias yuav tshaj tawm cov ntawv zoo li no yav tom ntej.

Sau ntau cov ntaub ntawv yuav siv sij hawm

Nws tag nrho pib nrog cov lus nug txog kev txhawb nqa los ntawm tus neeg siv. Nws qhia qhov teeb meem uas qhov kev tua ls siv sijhawm ob peb feeb hauv ib phau ntawv nrog ntau dua 15 nkag hauv $SCRATCH [cov ntawv teev npe rau cov ntaub ntawv ib ntus - kwv yees li. txoj kab].

Ntau txhiab cov ntaub ntawv hauv ib phau ntawv qhia feem ntau ua rau lub nra hnyav rau cov ntaub ntawv kaw lus thiab tsis pom zoo. Tus neeg siv paub qhov no thiab lees paub tias nws tsis zoo, tab sis tau hais tias cov npe tau nrawm dua 1000 npaug ntawm nws lub laptop dua Sherlock. Tau kawg, qhov no ua rau peb mob. Yog li peb saib tob dua.

Vim ls zoo saib.

Peb saib qhov nws ua tau tiag tiag ls thaum sau ib daim ntawv teev npe, thiab vim li cas cov txheej txheem yuav siv sij hawm ntev heev. Nyob rau feem ntau niaj hnub kev faib khoom ls los ntawm default nws khiav li ls --color=auto, vim txhua tus nyiam cov xim.

Tab sis cov xim zoo nkauj tuaj ntawm tus nqi: rau txhua cov ntaub ntawv ls yuav tsum tau txais cov ntaub ntawv hais txog hom ntaub ntawv, nws cov kev tso cai, chij, txuas ntxiv cov cwj pwm thiab cov zoo li txhawm rau xaiv cov xim tsim nyog.

Ib qho kev daws teeb meem yooj yim rau qhov teeb meem yog lov tes taw xim hauv ls tag nrho, tab sis xav txog qhov kev npau taws ntawm cov neeg siv. Tsis muaj ib qho xwm txheej twg koj yuav tsum tshem tawm cov xim tso zis, peb tsis yog dab.

Yog li peb saib tob dua. ls xim nkag ntawm ib puag ncig hloov pauv LS_COLORS, uas yog teem dircolors(1) raws li cov ntaub ntawv configuration dir_colors(5)... Yog, lub executable nyeem cov ntaub ntawv configuration los tsim ib qho kev hloov pauv ib puag ncig, uas ls ces siv (thiab yog tias koj tsis paub txog cov ntaub ntawv los ntawm (ua), ces dir_colors yuav ua haujlwm, Txawm tias txhua yam).

Cia wb mus saib ntxiv

Txhawm rau txiav txim siab seb hom xim twg ua rau qeeb, peb tsim qhov chaw sim:

$ 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 vib nas this rau 10 cov ntaub ntawv, tsis zoo heev.

Los ntawm txoj kev, peb xav tau ib tug chij --color=always: txawm nws tig los ls --color=auto, tab sis ls kuaj pom thaum nws tsis txuas nrog lub davhlau ya nyob twg (piv txwv li los ntawm cov yeeb nkab lossis nrog cov kev tso tawm rov qab) thiab cuam tshuam cov xim yog teem rau auto. Tus txiv neej ntse.

Yog li dab tsi siv sijhawm ntev? Peb ntsia nrog 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 hu lstat(), 10 hu getxattr() (uas txhua yam ua tsis tiav vim peb ib puag ncig tsis muaj tus cwj pwm ls tab tom nrhiav), 10 hu capget().

Muaj tseeb qhov no tuaj yeem ua kom zoo.

Capabilities attribute? Tsis yog

Ua raws li cov lus qhia kab mob los ntawm 10 xyoo dhau los, peb sim lov tes taw attribute checking muaj peev xwm:

$ 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, mus txog 8 vib nas this ntawm acceleration! Peb tau tshem tag nrho cov kev hu kim kim getxattr(), thiab kev sib tw capget() ploj lawm, zoo heev.

Tab sis tseem muaj cov no annoying hu lstat(), Txawm tias…

Koj xav tau ntau lub paj?

Yog li ntawd, peb tau saib ze dua LS_COLORS.

Ua ntej peb tsuas yog disabled no variable:

$ 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

Dab tsi!?! Tseem 13 vib nas this?

Nws hloov tawm tias thaum ib puag ncig hloov pauv LS_COLORS tsuas yog ib qho ntawm nws cov ntsiab lus tsis txhais lossis ploj lawm <type>=color:, nws siv cov ntaub ntawv built-in los ntawm lub neej ntawd thiab tseem siv xim. Yog li yog tias koj xav lov tes taw colorization rau ib yam ntaub ntawv, koj yuav tsum override nws nrog <type>=: los yog <type> 00 hauv cov ntaub ntawv DIR_COLORS.

Tom qab ntau qhov kev sim thiab ua yuam kev, peb nqaim peb qhov kev tshawb fawb mus rau qhov no:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

uas yog sau li

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

Qhov no txhais tau tias: tsis txhob xim cov ntaub ntawv los ntawm tus cwj pwm. muaj peev xwm, tab sis me ntsis setuid/setgid, neb ob executability chij.

Peb ceev ceev ls

Thiab yog tias koj tsis ua ib qho ntawm cov tshev no, ces hu lstat() ploj mus, thiab tam sim no nws yog qhov sib txawv kiag li:

$ 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 vib nas this ntawm cov npe ntawm 10 cov ntaub ntawv, cov ntaub ntawv.

Teeb tsa Sherlock

Los ntawm 13 vib nas this nrog lub neej ntawd nqis mus rau 0,3 vib nas this nrog me me tweaking. LS_COLORS txhais tau hais tias 40-fold acceleration vim tsis muaj setuid / setgid thiab xim executable ntaub ntawv. Tsis zoo li qhov poob loj.

Tau kawg, qhov no yog tam sim no teeb tsa hauv Sherlock rau txhua tus neeg siv.

Tab sis yog tias koj xav rov qab cov xim, koj tuaj yeem rov qab mus rau qhov chaw pib:

$ unset LS_COLORS

Tab sis tom qab ntawd ntawm cov npe nrog ntau cov ntaub ntawv, nco ntsoov brew kas fes thaum nws tab tom khiav ls.

Tau qhov twg los: www.hab.com

Ntxiv ib saib