From c41bfff892d5a5f4e2c37486a10c5a1d5f305bb5 Mon Sep 17 00:00:00 2001 From: Sergey Belyakov Date: Tue, 6 Feb 2024 13:30:50 +0300 Subject: [PATCH] Add separate lower and upper bounds for time deviation (#1614) --- .../pdisk/blobstorage_pdisk_ut_sectormap.cpp | 55 ++++++++----------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp index 4d3ec364a424..8d6a4d807ae4 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp @@ -26,7 +26,8 @@ Y_UNIT_TEST_SUITE(TSectorMapPerformance) { using EDiskMode = NPDisk::NSectorMap::EDiskMode; bool TestSectorMapPerformance(EDiskMode diskMode, ui64 diskSizeGb, ui64 dataSizeMb, ESectorPosition sectorPosition, - EOperationType operationType, ui32 tries, double deviationRange = 0.05, std::pair* time = nullptr) { + EOperationType operationType, std::pair deviationRange = {0.05, 0.5}, + std::pair* time = nullptr) { static TString data = PrepareData(1024 * 1024 * 1024); ui64 dataSize = dataSizeMb * 1024 * 1024; ui64 deviceSize = diskSizeGb * 1024 * 1024 * 1024; @@ -50,36 +51,28 @@ Y_UNIT_TEST_SUITE(TSectorMapPerformance) { : sectorsNum - dataSize / NPDisk::NSectorMap::SECTOR_SIZE - 2; double timeExpected = (double)dataSize / diskRate + 1e-9 * performanceParams.SeekTimeNs; - double timeSum = 0; - for (ui32 i = 0; i < tries; ++i) { - NPDisk::TSectorMap sectorMap(deviceSize, diskMode); - sectorMap.ZeroInit(2); - - double timeElapsed = 0; - if (operationType == EOperationType::OperationRead) { - sectorMap.Write((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE); - THPTimer timer; - sectorMap.Read((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE); - timeElapsed = timer.Passed(); - } else { - THPTimer timer; - sectorMap.Write((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE); - timeElapsed = timer.Passed(); - } - - timeSum += timeElapsed; - - double timeAvg = timeSum / tries; - double relativeDeviation = (timeAvg - timeExpected) / timeExpected; - if (time) { - *time = { timeExpected, timeAvg }; - } - if (std::abs(relativeDeviation) <= deviationRange) { - return true; - } + + NPDisk::TSectorMap sectorMap(deviceSize, diskMode); + sectorMap.ZeroInit(2); + + double timeElapsed = 0; + if (operationType == EOperationType::OperationRead) { + sectorMap.Write((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE); + THPTimer timer; + sectorMap.Read((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE); + timeElapsed = timer.Passed(); + } else { + THPTimer timer; + sectorMap.Write((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE); + timeElapsed = timer.Passed(); + } + + double relativeDeviation = (timeElapsed - timeExpected) / timeExpected; + if (time) { + *time = { timeExpected, timeElapsed }; } - return false; + return relativeDeviation >= -deviationRange.first && relativeDeviation <= deviationRange.second; } @@ -87,8 +80,8 @@ Y_UNIT_TEST_SUITE(TSectorMapPerformance) { Y_UNIT_TEST(Test##diskMode##diskSizeGb##GB##operationType##dataSizeMb##MB##On##position##Sector) { \ std::pair time; \ UNIT_ASSERT_C(TestSectorMapPerformance(EDiskMode::DM_##diskMode, diskSizeGb, dataSizeMb, \ - ESectorPosition::Sector##position, EOperationType::Operation##operationType, 3, 0.1, &time), \ - "Time expected# " << time.first << " actual avg time#" << time.second); \ + ESectorPosition::Sector##position, EOperationType::Operation##operationType, { 0.05, 0.5 }, \ + &time), "Time expected# " << time.first << " time elapsed#" << time.second); \ } MAKE_TEST(HDD, 1960, 100, Read, First);