VSCode
VS Code on the /user CephFS filesystem — reduce your metadata load
Why this matters
The shared /user area is a CephFS filesystem served by a single metadata server (MDS). Ordinary editor operations (stat, ls, open, reading directory entries) turn into metadata requests that the MDS must serve for all users — on the login machines and on the worker nodes. A few VS Code features are notoriously chatty:
- the file watcher polls watched directories in the background;
- Pylance (the Python language server) indexes and scans the whole workspace;
- the npm / task auto-detection runs a recursive search for package.json files across the whole tree.
When several people have such sessions open, the MDS saturates: simple operations that should take ~10 ms take seconds, for everyone. This page tells you how to reduce your own contribution.
Server-side baseline (admin-managed, janitor)
The admins deploy a baseline of the settings below into every account on the mX login machines via a janitor script. Two things to know:
- It is injected only if your file does not exist yet:
~/.vscode-server/data/Machine/settings.json. Existing files are never overwritten, so anything you have already configured stays yours. - About 15 users currently already have their own file. For those, nothing is injected — see the section below: I already have a settings.json — what do I need to check?
Where to put the settings
- Recommended (per project, versioned): create a file
.vscode/settings.jsonat the root of your project and paste the settings there. It only affects that project. - Your account on one machine (overrides / complements the baseline): Command Palette → Preferences: Open Remote Settings (SSH: mX) → switch to the JSON editor.
- Baseline (managed by admins, do not delete):
~/.vscode-server/data/Machine/settings.json
After applying: Command Palette → Developer: Restart Extension Host.
Complete settings.json
The file below is commented and safe to paste as-is. Replace <your-username> and <project> with your own values where indicated. Settings in this file are pure JSON-with-comments (VS Code accepts them).
{
// ---- 1. File watching (the single biggest source of metadata requests) ----
// Never watch generated, dependency or cache directories.
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/node_modules/**": true,
"**/__pycache__/**": true,
"**/.mypy_cache/**": true,
"**/.pytest_cache/**": true,
"**/.ruff_cache/**": true,
"**/.venv/**": true,
"**/.conda/**": true,
"**/*.egg-info/**": true,
"**/build/**": true,
"**/dist/**": true,
"**/htmlcov/**": true,
"**/.cache/**": true
},
// Optional: whitelist ONLY the directories you actually edit.
// Leave the array empty to keep the default (watch everything except the
// excludes above). If you fill it, only these paths are watched at all.
"files.watcherInclude": [
"/user/<your-username>/<project>/src"
],
// ---- 2. Pylance / Python language server ----
// "default" keeps basic IntelliSense; "none" disables it completely
// (cheapest option).
"python.languageServer": "default",
// Analyse only the files you have open, not the whole workspace.
"python.analysis.diagnosticMode": "openFilesOnly",
// No background workspace index.
"python.analysis.indexing": false,
// No automatic import searches across the tree.
"python.analysis.autoSearchPaths": false,
"python.analysis.autoImportCompletions": false,
"python.analysis.useLibraryCodeForTypes": false,
// ---- 3. npm / task auto-detection ----
// This is what launches the recursive `rg --files -g **/package.json`
// scans. Turn it off unless you actively use the NPM Scripts panel.
"npm.autoDetect": "off",
"task.autoDetect": "off",
"gulp.autoDetect": "off",
"grunt.autoDetect": "off",
"jake.autoDetect": "off",
// ---- 4. Search (Ctrl+Shift+F) ----
// Respect .gitignore so searches don't walk everything.
"search.useIgnoreFiles": true,
"search.useGlobalIgnoreFiles": true,
"search.exclude": {
"**/.git": true,
"**/node_modules": true,
"**/__pycache__": true,
"**/.venv": true,
"**/build": true,
"**/dist": true
},
// ---- 5. Git ----
// Don't re-stat the whole working tree in the background.
"git.autorefresh": false,
// Disable Git integration entirely for repositories you don't need it on.
"git.enabled": true,
// ---- 6. Editor / autosave ----
// Batch saves instead of writing on every keystroke.
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 5000
}
I already have a settings.json — what do I need to check?
If your account already had a ~/.vscode-server/data/Machine/settings.json before the janitor went live, the baseline was not injected for you. Please open that file (or Preferences: Open Remote Settings) and make sure these keys are present. You can copy this minimal block and merge it into your existing file:
{
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/node_modules/**": true,
"**/__pycache__/**": true,
"**/.venv/**": true,
"**/build/**": true,
"**/dist/**": true
},
"python.analysis.diagnosticMode": "openFilesOnly",
"python.analysis.indexing": false,
"npm.autoDetect": "off",
"task.autoDetect": "off",
"search.useIgnoreFiles": true,
"git.autorefresh": false
}
These are the keys that matter most. Everything else in the full example above is optional tuning.
What each block does
files.watcherExclude/files.watcherInclude— stops the background file watcher from polluting cache/dependency folders, or restricts it to the few directories you edit. This alone removes the majority of requests from a typical session.python.analysis.*— Pylance walks the tree for imports and indexing.openFilesOnly+indexing:falseremoves nearly all of that traffic while keeping completion in the files you have open.npm/task auto-detect off— removes the recursive package.json search.search.useIgnoreFiles— searches stop descending into ignored dirs.git.autorefresh:false— avoids background stat() storms on large repos.
Still slow? The strongest options
- Keep only a light VS Code window on /user (watchers excluded) and do heavy work (search, indexing, big git operations) on a local scratch copy of the project under /tmp, copying results back when done.
- For very large source trees, work on local scratch entirely and treat /user as the results area only.
- Avoid opening your whole home directory (
/user/<your-username>) as the workspace root — open the specific project folder instead.