Риски и преимущества использования /dev/autofs_nowait в OS X

Во всем источнике инфраструктуры CoreFoundation вызовы API файловой системы POSIX (например, open(), stat() и др.) заключены в идиому, в которой дескриптор /dev/autofs_nowait приобретено - с open(…, 0) - до выполнения вызовов POSIX; впоследствии дескриптор close() До выхода из сферы.

  • Какая польза от этого? Каковы риски?

  • Ли приобретать /dev/autofs_nowait дескриптор оказывает какое-либо влияние на флаги или влияет на них open() звонки (например, например O_NONBLOCK)?

  • /dev на моем компьютере под управлением OS X 10.10.5 есть другие записи "autofs":

    список каталогов разработчика

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



Приложение: я не мог найти много на эту тему; В сообщении Google Plus за 2011 год утверждается, что:

[t] его файл - это специальное устройство, отслеживаемое реализацией файловой системы autofs в ядре. При открытии файловая система autofs не блокирует этот процесс ни при каких операциях ввода-вывода в файловой системе autofs.

Я не совсем уверен, что это значит (они конкретно говорили о том, как launchd работает, FWIW), но мне самому было любопытно, поэтому я написал быструю структуру RAII context-manager-y, чтобы попробовать - нецелевое профилирование показывает тесты с вызовами POSIX, выполняющимися быстрее, но с общими хеш-метками; Я исследую эту тактику с помощью более тонкого гребня после того, как узнаю больше о том, как все это работает.

1 ответ

Решение

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

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

Ото, /dev/autofs_notrigger делает процесс даже не запускает автонастройку.

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

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

  • vn_open -> vn_open_auth ->
  • namei -> lookup ->...

По этому пути нет обработки (не) блокирующего поведения.

Другие вопросы по тегам