Hi Daniel,
The intent of DEVDAX was to provide a single contiguous memory mapped region to the application. libpmem sees this as a single device/file and so can only support a single root object per pool. The idea of multiple root objects per pool has come up in the past. The idea of supporting multiple KV Trees per pool is also being discussed for pmemKV. Since the root object should point to an application data structure, can you use this to point to a custom data struct that in turn points to multiple objects/structs within the application space?
As an FYI, There is an open feature request to support RDMA registration on FSDAX by the Linux community. On-Demand Paging (ODP) with FSDAX is also being looked at.
One option, if it's feasible for your situation, is to create multiple DEVDAX devices per region and keep the one memory pool/root object per devdax device, eg to create 4 x ~54GB DEVDAXdevice instances on the same region:
$ ndctl create-namespace --region=region0 --mode=devdax --size=54G
$ ndctl create-namespace --region=region0 --mode=devdax --size=54G
$ ndctl create-namespace --region=region0 --mode=devdax --size=54G
$ ndctl create-namespace --region=region0 --mode=devdax --size=54G
$ ls -l /dev/dax*
crw-------. 1 root root 250, 7 Nov 21 05:10 /dev/dax0.0
crw-------. 1 root root 250, 8 Nov 21 05:10 /dev/dax0.1
crw-------. 1 root root 250, 9 Nov 21 05:10 /dev/dax0.2
crw-------. 1 root root 250, 10 Nov 21 05:10 /dev/dax0.3
Would that satisfy the requirement?
- Steve