Риски и преимущества использования /dev/autofs _nowait в OS X
На протяжении исходный код CoreFoundation, вызовы API файловой системы POSIX (например, open()
, stat()
и др.) являются завернутый в идиому, в котором дескриптор /dev/autofs_nowait
приобретается - с open(…, 0)
- до того, как будут сделаны вызовы POSIX; после этого дескриптор close()
d до выхода области.
-
Какая польза от этого? Каковы риски?
-
Приобретает ли дескриптор /dev/autofs_nowait
какое-либо влияние на флаговые или связанные с ним потоки open()
(например, O_NONBLOCK
)?
-
/dev
на моей машине, в OS X 10.10.5 есть другие записи "autofs":
![dev directory listing]()
... ни один из которых не имеет доступных страниц man
. Если эти файловые устройства могут предложить преимущества в этом ключе, мне было бы интересно услышать об их использовании, как это может быть.
Приложение: я не мог найти много на эту тему; a Сообщение Google Plus от 2011 года утверждает, что:
[t] его файл является специальным устройством, которое контролируется autofs реализация файловой системы в ядре. При открытии autofs файловая система не будет блокировать этот процесс при любых операциях ввода-вывода на файловая система autofs.
Я не совсем уверен, что это значит (они конкретно говорили о том, как работает launchd
, FWIW), но мне это было любопытно, поэтому я написал quick context-manager-y RAII struct в попробуйте - нецелевое профилирование показывает тесты с вызовами POSIX, выполняющимися быстрее, но внутри общих хэш-знаков; Я исследую эту тактику с более тонкой гребенкой после того, как я получу больше информации о том, как все это работает.
Ответы
Ответ 1
Эти устройства позволяли разработчикам (-ам) избегать определения новых syscall
или ioctl
для функциональности, и, возможно, это было реализовано таким образом, потому что оно было проще, требует обновления кода меньше и не меняет VFS API, который, возможно, был проблемой в то время.
Когда вы открываете /dev/autofs_nowait
и пересекаете путь, вы запускаете автоподстройки, но не ждите их завершения (иначе ваш процесс блокируется до тех пор, пока файловая система не будет установлена или после истечения времени работы), так что вы можете получите ENOENT
при открытии файла, даже если все будет хорошо.
OTOH, /dev/autofs_notrigger
заставляет процесс даже не запускать автоподключение.
Это все эти устройства. Дело в том, что в реализации Дарвина open
может блокироваться при перемещении файловой системы даже с помощью O_NONBLOCK
или O_NDELAY
.
Вы можете следить за потоком из vfs, из open
операции vnode
:
Вниз по этому пути нет обработки (не) блокировки.