Skip to content

Commit 0f4e985

Browse files
committed
Add LoopbackAgent tests to transferAgentTest
Signed-off-by: Guy Lev <glev@nvidia.com>
1 parent ba2628b commit 0f4e985

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

cpp/tests/unit_tests/executor/transferAgentTest.cpp

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
#include <gmock/gmock.h>
1717
#include <gtest/gtest.h>
1818

19+
#include <filesystem>
20+
21+
namespace fs = std::filesystem;
22+
1923
using namespace tensorrt_llm::executor::kv_cache;
2024

2125
class RegisteredHostMemory
@@ -339,3 +343,103 @@ TEST_F(TransferAgentTest, SyncMessage)
339343
nixlAgent0->invalidateRemoteAgent(agent1);
340344
nixlAgent1->invalidateRemoteAgent(agent0);
341345
}
346+
347+
class LoopbackAgentTest : public ::testing::Test,
348+
public ::testing::WithParamInterface<bool> // NOLINT(cppcoreguidelines-pro-type-member-init)
349+
{
350+
public:
351+
void SetUp() override
352+
{
353+
auto dirPath = fs::absolute("test_loopback_agent_tmp");
354+
fs::create_directories(dirPath);
355+
mDirectory = dirPath.string();
356+
}
357+
358+
void TearDown() override
359+
{
360+
fs::remove_all(mDirectory);
361+
}
362+
363+
[[nodiscard]] std::unique_ptr<BaseLoopbackAgent> makeLoopbackAgent(BaseAgentConfig const& config)
364+
{
365+
return tensorrt_llm::executor::kv_cache::makeLoopbackAgent("nixl", &config);
366+
}
367+
368+
[[nodiscard]] std::string getDirectory() const
369+
{
370+
return mDirectory;
371+
}
372+
373+
private:
374+
std::string mDirectory;
375+
};
376+
377+
TEST_P(LoopbackAgentTest, Basic)
378+
{
379+
std::string const agentName{"loopbackAgent"};
380+
BaseAgentConfig config{agentName, true, GetParam()};
381+
auto loopbackAgent = makeLoopbackAgent(config);
382+
383+
TLLM_CHECK(loopbackAgent);
384+
385+
std::vector<char> memory(100, 1);
386+
char* cuda_mem;
387+
cudaMalloc(&cuda_mem, 100);
388+
cudaMemcpy(cuda_mem, memory.data(), 100, cudaMemcpyHostToDevice);
389+
390+
std::vector<FileDesc> fileDescVec;
391+
fileDescVec.emplace_back(getDirectory() + "/basic_test.bin", O_CREAT | O_RDWR, 0664, 100);
392+
std::vector<char> fileData(100, 10);
393+
write(fileDescVec[0].getFd(), fileData.data(), fileData.size());
394+
395+
MemoryDescs memDescs{MemoryType::kVRAM, {MemoryDesc{cuda_mem, 100, 0}}};
396+
FileDescs fileDescs{fileDescVec};
397+
398+
loopbackAgent->registerMemory(memDescs);
399+
loopbackAgent->registerFiles(fileDescs);
400+
401+
auto status = loopbackAgent->submitLoopbackRequests(memDescs, fileDescs, false);
402+
status->wait();
403+
404+
cudaMemcpy(memory.data(), cuda_mem, 100, cudaMemcpyDeviceToHost);
405+
406+
TLLM_CHECK(memory == fileData);
407+
cudaFree(cuda_mem);
408+
409+
loopbackAgent->deregisterMemory(memDescs);
410+
loopbackAgent->deregisterFiles(fileDescs);
411+
}
412+
413+
TEST_P(LoopbackAgentTest, Basic2)
414+
{
415+
std::string const agentName{"loopbackAgent"};
416+
BaseAgentConfig config{agentName, true, GetParam()};
417+
auto loopbackAgent = makeLoopbackAgent(config);
418+
419+
TLLM_CHECK(loopbackAgent);
420+
421+
std::vector<char> memory(100, 1);
422+
MemoryDesc memDesc(memory);
423+
MemoryDescs memDescs{MemoryType::kVRAM, {memDesc}};
424+
425+
std::vector<FileDesc> fileDescVec;
426+
fileDescVec.emplace_back(getDirectory() + "/basic2_test.bin", O_CREAT | O_RDWR, 0664, 100);
427+
428+
FileDescs fileDescs{fileDescVec};
429+
430+
loopbackAgent->registerMemory(memDescs);
431+
loopbackAgent->registerFiles(fileDescs);
432+
433+
auto status = loopbackAgent->submitLoopbackRequests(memDescs, fileDescs, true);
434+
status->wait();
435+
436+
std::vector<char> fileData(100);
437+
read(fileDescs.getDescs()[0].getFd(), fileData.data(), fileData.size());
438+
439+
TLLM_CHECK(fileData == memory);
440+
441+
loopbackAgent->deregisterMemory(memDescs);
442+
loopbackAgent->deregisterFiles(fileDescs);
443+
}
444+
445+
INSTANTIATE_TEST_SUITE_P(, LoopbackAgentTest, ::testing::Values(true, false));

0 commit comments

Comments
 (0)