kfdtest: add KFDSVMRangeTest MigrateFileBackedRangeTest

To test if SVM support address mmap on file backed memory.

Change-Id: I227cc0b44d167c4fa2e63257e13a481aefa4f750
Signed-off-by: Philip Yang <Philip.Yang@amd.com>


[ROCm/ROCR-Runtime commit: d91f92669b]
This commit is contained in:
Philip Yang
2021-06-29 16:57:16 -04:00
parent fa6f6e94b4
commit 2d80a00201
@@ -1197,3 +1197,63 @@ TEST_F(KFDSVMRangeTest, MultiThreadMigrationTest) {
TEST_END
}
/*
* Test SVM support file backed range
*
* Create temp file, mmap to alloc memory backed on file.
* Create file backed svm range, to map to GPU for xnack on or off
* Use sdma to write data to memory, should write to file
* Close file, and then check if file data is updated correctly
*/
TEST_F(KFDSVMRangeTest, MigrateFileBackedRangeTest) {
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
TEST_START(TESTPROFILE_RUNALL);
if (!SVMAPISupported())
return;
int defaultGPUNode = m_NodeInfo.HsaDefaultGPUNode();
ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node";
if (m_FamilyId < FAMILY_AI) {
LOG() << std::hex << "Skipping test: No svm range support for family ID 0x" << m_FamilyId << "." << std::endl;
return;
}
char tmpfname[] = "/tmp/kfdtest-XXXXXX";
int fd = mkostemp(tmpfname, 0600);
ASSERT_NE(-1, fd);
size_t size = PAGE_SIZE;
char buf[size] = {0x30};
ASSERT_EQ(size, write(fd, buf, size));
void *MmapedFile = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
ASSERT_NE(nullptr, MmapedFile);
HsaSVMRange filebackedRange(MmapedFile, size, defaultGPUNode, defaultGPUNode);
SDMAQueue sdmaQueue;
EXPECT_SUCCESS(sdmaQueue.Create(defaultGPUNode));
sdmaQueue.PlaceAndSubmitPacket(SDMAFillDataPacket(sdmaQueue.GetFamilyId(),
MmapedFile, 0x33333333, size));
sdmaQueue.Wait4PacketConsumption();
EXPECT_SUCCESS(sdmaQueue.Destroy());
munmap(MmapedFile, size);
EXPECT_SUCCESS(close(fd));
fd = open(tmpfname, O_RDONLY);
ASSERT_NE(-1, fd);
ASSERT_EQ(size, read(fd, buf, size));
EXPECT_EQ(0x33, buf[0]);
EXPECT_SUCCESS(close(fd));
EXPECT_SUCCESS(remove(tmpfname));
TEST_END
}