Подтвердить что ты не робот

Риски и преимущества использования /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, выполняющимися быстрее, но внутри общих хэш-знаков; Я исследую эту тактику с более тонкой гребенкой после того, как я получу больше информации о том, как все это работает.

4b9b3361

Ответ 1

Эти устройства позволяли разработчикам (-ам) избегать определения новых syscall или ioctl для функциональности, и, возможно, это было реализовано таким образом, потому что оно было проще, требует обновления кода меньше и не меняет VFS API, который, возможно, был проблемой в то время.

Когда вы открываете /dev/autofs_nowait и пересекаете путь, вы запускаете автоподстройки, но не ждите их завершения (иначе ваш процесс блокируется до тех пор, пока файловая система не будет установлена ​​или после истечения времени работы), так что вы можете получите ENOENT при открытии файла, даже если все будет хорошо.

OTOH, /dev/autofs_notrigger заставляет процесс даже не запускать автоподключение.

Это все эти устройства. Дело в том, что в реализации Дарвина open может блокироваться при перемещении файловой системы даже с помощью O_NONBLOCK или O_NDELAY.

Вы можете следить за потоком из vfs, из open операции vnode:

Вниз по этому пути нет обработки (не) блокировки.