Когда пСрСмСнная срСды ускоряСт процСсс Π² 40 Ρ€Π°Π·

БСгодня ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… послСдних Π°ΠΏΠ΄Π΅ΠΉΡ‚Π°Ρ… систСмы Sherlock [это Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ кластСр Бтэнфордского унивСрситСта — ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ листинг Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… с большим количСством записСй.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… статСй, это скорСС инсайдСрский ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ происходит рСгулярная Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ Sherlock, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΌ Π²ΠΈΠ΄Π΅ для Π½Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. НадССмся Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ большС Ρ‚Π°ΠΊΠΈΡ… статСй.

Листинг ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ врСмя

Всё Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ с вопроса Π² Ρ‚Π΅Ρ…ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Он сообщил ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ls Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ c Π±ΠΎΠ»Π΅Π΅ 15Β 000 записСй Π² $SCRATCH [ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Β β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.].

Высячи Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ трудности для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎ Π½Π΅ рСкомСндуСтся. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π½Π°Π» это ΠΈ ΠΏΡ€ΠΈΠ·Π½Π°Π», Ρ‡Ρ‚ΠΎ это Π½Π΅Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ упомянул, Ρ‡Ρ‚ΠΎ Π½Π° Π΅Π³ΠΎ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ листинг выполняСтся Π² 1000 Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ Π² Sherlock. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это нас Π·Π°Π΄Π΅Π»ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ заглянули Π³Π»ΡƒΠ±ΠΆΠ΅.

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ls выглядит красиво

ΠœΡ‹ рассмотрСли, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ls ΠΏΡ€ΠΈ листингС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ процСсс Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ соврСмСнных дистрибутивов ls ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выполняСтся ΠΊΠ°ΠΊ ls --color=auto, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всСм нравится расцвСтка.

Но красивыС Ρ†Π²Π΅Ρ‚Π° ΠΈΠΌΠ΅ΡŽΡ‚ свою Ρ†Π΅Π½Ρƒ: для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ls Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ Ρ„Π°ΠΉΠ»Π°, Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ…, Ρ„Π»Π°Π³Π°Ρ…, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚.

Одно ΠΈΠ· простых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ Π² ls, Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π²ΠΎΠ·ΠΌΡƒΡ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Ни Π² ΠΊΠΎΠ΅ΠΌ случаС нСльзя Π·Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄, ΠΌΡ‹ Π½Π΅ монстры.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ заглянули Π³Π»ΡƒΠ±ΠΆΠ΅. ls Ρ€Π°ΡΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ записи Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды LS_COLORS, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Π΄Π°Ρ‘Ρ‚ dircolors(1) Π½Π° основС Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ dir_colors(5). Π”Π°, исполняСмый Ρ„Π°ΠΉΠ» считываСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для создания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ls (Π° Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… door (do), Ρ‚ΠΎ dir_colors сработаСт, нСсмотря Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ).

РазбСрёмся ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, какая ΠΈΠ· схСм расцвСчивания Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅, ΠΌΡ‹ создали ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ срСду:

$ 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 сСкунд для 10Β 000 Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, Π½ΡƒΠΆΠ΅Π½ Ρ„Π»Π°Π³ --color=always: хотя ΠΎΠ½ обращаСтся Π² ls --color=auto, Π½ΠΎ ls ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΠΊΠ°Π½Π°Π»Ρƒ ΠΈΠ»ΠΈ с ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Π΄Π°Ρ‡ΠΈ) ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ раскраску, Ссли установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ auto. Π£ΠΌΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π΅Π½ΡŒ.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ? ΠœΡ‹ посмотрСли с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 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
[...]

НичСго сСбС: 10 000 Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² lstat(), 10Β 000 Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² getxattr() (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС тСрпят Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² нашСй срСдС Π½Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡ‰Π΅Ρ‚ ls), 10Β 000 Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² capget().

НавСрняка это ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Атрибут capabilities? НСа

БлСдуя совСтам Π±Π°Π³Π° 10-Π»Π΅Ρ‚Π½Π΅ΠΉ давности, ΠΌΡ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° capabilities:

$ 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

Π£Ρ… Ρ‚Ρ‹, ускорСниС Π΄ΠΎ 8 сСкунд! ΠœΡ‹ избавились ΠΎΡ‚ всСх этих Π΄ΠΎΡ€ΠΎΠ³ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² getxattr(), ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ capget() Ρ‚ΠΎΠΆΠ΅ исчСзли, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ.

Но Π΅Ρ‰Ρ‘ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ эти Π½Π°Π΄ΠΎΠ΅Π΄Π»ΠΈΠ²Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ lstat(), хотя…

Бколько Π½ΡƒΠΆΠ½ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ²?

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСли LS_COLORS.

Π‘Π½Π°Ρ‡Π°Π»Π° просто ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

$ 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

Π§Ρ‚ΠΎ!?! По-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ 13 сСкунд?

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° пСрСмСнная срСды LS_COLORS Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΈΠ»ΠΈ отсутствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Ρ‘ элСмСнтов <type>=color:, ΠΎΠ½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ всё Ρ€Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ†Π²Π΅Ρ‚Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ раскраску для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π°, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Ρ‘ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ <type>=: ΠΈΠ»ΠΈ <type> 00 Π² Ρ„Π°ΠΉΠ»Π΅ DIR_COLORS.

ПослС мноТСства ΠΏΡ€ΠΎΠ± ΠΈ ошибок ΠΌΡ‹ сузили ΠΊΡ€ΡƒΠ³ поиска Π΄ΠΎ этого:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

Ρ‡Ρ‚ΠΎ записываСтся ΠΊΠ°ΠΊ

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

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: Π½Π΅ Ρ€Π°ΡΠΊΡ€Π°ΡˆΠΈΠ²Π°ΠΉ Ρ„Π°ΠΉΠ»Ρ‹ Π½ΠΈ ΠΏΠΎ Π°Ρ‚Ρ€ΡƒΠ±ΡƒΡ‚Ρƒ capabilities, Π½ΠΎ ΠΏΠΎ Π±ΠΈΡ‚Π°ΠΌ setuid/setgid, Π½ΠΈ ΠΏΠΎ Ρ„Π»Π°Π³Ρƒ исполняСмости.

УскоряСм ls

И Ссли Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· этих ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρ‹ lstat() ΠΈΡΡ‡Π΅Π·Π°ΡŽΡ‚, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ совсСм Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ:

$ 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 сСкунды Π½Π° спискС 10 000 Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ€Π΅ΠΊΠΎΡ€Π΄.

НастраиваСм Sherlock

ΠžΡ‚ 13 сСкунд с настройками ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄ΠΎ 0,3 сСкунды с нСбольшой настройкой LS_COLORS ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ 40-ΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ ускорСниС Π·Π° счёт отсутствия setuidΒ / setgid ΠΈ Ρ€Π°ΡΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Ρ… исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ². НС такая большая потСря.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ это настроСно Π² Sherlock для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Но Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ раскраску, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ настройкам ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

$ unset LS_COLORS

Но Ρ‚ΠΎΠ³Π΄Π° Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… с большим количСством Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π²Π°Ρ€ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΊΠΎΡ„Π΅, ΠΏΠΎΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ls.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com