Skip to content

Commit

Permalink
Merge f4a5e8e into bc5b8c1
Browse files Browse the repository at this point in the history
  • Loading branch information
serbel324 authored Feb 6, 2024
2 parents bc5b8c1 + f4a5e8e commit a037861
Showing 1 changed file with 24 additions and 31 deletions.
55 changes: 24 additions & 31 deletions ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<double, double>* time = nullptr) {
EOperationType operationType, std::pair<double, double> deviationRange = {0.05, 0.5},
std::pair<double, double>* time = nullptr) {
static TString data = PrepareData(1024 * 1024 * 1024);
ui64 dataSize = dataSizeMb * 1024 * 1024;
ui64 deviceSize = diskSizeGb * 1024 * 1024 * 1024;
Expand All @@ -50,45 +51,37 @@ 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;
}


#define MAKE_TEST(diskMode, diskSizeGb, dataSizeMb, operationType, position) \
Y_UNIT_TEST(Test##diskMode##diskSizeGb##GB##operationType##dataSizeMb##MB##On##position##Sector) { \
std::pair<double, double> 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);
Expand Down

0 comments on commit a037861

Please sign in to comment.