kfdtest: Test XNACK on and off for SVM tests
Add parameterization for KFDSVM tests so that we test with both XNACK
enabled and XNACK disabled. This will be overridden by HSA_XNACK, if set
Change-Id: Ie96eb61c03115f947e08cfa076ac459f7440f5d8
[ROCm/ROCR-Runtime commit: 478a68d49c]
This commit is contained in:
@@ -92,27 +92,38 @@ class KFDBaseComponentTest : public testing::Test {
|
||||
return supported;
|
||||
}
|
||||
|
||||
void SVMSetXNACKMode() {
|
||||
// Set xnack_override to -1 if parameter is not passed in, to avoid unnecessary code churn
|
||||
void SVMSetXNACKMode(int xnack_override = -1) {
|
||||
if (!SVMAPISupported())
|
||||
return;
|
||||
|
||||
m_xnack = -1;
|
||||
|
||||
char *hsa_xnack = getenv("HSA_XNACK");
|
||||
if (!hsa_xnack)
|
||||
return;
|
||||
|
||||
HSAKMT_STATUS ret = hsaKmtGetXNACKMode(&m_xnack);
|
||||
if (ret != HSAKMT_STATUS_SUCCESS) {
|
||||
LOG() << "Failed " << ret << " to get XNACK mode" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
// XNACK OFF if defined HSA_XNACK=0
|
||||
HSAint32 xnack_on = strncmp(hsa_xnack, "0", 1);
|
||||
HSAint32 xnack_on = -1;
|
||||
char *hsa_xnack = getenv("HSA_XNACK");
|
||||
|
||||
// HSA_XNACK takes priority over kfdtest parameters
|
||||
if (hsa_xnack)
|
||||
xnack_on = strncmp(hsa_xnack, "0", 1);
|
||||
else if (xnack_override > -1)
|
||||
xnack_on = xnack_override;
|
||||
else
|
||||
return;
|
||||
|
||||
// No need to set XNACK if it's already the current value
|
||||
if (xnack_on == m_xnack)
|
||||
return;
|
||||
|
||||
ret = hsaKmtSetXNACKMode(xnack_on);
|
||||
if (ret != HSAKMT_STATUS_SUCCESS)
|
||||
LOG() << "Failed " << ret << " to set XNACK mode " << xnack_on << std::endl;
|
||||
else
|
||||
LOG() << "Setting XNACK mode to " << xnack_on << std::endl;
|
||||
}
|
||||
|
||||
void SVMRestoreXNACKMode() {
|
||||
|
||||
@@ -41,7 +41,7 @@ void KFDSVMEvictTest::SetUp() {
|
||||
|
||||
KFDLocalMemoryTest::SetUp();
|
||||
|
||||
SVMSetXNACKMode();
|
||||
SVMSetXNACKMode(GetParam());
|
||||
|
||||
ROUTINE_END
|
||||
}
|
||||
@@ -217,7 +217,7 @@ void KFDSVMEvictTest::WaitChildProcesses() {
|
||||
* - Synchronization between the processes, so they know for sure when
|
||||
* they are done allocating memory
|
||||
*/
|
||||
TEST_F(KFDSVMEvictTest, BasicTest) {
|
||||
TEST_P(KFDSVMEvictTest, BasicTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -282,7 +282,7 @@ TEST_F(KFDSVMEvictTest, BasicTest) {
|
||||
* - notify shader to quit
|
||||
* - check result buffer with specific value to confirm all wavefronts quit normally
|
||||
*/
|
||||
TEST_F(KFDSVMEvictTest, QueueTest) {
|
||||
TEST_P(KFDSVMEvictTest, QueueTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL)
|
||||
|
||||
@@ -383,3 +383,4 @@ TEST_F(KFDSVMEvictTest, QueueTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(, KFDSVMEvictTest,::testing::Values(0, 1));
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
|
||||
// @class KFDEvictTest
|
||||
// Test eviction and restore procedure using two processes
|
||||
class KFDSVMEvictTest : public KFDLocalMemoryTest {
|
||||
class KFDSVMEvictTest : public KFDLocalMemoryTest,
|
||||
public ::testing::WithParamInterface<int> {
|
||||
public:
|
||||
KFDSVMEvictTest(void): m_ChildStatus(HSAKMT_STATUS_ERROR), m_IsParent(true) {}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ void KFDSVMRangeTest::SetUp() {
|
||||
|
||||
KFDBaseComponentTest::SetUp();
|
||||
|
||||
SVMSetXNACKMode();
|
||||
SVMSetXNACKMode(GetParam());
|
||||
|
||||
ROUTINE_END
|
||||
}
|
||||
@@ -50,7 +50,7 @@ void KFDSVMRangeTest::TearDown() {
|
||||
ROUTINE_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, BasicSystemMemTest) {
|
||||
TEST_P(KFDSVMRangeTest, BasicSystemMemTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -93,7 +93,7 @@ TEST_F(KFDSVMRangeTest, BasicSystemMemTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, SetGetAttributesTest) {
|
||||
TEST_P(KFDSVMRangeTest, SetGetAttributesTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL)
|
||||
|
||||
@@ -167,7 +167,7 @@ TEST_F(KFDSVMRangeTest, SetGetAttributesTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, XNACKModeTest) {
|
||||
TEST_P(KFDSVMRangeTest, XNACKModeTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -204,7 +204,7 @@ TEST_F(KFDSVMRangeTest, XNACKModeTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, InvalidRangeTest) {
|
||||
TEST_P(KFDSVMRangeTest, InvalidRangeTest) {
|
||||
TEST_START(TESTPROFILE_RUNALL)
|
||||
|
||||
if (!SVMAPISupported())
|
||||
@@ -303,7 +303,7 @@ void KFDSVMRangeTest::SplitRangeTest(int defaultGPUNode, int prefetch_location)
|
||||
delete sysBuffer;
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, SplitSystemRangeTest) {
|
||||
TEST_P(KFDSVMRangeTest, SplitSystemRangeTest) {
|
||||
const HsaNodeProperties *pNodeProperties = m_NodeInfo.HsaDefaultGPUNodeProperties();
|
||||
TEST_START(TESTPROFILE_RUNALL)
|
||||
|
||||
@@ -323,7 +323,7 @@ TEST_F(KFDSVMRangeTest, SplitSystemRangeTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, EvictSystemRangeTest) {
|
||||
TEST_P(KFDSVMRangeTest, EvictSystemRangeTest) {
|
||||
const HsaNodeProperties *pNodeProperties = m_NodeInfo.HsaDefaultGPUNodeProperties();
|
||||
TEST_START(TESTPROFILE_RUNALL)
|
||||
|
||||
@@ -426,7 +426,7 @@ TEST_F(KFDSVMRangeTest, EvictSystemRangeTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, PartialUnmapSysMemTest) {
|
||||
TEST_P(KFDSVMRangeTest, PartialUnmapSysMemTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -478,7 +478,7 @@ TEST_F(KFDSVMRangeTest, PartialUnmapSysMemTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, BasicVramTest) {
|
||||
TEST_P(KFDSVMRangeTest, BasicVramTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -526,7 +526,7 @@ TEST_F(KFDSVMRangeTest, BasicVramTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, SplitVramRangeTest) {
|
||||
TEST_P(KFDSVMRangeTest, SplitVramRangeTest) {
|
||||
TEST_START(TESTPROFILE_RUNALL)
|
||||
|
||||
if (!SVMAPISupported())
|
||||
@@ -544,7 +544,7 @@ TEST_F(KFDSVMRangeTest, SplitVramRangeTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, PrefetchTest) {
|
||||
TEST_P(KFDSVMRangeTest, PrefetchTest) {
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
if (!SVMAPISupported())
|
||||
@@ -582,7 +582,7 @@ TEST_F(KFDSVMRangeTest, PrefetchTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, MigrateTest) {
|
||||
TEST_P(KFDSVMRangeTest, MigrateTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -671,7 +671,7 @@ TEST_F(KFDSVMRangeTest, MigrateTest) {
|
||||
* 4. Use GPU sdma to fill the range in system memory
|
||||
* 5. Check if data is correct in system memory
|
||||
*/
|
||||
TEST_F(KFDSVMRangeTest, MigrateAccessInPlaceTest) {
|
||||
TEST_P(KFDSVMRangeTest, MigrateAccessInPlaceTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -735,7 +735,7 @@ TEST_F(KFDSVMRangeTest, MigrateAccessInPlaceTest) {
|
||||
* [ 292.730010] amdgpu:svm_migrate_to_ram:744: CPU page fault address 0x7f22597f1000
|
||||
* [ 292.730931] amdgpu:svm_migrate_to_ram:744: CPU page fault address 0x7f22597f2000
|
||||
*/
|
||||
TEST_F(KFDSVMRangeTest, MigrateGranularityTest) {
|
||||
TEST_P(KFDSVMRangeTest, MigrateGranularityTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -789,7 +789,7 @@ TEST_F(KFDSVMRangeTest, MigrateGranularityTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, MigrateLargeBufTest) {
|
||||
TEST_P(KFDSVMRangeTest, MigrateLargeBufTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -877,7 +877,7 @@ TEST_F(KFDSVMRangeTest, MigrateLargeBufTest) {
|
||||
TEST_END
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, MigratePolicyTest) {
|
||||
TEST_P(KFDSVMRangeTest, MigratePolicyTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -983,7 +983,7 @@ TEST_F(KFDSVMRangeTest, MigratePolicyTest) {
|
||||
*
|
||||
* Test will skip if only one GPU found
|
||||
*/
|
||||
TEST_F(KFDSVMRangeTest, MultiGPUMigrationTest) {
|
||||
TEST_P(KFDSVMRangeTest, MultiGPUMigrationTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -1067,7 +1067,7 @@ TEST_F(KFDSVMRangeTest, MultiGPUMigrationTest) {
|
||||
*
|
||||
* Test will skip if only one GPU found
|
||||
*/
|
||||
TEST_F(KFDSVMRangeTest, MultiGPUAccessInPlaceTest) {
|
||||
TEST_P(KFDSVMRangeTest, MultiGPUAccessInPlaceTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -1167,7 +1167,7 @@ unsigned int GpuReadThread(void* p) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, MultiThreadMigrationTest) {
|
||||
TEST_P(KFDSVMRangeTest, MultiThreadMigrationTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -1228,7 +1228,7 @@ TEST_F(KFDSVMRangeTest, MultiThreadMigrationTest) {
|
||||
* 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_P(KFDSVMRangeTest, MigrateFileBackedRangeTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -1287,7 +1287,7 @@ TEST_F(KFDSVMRangeTest, MigrateFileBackedRangeTest) {
|
||||
* Map read only range to GPU, test sdma can read the range
|
||||
* write to range should trigger GPU vm fault for both xnack on and off
|
||||
*/
|
||||
TEST_F(KFDSVMRangeTest, ReadOnlyRangeTest) {
|
||||
TEST_P(KFDSVMRangeTest, ReadOnlyRangeTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -1448,7 +1448,7 @@ unsigned int ReadSMIEventThread(void* p) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
TEST_F(KFDSVMRangeTest, HMMProfilingEvent) {
|
||||
TEST_P(KFDSVMRangeTest, HMMProfilingEvent) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -1498,7 +1498,7 @@ TEST_F(KFDSVMRangeTest, HMMProfilingEvent) {
|
||||
* KFD should support VRAM overcommitment by evicting SVM ranges to system memory to alloc
|
||||
* VRAM for new ranges.
|
||||
*/
|
||||
TEST_F(KFDSVMRangeTest, VramOvercommitTest) {
|
||||
TEST_P(KFDSVMRangeTest, VramOvercommitTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -1558,7 +1558,7 @@ TEST_F(KFDSVMRangeTest, VramOvercommitTest) {
|
||||
* by spliting giant range into smaller ranges, evicting SVM ranges to system memory to
|
||||
* alloc VRAM for overcommitment ranges.
|
||||
*/
|
||||
TEST_F(KFDSVMRangeTest, VramOvercommitGiantRangeTest) {
|
||||
TEST_P(KFDSVMRangeTest, VramOvercommitGiantRangeTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -1608,7 +1608,7 @@ TEST_F(KFDSVMRangeTest, VramOvercommitGiantRangeTest) {
|
||||
* use sdma to memset the rest 2 pages, each page has different value 0x1, 0x2, 0x3, 0x4
|
||||
* then check if all page have the specific value after migrating 4 pages to system memory.
|
||||
*/
|
||||
TEST_F(KFDSVMRangeTest, PrefaultPartialRangeTest) {
|
||||
TEST_P(KFDSVMRangeTest, PrefaultPartialRangeTest) {
|
||||
TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX);
|
||||
TEST_START(TESTPROFILE_RUNALL);
|
||||
|
||||
@@ -1653,3 +1653,5 @@ TEST_F(KFDSVMRangeTest, PrefaultPartialRangeTest) {
|
||||
munmap(pBuf, BufSize);
|
||||
TEST_END
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(, KFDSVMRangeTest,::testing::Values(0, 1));
|
||||
|
||||
@@ -28,7 +28,8 @@
|
||||
|
||||
#include "KFDBaseComponentTest.hpp"
|
||||
|
||||
class KFDSVMRangeTest : public KFDBaseComponentTest {
|
||||
class KFDSVMRangeTest : public KFDBaseComponentTest,
|
||||
public ::testing::WithParamInterface<int> {
|
||||
public:
|
||||
KFDSVMRangeTest() {}
|
||||
~KFDSVMRangeTest() {}
|
||||
|
||||
Reference in New Issue
Block a user