Замки fcntl заклинивают на скоплении грязи - PullRequest
0 голосов
/ 13 января 2020

Я запускаю ряд параллельных процессов в кластере через slurm, и процессы координируются друг с другом через файл данных, используя fcntl для блокировки и разблокировки файла. Один процесс освобождает файл, существует значительное отставание, прежде чем другие процессы узнают, что он выпущен. В некоторых случаях они не знают, что файл разблокирован, пока первый процесс не попытается повторно его получить. Затем второй процесс «увидит», что файл разблокирован, и заблокирует его.

Это как если бы блокировка / разблокировка была кэширована, и попытка получить файл во второй раз очищает кэш. Файловая система - это файловая система NFS, но у меня сложилось впечатление, что любой вызов fcntl привел бы к кешу sh кеша NFS.

Я написал короткий код, который использует ту же блокировку basi c / процедуры разблокировки, но просто спит в течение 10 секунд вместо выполнения какой-либо работы. Проблема по-прежнему возникает, хотя и менее серьезная, с задержкой всего ~ 5 секунд, прежде чем второй процесс сможет получить файл.

Эта проблема, по-видимому, не возникает, если я запускаю процессы вручную, а не через slurm, что говорит о том, что это может быть проблемой со slurm.

...