Павольная прапускная здольнасць праз тунэль і машына, якая завісла ў чаканні выпадковых лікаў, даюць вельмі розны вопыт, але іх запісваюць пад адной скаргай. Адно выглядае як паўза, перш чым што-небудзь запрацуе. Другое выглядае як злучэнне, якое працуе і рухае даныя павольна, пакуль вы за ім назіраеце. Вызначыць, якое з іх у вас, займае дзесяць хвілін і эканоміць тыдзень здагадак.

Два сімптомы, якія выглядаюць аднолькава

Сэрвіс, які завісае пасля свежага запуску, перш чым прыняць хоць адно злучэнне, чакае нечага. Тунэль, які хутка ўстанаўліваецца і затым перадае з доляй чаканай хуткасці, абмяжоўваецца нечым іншым. Слова шыфраванне з'яўляецца ў абедзвюх гісторыях, таму іх аб'ядноўваюць. Падзяліце іх, перш чым кранаць файл канфігурацыі.

Пастаўце адзнакі часу вакол запуску, аўтэнтыфікацыі, перапагаднення ключоў і самога пераносу. Доўгая затрымка, пакуль тунэль стане прыдатным, — гэта не нізкая ўстойлівая хуткасць, і ўсярэдненне двух у адзін лік знішчае доказы.

systemd-analyze blame | head -10
journalctl -u [email protected] -o short-precise | head -40
cat /proc/sys/kernel/random/entropy_avail

Першыя дзве каманды ставяць працу запуску на часавую шкалу. Трэцяя друкуе значэнне ўліку энтрапіі ядра, якое карыснае як адзін пункт даных і бескарыснае як вымяральнік прапускной здольнасці.

Як насамрэч выглядае чаканне выпадковых лікаў

Запыт на бяспечныя выпадковыя байты можа блакавацца, пакуль ядро не ініцыялізуе сваю выпадковую крыніцу. Гэта найбольш важна на віртуальных машынах і невялікіх убудаваных платах на пачатку запуску, калі сабрана мала навакольнага шуму. З гэтага не вынікае, што кожны зашыфраваны байт спажывае свежую энтрапію.

Сучасныя генератары ініцыялізуюцца адзін раз і затым выдаюць вынік з дэтэрміністычнай канструкцыі, пераініцыялізуючыся па сваім раскладзе. Масавы перанос не спусташае пул байт за байтам, таму нізкае значэнне пула падчас павольнага пераносу нічога не даказвае пра прычыну.

strace -f -e trace=getrandom -p $(pidof openvpn) 2>&1 | head -20
dmesg | grep -i 'random\|crng'

Першая каманда паказвае, ці сядзіць працэс у выкліку выпадковых лікаў, пакуль вы назіраеце. Другая паказвае ўласныя паведамленні ініцыялізацыі ядра, і менавіта там становіцца бачная затрымка ранняга запуску.

Запішыце версію ядра і бібліятэку, з якой сэрвіс фактычна звязаны, бо паводзіны адрозніваюцца паміж рэалізацыямі і паміж выпускамі. Трэйс, зняты пасля аднаўлення, звычайна цалкам прапускае паўзу.

Як насамрэч выглядае ўстойлівая павольнасць

Тунэль, які перадае павольна ўвесь час, абмяжоўваецца шляхам даных. Адзін насычаны паток, страта знешніх пакетаў, паўторныя перадачы або поўныя чаргі сокетаў — кожнае стварае гэты ўзор, і кожнае мае сваё выпраўленне. Сумарны працэнт CPU хавае адзін заняты паток, і гэта найчасцейшае памылковае чытанне. Паглядзіце на час па патоках, перш чым глядзець на агульную нагрузку.

Вымярайце ў абодвух напрамках з параўнальнай базай і назірайце за лічыльнікамі інтэрфейса, а не за ўласнай справаздачай праграмы.

ss -tin dst 203.0.113.10
nstat -az | grep -i 'drop\|retrans'
ethtool -S eth0 | grep -i 'drop\|error'

Першая каманда паказвае стан чаргі і перагрузкі для аднаго партнёра. Другая і трэцяя паведамляюць пра скіды і паўторныя перадачы ў стэку і на інтэрфейсе, і менавіта там прычына звычайна з'яўляецца першай.

Выберыце выпраўленне для вымеранага вузкага месца

Калі доказы паказваюць на ініцыялізацыю ранняга запуску, паглядзіце на падтрыманы платформай шлях ініцыялізацыі, які на віртуальнай машыне можа ўключаць прадастаўленую хостам выпадковую прыладу. Вобраз насення, скапіраваны без змен у шматлікіх гасцей, не замяняе незалежную ініцыялізацыю.

Калі доказы паказваюць на шлях даных, наладзьце тое, на што ўказваюць лічыльнікі. Памеры буфераў дапамагаюць, калі чаргі перапаўняюцца, і нічога не робяць, калі адзін паток насычаны. Усталяванне дэмана энтрапіі, каб падняць лічыльнік, не з'яўляецца рамонтам прапускной здольнасці, а змена здагадак пра ініцыялізацыю, каб графік выглядаў лепш, абменьвае ўласцівасць бяспекі на лік.

Прымайце змену толькі тады, калі тое ж вымярэнне паляпшаецца ў тых жа умовах. Больш вялікі лічыльнік — не вынік; карацейшае вымеранае чаканне або хутчэйшы перанос з вызначанай прычынай — гэта вынік.

Падобныя артыкулы