From 736e7ff03b96618cbfcc0556cc9d7a88a4d8af82 Mon Sep 17 00:00:00 2001 From: Sergey Belyakov Date: Wed, 31 Jan 2024 17:03:04 +0300 Subject: [PATCH] Add cost estimator for NVME disks (#1443) --- .../vdisk/common/blobstorage_cost_tracker.cpp | 6 ++++++ .../vdisk/common/blobstorage_cost_tracker.h | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/ydb/core/blobstorage/vdisk/common/blobstorage_cost_tracker.cpp b/ydb/core/blobstorage/vdisk/common/blobstorage_cost_tracker.cpp index 689c577bec0e..87eeafc2e7fa 100644 --- a/ydb/core/blobstorage/vdisk/common/blobstorage_cost_tracker.cpp +++ b/ydb/core/blobstorage/vdisk/common/blobstorage_cost_tracker.cpp @@ -8,6 +8,12 @@ const TDiskOperationCostEstimator TBsCostModelBase::HDDEstimator{ { 6.089e+06, 8.1 }, // HugeWriteCoefficients }; +const TDiskOperationCostEstimator TBsCostModelBase::NVMEEstimator{ + { 10000, 1.3 }, // ReadCoefficients + { 3300, 1.5 }, // WriteCoefficients + { 50000, 1.83 }, // HugeWriteCoefficients +}; + class TBsCostModelMirror3dc : public TBsCostModelBase { public: TBsCostModelMirror3dc(NPDisk::EDeviceType deviceType) diff --git a/ydb/core/blobstorage/vdisk/common/blobstorage_cost_tracker.h b/ydb/core/blobstorage/vdisk/common/blobstorage_cost_tracker.h index 27b9f9e9c795..baf9f6fa9f1e 100644 --- a/ydb/core/blobstorage/vdisk/common/blobstorage_cost_tracker.h +++ b/ydb/core/blobstorage/vdisk/common/blobstorage_cost_tracker.h @@ -63,6 +63,7 @@ class TBsCostModelBase { ui64 PDiskWriteBlockSize = 4ull * 1'000'000; // 4MB static const TDiskOperationCostEstimator HDDEstimator; + static const TDiskOperationCostEstimator NVMEEstimator; private: enum class EMemoryOperationType { @@ -99,6 +100,9 @@ class TBsCostModelBase { case NPDisk::DEVICE_TYPE_ROT: { return HDDEstimator.Write(chunkSize); } + case NPDisk::DEVICE_TYPE_NVME: { + return NVMEEstimator.Write(chunkSize); + } default: { ui64 seekTime = DeviceSeekTimeNs / 100u; // assume we do one seek per 100 log records ui64 writeTime = chunkSize * 1'000'000'000ull / DeviceWriteSpeedBps; @@ -112,6 +116,9 @@ class TBsCostModelBase { case NPDisk::DEVICE_TYPE_ROT: { return HDDEstimator.HugeWrite(chunkSize); } + case NPDisk::DEVICE_TYPE_NVME: { + return NVMEEstimator.HugeWrite(chunkSize); + } default: { ui64 blocksNumber = (chunkSize + DeviceWriteBlockSize - 1) / DeviceWriteBlockSize; ui64 seekTime = 1. * blocksNumber * DeviceSeekTimeNs; @@ -126,6 +133,9 @@ class TBsCostModelBase { case NPDisk::DEVICE_TYPE_ROT: { return HDDEstimator.Read(chunkSize); } + case NPDisk::DEVICE_TYPE_NVME: { + return NVMEEstimator.Read(chunkSize); + } default: { ui64 blocksNumber = (chunkSize + DeviceReadBlockSize - 1) / DeviceReadBlockSize; ui64 seekTime = 1. * blocksNumber * DeviceSeekTimeNs;