Skip to content

Commit c41bfff

Browse files
serbel324vporyadke
authored andcommitted
Add separate lower and upper bounds for time deviation (ydb-platform#1614)
1 parent b12ac34 commit c41bfff

File tree

1 file changed

+24
-31
lines changed

1 file changed

+24
-31
lines changed

ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp

+24-31
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ Y_UNIT_TEST_SUITE(TSectorMapPerformance) {
2626
using EDiskMode = NPDisk::NSectorMap::EDiskMode;
2727

2828
bool TestSectorMapPerformance(EDiskMode diskMode, ui64 diskSizeGb, ui64 dataSizeMb, ESectorPosition sectorPosition,
29-
EOperationType operationType, ui32 tries, double deviationRange = 0.05, std::pair<double, double>* time = nullptr) {
29+
EOperationType operationType, std::pair<double, double> deviationRange = {0.05, 0.5},
30+
std::pair<double, double>* time = nullptr) {
3031
static TString data = PrepareData(1024 * 1024 * 1024);
3132
ui64 dataSize = dataSizeMb * 1024 * 1024;
3233
ui64 deviceSize = diskSizeGb * 1024 * 1024 * 1024;
@@ -50,45 +51,37 @@ Y_UNIT_TEST_SUITE(TSectorMapPerformance) {
5051
: sectorsNum - dataSize / NPDisk::NSectorMap::SECTOR_SIZE - 2;
5152

5253
double timeExpected = (double)dataSize / diskRate + 1e-9 * performanceParams.SeekTimeNs;
53-
double timeSum = 0;
54-
for (ui32 i = 0; i < tries; ++i) {
55-
NPDisk::TSectorMap sectorMap(deviceSize, diskMode);
56-
sectorMap.ZeroInit(2);
57-
58-
double timeElapsed = 0;
59-
if (operationType == EOperationType::OperationRead) {
60-
sectorMap.Write((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE);
61-
THPTimer timer;
62-
sectorMap.Read((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE);
63-
timeElapsed = timer.Passed();
64-
} else {
65-
THPTimer timer;
66-
sectorMap.Write((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE);
67-
timeElapsed = timer.Passed();
68-
}
69-
70-
timeSum += timeElapsed;
71-
72-
double timeAvg = timeSum / tries;
73-
double relativeDeviation = (timeAvg - timeExpected) / timeExpected;
74-
if (time) {
75-
*time = { timeExpected, timeAvg };
76-
}
77-
if (std::abs(relativeDeviation) <= deviationRange) {
78-
return true;
79-
}
54+
55+
NPDisk::TSectorMap sectorMap(deviceSize, diskMode);
56+
sectorMap.ZeroInit(2);
57+
58+
double timeElapsed = 0;
59+
if (operationType == EOperationType::OperationRead) {
60+
sectorMap.Write((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE);
61+
THPTimer timer;
62+
sectorMap.Read((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE);
63+
timeElapsed = timer.Passed();
64+
} else {
65+
THPTimer timer;
66+
sectorMap.Write((ui8*)data.data(), dataSize, sectorPos * NPDisk::NSectorMap::SECTOR_SIZE);
67+
timeElapsed = timer.Passed();
68+
}
69+
70+
double relativeDeviation = (timeElapsed - timeExpected) / timeExpected;
71+
if (time) {
72+
*time = { timeExpected, timeElapsed };
8073
}
8174

82-
return false;
75+
return relativeDeviation >= -deviationRange.first && relativeDeviation <= deviationRange.second;
8376
}
8477

8578

8679
#define MAKE_TEST(diskMode, diskSizeGb, dataSizeMb, operationType, position) \
8780
Y_UNIT_TEST(Test##diskMode##diskSizeGb##GB##operationType##dataSizeMb##MB##On##position##Sector) { \
8881
std::pair<double, double> time; \
8982
UNIT_ASSERT_C(TestSectorMapPerformance(EDiskMode::DM_##diskMode, diskSizeGb, dataSizeMb, \
90-
ESectorPosition::Sector##position, EOperationType::Operation##operationType, 3, 0.1, &time), \
91-
"Time expected# " << time.first << " actual avg time#" << time.second); \
83+
ESectorPosition::Sector##position, EOperationType::Operation##operationType, { 0.05, 0.5 }, \
84+
&time), "Time expected# " << time.first << " time elapsed#" << time.second); \
9285
}
9386

9487
MAKE_TEST(HDD, 1960, 100, Read, First);

0 commit comments

Comments
 (0)