Userfaultfd returns ENOMEM with > 900 active regision
- Dominant language
- C++
- Stars
- 115
- Forks
- 29
- PR merge metrics
- No merged PRs in 30d
Description
We are seeing the following error when attempting to register more than 900 regions with userfaultfd:
```
Tue Aug 27 13:57:55 PDT 2019
./db_bench --benchmarks=fillseq --num=40000000 --threads=24
LevelDB: version 1.22
Date: Tue Aug 27 13:57:55 2019
CPU: 96 * AMD EPYC 7401 24-Core Processor
CPUCache: 512 KB
Values: 100 bytes each (50 bytes after compression)
Entries: 40000000
RawSize: 4425.0 MB (estimated)
FileSize: 2517.7 MB (estimated)
WARNING: Snappy compression is not enabled
------------------------------------------------
100869:100900 [ERROR][/home/martymcf/.sessions/altus/src/umap/src/umap/Uffd.cpp:266]: register_region ioctl(UFFDIO_REGISTER) failed: Cannot allocate memoryNumber of regions is: 950
terminate called after throwing an instance of 'Umap::Exception'
what(): ! UMAP Exception [/home/martymcf/.sessions/altus/src/umap/src/umap/Uffd.cpp:266]: register_region ioctl(UFFDIO_REGISTER) failed: Cannot allocate memoryNumber of regions is: 950
/home/martymcf/run_db_bench.sh: line 39: 100869 Aborted (core dumped) ./db_bench --benchmarks=fillseq --num=$blocks --threads=$threads
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reproducing the failure with the provided db_bench command and inspect umap/Uffd.cpp around line 266, where UFFDIO_REGISTER reports ENOMEM. Trace how register_region handles multiple regions and determine the expected behavior when registration exceeds the observed limit. Done means the cause is understood and the issue has a verified resolution or clearly documented constraint.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100