Nuair a chuireann athróg timpeallachta dlús leis an bpróiseas faoi 40 uair

Sa lá atá inniu ba mhaith linn labhairt faoi chuid de na nuashonruithe is déanaí ar chóras Sherlock [is braisle ardfheidhmíochta é seo in Ollscoil Stanford - thart ar. trans.], rud a chuireann go mór le liostú comhad in eolairí le líon mór iontrálacha.

Murab ionann agus ailt rialta, is mó de thuarascáil chos istigh é seo ar an gcaoi a n-oibrímid go rialta ar Sherlock chun é a choinneáil ag feidhmiú ar a ndícheall dár n-úsáideoirí. Tá súil againn níos mó altanna mar seo a fhoilsiú amach anseo.

Tógann sé am chun go leor comhad a liostú

Thosaigh sé ar fad le ceist tacaíochta theicniúil ó úsáideoir. Thuairiscigh sé fadhb go bhfuil an forghníomhú ls tógann sé cúpla nóiméad in eolaire ina bhfuil breis agus 15 iontráil isteach $SCRATCH [eolaire do chomhaid shealadacha - thart. lána].

Is gnách go gcuireann na mílte comhad in aon eolaire amháin ualach ar an gcóras comhad agus is cinnte nach moltar iad. Bhí a fhios ag an úsáideoir seo agus d'admhaigh sé nach raibh sé go maith, ach luaigh sé go raibh an liostú 1000 uair níos tapúla ar a ríomhaire glúine ná Sherlock. Ar ndóigh, rinne sé seo dochar dúinn. Mar sin d'fhéachamar níos doimhne.

Toisc go bhfuil cuma deas air.

D'fhéachamar ar cad a dhéanann sé i ndáiríre ls agus eolaire á liostú, agus cén fáth a thógann an próiseas chomh fada sin. Ar an chuid is mó dáiltí nua-aimseartha ls de réir réamhshocraithe ritheann sé mar ls --color=auto, mar is maith le gach duine na dathanna.

Ach tagann dathanna áille ar phraghas: do gach comhad ls Ní mór faisnéis a fháil faoin gcineál comhaid, a cheadanna, bratacha, tréithe leathnaithe agus a leithéid d'fhonn an dath cuí a roghnú.

Réiteach simplí amháin ar an bhfadhb is ea dath a dhíchumasú i ls ar fad, ach feall na n-úsáideoirí a shamhlú. Níor cheart duit in imthosca ar bith an t-aschur dath a bhaint, ní arrachtaigh muid.

Mar sin d'fhéachamar níos doimhne. ls iontrálacha dathanna trí athróg timpeallachta LS_COLORS, atá socraithe dircolors(1) bunaithe ar chomhad cumraíochta dir_colors(5)... Sea, léann an inrite an comhad cumraíochta chun athróg timpeallachta a chruthú, a úsáideann ls ansin (agus mura bhfuil eolas agat ar chomhaid doras (do), ansin dir_colors oibreoidh, In ainneoin gach rud).

A ligean ar ghlacadh le breathnú níos dlúithe

Chun a fháil amach cén scéim dathanna is cúis leis an mhoilliú, chruthaíomar timpeallacht thurgnamhach:

$ 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 soicind le haghaidh 10 comhad, nach bhfuil an-mhaith.

Dála an scéil, tá bratach ag teastáil uainn --color=always: cé go casadh sé ar ls --color=autoAch ls aimsíonn sé nuair nach bhfuil sé nasctha le teirminéal (m.sh. le píopa nó le hathsheoladh aschuir) agus díchumasaítear dathú má tá sé socraithe auto. Fear cliste.

Mar sin, cad a thógann sé chomh fada? D'fhéachamar le 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 glaoch lstat(), 10 glaoch getxattr() (a theipeann ar fad toisc nach bhfuil na tréithe atá á lorg ag ár dtimpeallacht), 10 glaoch capget().

Cinnte is féidir é seo a bharrfheabhsú.

tréith cumais? Ní hea

Ag leanúint comhairle fabht ó 10 mbliana ó shin, rinneamar iarracht seiceáil tréithe a dhíchumasú cumais:

$ 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, suas le 8 soicind de luasghéarú! Fuair ​​​​muid réidh leis na glaonna costasacha sin go léir getxattr(), agus dúshláin capget() imithe freisin, iontach.

Ach fós tá na glaonna annoying lstat(), Cé go…

Cé mhéad bláth atá uait?

Dá bhrí sin, ghlacamar le breathnú níos dlúithe LS_COLORS.

Ar dtús dhíchumasíomar an athróg seo:

$ 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

Cad!?! Fós 13 soicind?

Tharlaíonn sé go raibh nuair a athróg timpeallacht LS_COLORS níl ach ceann amháin dá heilimintí sainithe nó in easnamh <type>=color:, úsáideann sé an bunachar sonraí ionsuite de réir réamhshocraithe agus úsáideann sé dathanna fós. Mar sin más mian leat dathú a dhíchumasú le haghaidh cineál comhaid áirithe, ní mór duit é a shárú <type>=:<type> 00 i gcomhad DIR_COLORS.

Tar éis go leor trialach agus earráide, rinneamar ár gcuardach a chaolú síos go dtí seo:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

atá scríofa mar

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

Ciallaíonn sé seo: ná dathaigh comhaid de réir tréithe. cumais, ach beagán ar giotán setuid/setgid, ná trí bratach inrite.

Déanaimid dlús ls

Agus mura ndéanann tú aon cheann de na seiceálacha seo, glaonna ansin lstat() imigh, agus anois is ábhar go hiomlán difriúil é:

$ 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 soicind ar liosta de 10 comhad, taifead.

Sherlock a shocrú

13 soicind le socruithe réamhshocraithe go 0,3 soicind le miontweaking LS_COLORS ciallaíonn sé luasghéarú 40-huaire mar gheall ar neamhláithreacht setuid / setgid agus comhaid inrite daite. Ní caillteanas mór den sórt sin.

Ar ndóigh, tá sé seo cumraithe anois i Sherlock do gach úsáideoir.

Ach más mian leat an dathú a thabhairt ar ais, is féidir leat filleadh ar na socruithe réamhshocraithe:

$ unset LS_COLORS

Ach ansin ar eolairí le go leor de na comhaid, a bheith cinnte a brew caife agus é ar siúl ls.

Foinse: will.com

Add a comment