@@ -26,7 +26,8 @@ Y_UNIT_TEST_SUITE(TSectorMapPerformance) {
26
26
using EDiskMode = NPDisk::NSectorMap::EDiskMode;
27
27
28
28
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 ) {
30
31
static TString data = PrepareData (1024 * 1024 * 1024 );
31
32
ui64 dataSize = dataSizeMb * 1024 * 1024 ;
32
33
ui64 deviceSize = diskSizeGb * 1024 * 1024 * 1024 ;
@@ -50,45 +51,37 @@ Y_UNIT_TEST_SUITE(TSectorMapPerformance) {
50
51
: sectorsNum - dataSize / NPDisk::NSectorMap::SECTOR_SIZE - 2 ;
51
52
52
53
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 };
80
73
}
81
74
82
- return false ;
75
+ return relativeDeviation >= -deviationRange. first && relativeDeviation <= deviationRange. second ;
83
76
}
84
77
85
78
86
79
#define MAKE_TEST (diskMode, diskSizeGb, dataSizeMb, operationType, position ) \
87
80
Y_UNIT_TEST (Test##diskMode##diskSizeGb##GB##operationType##dataSizeMb##MB##On##position##Sector) { \
88
81
std::pair<double , double > time ; \
89
82
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 ); \
92
85
}
93
86
94
87
MAKE_TEST (HDD, 1960 , 100 , Read, First);
0 commit comments