summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/config/muted_ya.txt1
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp101
2 files changed, 59 insertions, 43 deletions
diff --git a/.github/config/muted_ya.txt b/.github/config/muted_ya.txt
index a60bb299574..9c2bfcd823e 100644
--- a/.github/config/muted_ya.txt
+++ b/.github/config/muted_ya.txt
@@ -1,6 +1,5 @@
ydb/core/blobstorage/dsproxy/ut TBlobStorageProxySequenceTest.TestBlock42PutWithChangingSlowDisk
ydb/core/blobstorage/dsproxy/ut_fat TBlobStorageProxyTest.TestBatchedPutRequestDoesNotContainAHugeBlob
-ydb/core/blobstorage/pdisk/ut TSectorMap.*
ydb/core/blobstorage/ut_blobstorage CostMetricsGetBlock4Plus2.TestGet4Plus2BlockRequests10000Inflight1BlobSize1000
ydb/core/client/ut TClientTest.PromoteFollower
ydb/core/client/ut TClientTest.ReadFromFollower
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp
index a80ba3af77f..4d3ec364a42 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_sectormap.cpp
@@ -11,34 +11,52 @@
namespace NKikimr {
-Y_UNIT_TEST_SUITE(TSectorMap) {
+Y_UNIT_TEST_SUITE(TSectorMapPerformance) {
- bool TestSectorMapPerformance(NPDisk::NSectorMap::EDiskMode diskMode, ui64 diskSizeGb, ui64 dataSizeMb, bool toFirstSector,
- bool testRead, ui32 tries, double deviationRange = 0.05, std::pair<double, double>* time = nullptr) {
+ enum class ESectorPosition : ui8 {
+ SectorFirst = 0,
+ SectorLast,
+ };
+
+ enum class EOperationType : ui8 {
+ OperationRead = 0,
+ OperationWrite,
+ };
+
+ 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) {
static TString data = PrepareData(1024 * 1024 * 1024);
ui64 dataSize = dataSizeMb * 1024 * 1024;
ui64 deviceSize = diskSizeGb * 1024 * 1024 * 1024;
auto deviceType = NPDisk::NSectorMap::DiskModeToDeviceType(diskMode);
ui64 diskRate;
- if (testRead) {
- diskRate = toFirstSector ? NPDisk::DevicePerformance.at(deviceType).FirstSectorReadBytesPerSec :
- NPDisk::DevicePerformance.at(deviceType).LastSectorReadBytesPerSec;
+ const auto& performanceParams = NPDisk::DevicePerformance.at(deviceType);
+ if (operationType == EOperationType::OperationRead) {
+ diskRate = (sectorPosition == ESectorPosition::SectorFirst)
+ ? performanceParams.FirstSectorReadBytesPerSec
+ : performanceParams.LastSectorReadBytesPerSec;
} else {
- diskRate = toFirstSector ? NPDisk::DevicePerformance.at(deviceType).FirstSectorWriteBytesPerSec :
- NPDisk::DevicePerformance.at(deviceType).LastSectorWriteBytesPerSec;
+ diskRate = (sectorPosition == ESectorPosition::SectorFirst)
+ ? performanceParams.FirstSectorWriteBytesPerSec
+ : performanceParams.LastSectorWriteBytesPerSec;
}
ui64 sectorsNum = deviceSize / NPDisk::NSectorMap::SECTOR_SIZE;
- ui64 sectorPos = toFirstSector ? 0 : sectorsNum - dataSize / NPDisk::NSectorMap::SECTOR_SIZE - 2;
- double timeExpected = (double)dataSize / diskRate;
+ ui64 sectorPos = (sectorPosition == ESectorPosition::SectorFirst)
+ ? 0
+ : 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 (testRead) {
+ 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);
@@ -50,44 +68,43 @@ Y_UNIT_TEST_SUITE(TSectorMap) {
}
timeSum += timeElapsed;
- }
- double timeAvg = timeSum / tries;
- double relativeDeviation = (timeAvg - timeExpected) / timeExpected;
- if (time) {
- *time = { timeExpected, timeAvg };
+
+ double timeAvg = timeSum / tries;
+ double relativeDeviation = (timeAvg - timeExpected) / timeExpected;
+ if (time) {
+ *time = { timeExpected, timeAvg };
+ }
+ if (std::abs(relativeDeviation) <= deviationRange) {
+ return true;
+ }
}
- return std::abs(relativeDeviation) <= deviationRange;
+ return false;
}
- Y_UNIT_TEST(SectorMapPerformance) {
- std::vector<TString> failedTests;
- std::pair<double, double> time;
+#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); \
+ }
- using EDiskMode = NPDisk::NSectorMap::EDiskMode;
- auto test = [&](EDiskMode diskMode, ui32 diskSizeGb, ui32 dataSizeMb, bool toFirstSector, bool testRead, ui32 tries) {
- if (!TestSectorMapPerformance(diskMode, diskSizeGb, dataSizeMb, toFirstSector, testRead, tries, 0.1, &time)) {
- failedTests.push_back(TStringBuilder() << diskSizeGb << "GB " << NPDisk::NSectorMap::DiskModeToString(diskMode) <<
- (testRead ? " read " : " write ") << dataSizeMb << " MB to" << (toFirstSector ? " first " : " last ") <<
- "sector, timeExpected=" << time.first << ", timeAverage=" << time.second);
- }
- };
+ MAKE_TEST(HDD, 1960, 100, Read, First);
+ MAKE_TEST(HDD, 1960, 100, Read, Last);
+ MAKE_TEST(HDD, 1960, 100, Write, First);
+ MAKE_TEST(HDD, 1960, 100, Write, Last);
+ MAKE_TEST(HDD, 1960, 1000, Read, First);
+ MAKE_TEST(HDD, 1960, 1000, Read, Last);
+ MAKE_TEST(HDD, 1960, 1000, Write, First);
+ MAKE_TEST(HDD, 1960, 1000, Write, Last);
- for (auto diskMode : { EDiskMode::DM_HDD, EDiskMode::DM_SSD }) {
- for (ui32 dataSizeMb : { 100, 1000 }) {
- for (bool testRead : { false, true }) {
- test(diskMode, 1960, dataSizeMb, true, testRead, 1);
- }
- }
- }
- test(EDiskMode::DM_HDD, 1960, 100, false, true, 1);
- test(EDiskMode::DM_HDD, 1960, 100, false, false, 1);
+ MAKE_TEST(SSD, 1960, 100, Read, First);
+ MAKE_TEST(SSD, 1960, 100, Write, First);
+ MAKE_TEST(SSD, 1960, 1000, Read, First);
+ MAKE_TEST(SSD, 1960, 1000, Write, First);
- for (auto& testName : failedTests) {
- Cerr << testName << Endl;
- }
- UNIT_ASSERT(failedTests.empty());
- }
+#undef MAKE_TEST
}
}