-
Notifications
You must be signed in to change notification settings - Fork 24
Fix inode exhaustion in benchmark bootstrap by reducing default bytes-per-inode #1455
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@copilot I prefer a command line over an environment variable. Can you add the command line option recommended in the original issue? |
Changed to use # Default usage (2MB per inode)
sudo bash build-environment.sh
# Custom value
sudo bash build-environment.sh --bytes-per-inode 1048576
# Help
sudo bash build-environment.sh --help |
benchmark/setup-scripts/README.md
Outdated
| By default, it sets the bytes-per-inode to 2097152 (2MB) when creating the ext4 filesystem. This can be customized using the `--bytes-per-inode` option: | ||
|
|
||
| ```bash | ||
| sudo bash build-environment.sh --bytes-per-inode 1048576 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@copilot Modify the comment to mention that if you're not using leveldb (for example, just using firewood without avalanchego), you don't need so many inodes, which gives you more room for the database itself, so you can and should use a larger value.
Change the example to show how to do that (use 6291456 instead of 1048576)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated the documentation in commit 060565d:
- Added explanation that the 2MB default works well for LevelDB workloads with many small files
- Clarified that Firewood-only workloads can use larger values (6MB) for more database space
- Changed the example to use 6291456 instead of 1048576
- Added BYTES_PER_INODE environment variable to build-environment.sh - Changed default value from 6MB (6291456) to 2MB (2097152) - Updated documentation to explain the new configuration option - This fixes inode exhaustion when running LevelDB benchmarks Co-authored-by: rkuris <[email protected]>
- Changed from BYTES_PER_INODE environment variable to --bytes-per-inode command-line option - Added --help option to display usage information - Updated documentation to reflect the new command-line option usage Co-authored-by: rkuris <[email protected]>
- Added explanation that default 2MB works well for LevelDB workloads - Clarified that Firewood-only workloads can use larger values for more database space - Changed example from 1048576 to 6291456 to demonstrate using the original larger value Co-authored-by: rkuris <[email protected]>
9422e0b to
6ce6354
Compare
LevelDB benchmarks fail with "no space left on device" due to inode exhaustion, not disk space exhaustion. The bootstrap script creates ext4 filesystems with 6MB per inode (6291456 bytes), which severely limits inode count on large NVMe devices. LevelDB's many small files quickly exhaust available inodes.
Changes
--bytes-per-inodecommand-line option, default to 2MB (2097152 bytes) instead of hardcoded 6MB--helpoption to display usage informationUsage
The 2MB default provides 3x more inodes while maintaining sufficient space for Firewood's single-file database and LevelDB's numerous small files. For Firewood-only workloads without LevelDB, users can increase the value to 6MB for more database space.
Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.