libpmem을 사용하여 일부 소프트웨어를 개발하려고합니다. 필자는 pmem을 에뮬레이션 할 수있는 라이브러리를 라이브러리에 인식하도록 테스트 환경을 설정하고 있습니다. 나는 문제가 있거나, pmem이 mmap으로 어떻게 처리되는지에 대해 이해하지 못하고있다.에뮬레이트 된 pmem을 libpmem에서 pmem으로 인식하려고 시도했습니다.
난이 따랐다 : http://pmem.io/2016/02/22/pm-emulation.html
모든 것이 멋지다. 부트 로그는 내가 지정한 범위에서 유형 12 메모리를 보여줍니다./dev/pmemXX에 ext4 파일 시스템을 만든 다음 dax로 마운트했습니다. 그래서 지금 가지고 있습니다 :
$ mount | grep pmem
/dev/pmem0m on /mnt/mem type ext4 (rw,relatime,dax,data=ordered)
이제 문제가 생겼습니다. 파일 /mnt/mem/data/test1
을 만듭니다. 다음으로 libpmem에서 간단한 복사 예제를 실행한다. 여기서 전화를 겁니다 :
addr = pmem_map_file("/mnt/mem/data/test2", ...)
파일이 생성되고 데이터가 복사됩니다. pmem으로 등록하지 않습니다 pmem_map_file
에 호출에 의해 반환
is_pmem = pmem_is_pmem(addr, file_size)
주소 : 나는에서 결과를 얻을 때 문제가 온다. 코드를 단계별로 실행하면 매핑에 의해 반환 된 addr
이 에뮬레이트 된 유형 12 메모리로 예약 한 메모리 범위에 없다는 것이 분명합니다. 또한 /mnt/mem/data/test2
의 파일 경로는 라이브러리가 file stat를 사용할 때 dax 문자 장치로 등록하지 않으므로 매핑 된 주소와 파일 경로 테스트가 모두 pmem으로 인식되지 않습니다.
DAX에 대한 자료에서 DAX로 마운트 된 파일 시스템은 파일 메모리가 직접 매핑되어 실제 RAM에 복사되지 않는 것처럼 들립니다. 파일 매핑시 반환되는 addr
에 대해 이것이 의미하는 바를 이해하려고합니다.
내가 여기에 뭔가 빠져있는 것처럼 느껴집니다. DAX로 마운트 된 에뮬레이트 된 pmem에 빌드 된 파일 시스템의 매핑 된 파일이 pmem인지 쿼리 할 때 true를 반환합니까?
*** 편집
정화에 대한감사 표트르. PMEM_IS_PMEM_FORCE
을 사용할 수 있지만 장치 dax 작업을보고 싶습니다. 네임 스페이스를 장치 dax로 재구성하려고하지만 성공하지 못했습니다.
$ sudo strace ./local/opt/bin/ndctl create-namespace -f -e namespace0.0 -m dax
. . .
open("/sys/devices/platform/e820_pmem/ndbus0/region0/pfn0.0/align",
O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/sys/devices/platform/e820_pmem/ndbus0/region0/pfn0.0/resource",
O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/sys/devices/platform/e820_pmem/ndbus0/region0/pfn0.0/size",
O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
getdents(3, /* 0 entries */, 32768) = 0
close(3) = 0
open("/sys/devices/platform/e820_pmem/ndbus0/region0/dax_seed",
O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "failed to reconfigure namespace:"..., 66failed to reconfigure
namespace: Resource temporarily unavailable
) = 66
exit_group(245) = ?
+++ exited with 245 +++
아마도 내가 실행중인 커널에 문제가 있습니까? (4.4.0-97 우분투)
[tag : dax] 태그는 다른 것을 의미한다고 생각합니다. 자신의 종류의 dax에 대한 태그가 있는지 확실하지 않습니다. – mendosi
죄송합니다. 고쳤다. – Megan