Neos 3.2 and NFS

We’re trying to run Neos 3.2 on a network file system mounted on a host. I know this has some hassles and performance issues in general, but using an optimized NFS server with ZFS cache features and cache in general, performance is good for most applications.

Trying to run ./flow help on NFS gives:

Warning: Invalid argument supplied for foreach() in /httpdocs/Neos/Packages/Framework/Neos.Flow/Classes/ResourceManagement/ResourceManager.php line 539

We’ve tried to configure cacheDirectory (/var/tmp/NeosCache/) in Caches.yaml to use local SSD, this removes the PHP error above, but running ./flow help then causes a lot of files being generated in /var/tmp/NeosCache/ and then deleted again repeatedly, that is the process of creating and deleting files start over and over again. Seems like an infinite situation going on.

We don’t know Neos internals but some of the files generated in cacheDirectory (on local SSD) looks like:
ContentRepository_NodeTypesConfiguration_directoriesAndFiles
ContentRepository_NodeTypesConfiguration_filesAndModificationTimes
Flow_ConfigurationFiles_filesAndModificationTimes
Flow_TranslationFiles_directoriesAndFiles
Flow_TranslationFiles_filesAndModificationTimes
Fluid_TemplateFiles_directoriesAndFiles
Fluid_TemplateFiles_filesAndModificationTimes
Fusion_Files_directoriesAndFiles
Fusion_Files_filesAndModificationTimes

We’ve tried different mount options (e.g. enabling atime etc.) with NFS, but nothing really seems to make it work.

When moving all files to local SSD everything works smooth :slight_smile:
But we would like to get NFS working since we’re using it in our hosting environment based on Docker.

The infinite loop of creating the cache files sounds like there is some issue with the locking during the compile step.

One thing you could try as a first step is, to run the compilation step manually from CLI:
./flow flow:core:compile && ./flow doctrine:compileproxies && ./flow flow:cache:warmup

If that still fails, you probably need to play around with the location where the lock file is stored. Unfortunately, that can not be directly configured right now, but it will just land in %FLOW_TEMP_PATH%/Lock (see https://github.com/neos/flow-development-collection/blob/master/Neos.Flow/Classes/Core/Booting/Scripts.php#L202). So maybe you can mount that folder on the local SSD.

In general, would it maybe make sense to mount the whole Data/Temporary folder on the local SSD? It’s only caches, so that should probably not be shared anyway and would most likely improve performance noticeably.