Если вы используете ControlMaster auto
, вы уже повторно используете существующее TCP-соединение , но в любом случае TCP-соединение устанавливается очень быстро.
Задержка в 80 мс, вероятно, вызвана комбинацией:
shell_exec
запуск новой оболочки (попробуйте exec
?)Если вам нужны более быстрые ответы, сначала измерьте каждый из них по отдельности, а затем поработайте над уменьшением задержки в той части, которая медленнее. Если вы обнаружите, что #2 замедляет вас, как вы подозреваете, вы можете попробовать отправить свои команды по существующему постоянному каналу ssh, возможно, через именованный канал с вашей удаленной командой в read -while loop(будут применяться предостережения @symcbean ).
Примерно так
mkfifo /tmp/f_in
mkfifo /tmp/f_out
tail -f /tmp/f_in | ssh user@example.com 'bash -c "while read name; do echo hello \$name; done"' > /tmp/f_out &
time response=$(head -n 1 /tmp/f_out & echo dwurf > /tmp/f_in); echo $response
Ничто из этого никогда не будет таким же быстрым, как создание сетевой службы, которую вы можете запрашивать для получения информации. Я также ожидаю, что это будет довольно ненадежно.
Нет, для доступа к необработанному устройству не требуется файловая система. Ну, вы могли бы сказать, что используете виртуальную файловую систему /dev
, но это нужно только для того, чтобы показать имя устройства, после чего ваш ввод-вывод направляется на устройство.
Но есть много уровней кэширования/буферизации. Файловая система - это только один из них, система будет иметь свой собственный набор, и дисковое оборудование тоже. Если вы хотите еще приблизиться к устройству, вам потребуется доступ к другим интерфейсам.
Возможно, вам лучше использовать существующий инструмент, скажем, dd
и hdparm
. «Проверка производительности ввода-вывода диска с помощью dd» или «Тест скорости диска (Чтение/запись ):Производительность HDD, SSD в Linux» .