diff options
author | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-08-16 11:07:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-16 11:07:27 +0200 |
commit | b7434b7f6877a76671186539f8e96cac4e86de11 (patch) | |
tree | a0176a48d42b42efbd3088c74ff8bcf220ecef14 /storage | |
parent | b1b3a34aa4224e90f8bd4fa195055b1d11a8bbe9 (diff) | |
parent | 09f36c729e06327e440e4a5635ce350008ca55cd (diff) |
Merge pull request #3098 from vespa-engine/balder/optimize-fan-out-for-more-backend-threads
Set defaults more optimized for low latency and modern multi-core ser…
Diffstat (limited to 'storage')
6 files changed, 18 insertions, 78 deletions
diff --git a/storage/src/tests/distributor/visitoroperationtest.cpp b/storage/src/tests/distributor/visitoroperationtest.cpp index 0ba587cb1ce..c8f339f6626 100644 --- a/storage/src/tests/distributor/visitoroperationtest.cpp +++ b/storage/src/tests/distributor/visitoroperationtest.cpp @@ -115,9 +115,7 @@ protected: void statistical_metrics_not_updated_on_wrong_distribution(); public: VisitorOperationTest() - : defaultConfig(framework::MilliSecTime(0), - 100, - 100) + : defaultConfig(100, 100) {} void setUp() override { @@ -870,7 +868,7 @@ VisitorOperationTest::testParallelVisitorsToOneStorageNode() auto op = createOpWithConfig( createVisitorCommand("multiplebuckets", id, nullId, 31), - VisitorOperation::Config(framework::MilliSecTime(0), 1, 4)); + VisitorOperation::Config(1, 4)); op->start(_sender, framework::MilliSecTime(0)); @@ -921,14 +919,8 @@ VisitorOperationTest::testParallelVisitorsToOneStorageNode() uint32_t minBucketsPerVisitor = 1; uint32_t maxVisitorsPerNode = 4; auto op2 = createOpWithConfig( - createVisitorCommand("multiplebuckets", - id, - document::BucketId(0x54000000000f0001), - 31), - VisitorOperation::Config( - framework::MilliSecTime(0), - minBucketsPerVisitor, - maxVisitorsPerNode)); + createVisitorCommand("multiplebuckets", id, document::BucketId(0x54000000000f0001), 31), + VisitorOperation::Config(minBucketsPerVisitor, maxVisitorsPerNode)); op2->start(_sender, framework::MilliSecTime(0)); @@ -960,10 +952,7 @@ VisitorOperationTest::testParallelVisitorsResendOnlyFailing() uint32_t maxVisitorsPerNode = 4; auto op = createOpWithConfig( createVisitorCommand("multiplebuckets", id, nullId, 31), - VisitorOperation::Config( - framework::MilliSecTime(0), - minBucketsPerVisitor, - maxVisitorsPerNode)); + VisitorOperation::Config(minBucketsPerVisitor, maxVisitorsPerNode)); op->start(_sender, framework::MilliSecTime(0)); @@ -1005,7 +994,7 @@ VisitorOperationTest::testParallelVisitorsToOneStorageNodeOneSuperBucket() auto op = createOpWithConfig( createVisitorCommand("multiplebucketsonesuper", id, nullId), - VisitorOperation::Config(framework::MilliSecTime(0), 5, 4)); + VisitorOperation::Config(5, 4)); op->start(_sender, framework::MilliSecTime(0)); @@ -1080,13 +1069,8 @@ VisitorOperationTest::testInconsistencyHandling() _sender.clear(); auto op = createOpWithConfig( - createVisitorCommand("multiplebucketsonesuper", - id, - nullId, - 8, - 500, - true), - VisitorOperation::Config(framework::MilliSecTime(0), 5, 4)); + createVisitorCommand("multiplebucketsonesuper", id, nullId, 8, 500, true), + VisitorOperation::Config(5, 4)); op->start(_sender, framework::MilliSecTime(0)); diff --git a/storage/src/vespa/storage/config/distributorconfiguration.cpp b/storage/src/vespa/storage/config/distributorconfiguration.cpp index c7461f17d5f..3007eff3d92 100644 --- a/storage/src/vespa/storage/config/distributorconfiguration.cpp +++ b/storage/src/vespa/storage/config/distributorconfiguration.cpp @@ -26,7 +26,6 @@ DistributorConfiguration::DistributorConfiguration(StorageComponent& component) _maxPendingMaintenanceOps(1000), _maxVisitorsPerNodePerClientVisitor(4), _minBucketsPerVisitor(5), - _minTimeLeftToResend(20), _maxClusterClockSkew(0), _doInlineSplit(true), _enableJoinForSiblingLessBuckets(false), @@ -172,7 +171,6 @@ DistributorConfiguration::configure(const vespa::config::content::core::StorDist void DistributorConfiguration::configure(const vespa::config::content::core::StorVisitordispatcherConfig& config) { - _minTimeLeftToResend = config.storagenetworklatency; _minBucketsPerVisitor = config.minbucketspervisitor; _maxVisitorsPerNodePerClientVisitor = config.maxvisitorspernodeperclientvisitor; } diff --git a/storage/src/vespa/storage/config/distributorconfiguration.h b/storage/src/vespa/storage/config/distributorconfiguration.h index 59336135cd3..d33f46befac 100644 --- a/storage/src/vespa/storage/config/distributorconfiguration.h +++ b/storage/src/vespa/storage/config/distributorconfiguration.h @@ -190,9 +190,6 @@ public: uint32_t getMinBucketsPerVisitor() const { return _minBucketsPerVisitor; } - int64_t getMinTimeLeftToResend() const { - return _minTimeLeftToResend; - } void setMaxVisitorsPerNodePerClientVisitor(uint32_t n) { _maxVisitorsPerNodePerClientVisitor = n; @@ -200,9 +197,7 @@ public: void setMinBucketsPerVisitor(uint32_t n) { _minBucketsPerVisitor = n; } - void setMinTimeLeftToResend(int64_t minTime) { - _minTimeLeftToResend = minTime; - } + uint32_t getMaxNodesPerMerge() const { return _maxNodesPerMerge; } @@ -265,7 +260,6 @@ private: uint32_t _maxVisitorsPerNodePerClientVisitor; uint32_t _minBucketsPerVisitor; - int64_t _minTimeLeftToResend; MaintenancePriorities _maintenancePriorities; std::chrono::seconds _maxClusterClockSkew; diff --git a/storage/src/vespa/storage/config/stor-visitordispatcher.def b/storage/src/vespa/storage/config/stor-visitordispatcher.def index 1288f4579be..2e418c97989 100644 --- a/storage/src/vespa/storage/config/stor-visitordispatcher.def +++ b/storage/src/vespa/storage/config/stor-visitordispatcher.def @@ -7,7 +7,7 @@ namespace=vespa.config.content.core # Having several visitor operations running concurrently increases the # potential data processing parallelism on the content nodes at the expense # of using additional resources. -maxvisitorspernodeperclientvisitor int default=4 +maxvisitorspernodeperclientvisitor int default=16 # Minimum number of buckets that have to be present on a given content node # before more than one visitor operation may be sent in parallel towards it. @@ -16,28 +16,4 @@ maxvisitorspernodeperclientvisitor int default=4 # a content node, a total of 4 visitors of 10 buckets each will be sent to the # node. If min buckets were 20, only 2 visitors of 20 buckets each would be # sent. -minbucketspervisitor int default=5 - -# Deprecated - not in use -storagenetworklatency int default=2 - -# Deprecated - not in use -maxbucketspervisitor int default=100 - -# Deprecated - not in use -minpendingperstoragevisitor int default=2 - -# Deprecated - not in use -minsuperbucketsactive int default=50 - -# Deprecated - not in use -minsubbucketsactive int default=10000 - -# Deprecated - not in use -progresstimeout int default=180000 - -# Deprecated - not in use -highprioritylimit int default=600000 - -# Deprecated - not in use -veryhighprioritylimit int default=60000 +minbucketspervisitor int default=1 diff --git a/storage/src/vespa/storage/distributor/externaloperationhandler.cpp b/storage/src/vespa/storage/distributor/externaloperationhandler.cpp index 87f93eacf39..e67e889ff7e 100644 --- a/storage/src/vespa/storage/distributor/externaloperationhandler.cpp +++ b/storage/src/vespa/storage/distributor/externaloperationhandler.cpp @@ -23,8 +23,7 @@ #include <vespa/log/log.h> LOG_SETUP(".distributor.manager"); -namespace storage { -namespace distributor { +namespace storage::distributor { ExternalOperationHandler::ExternalOperationHandler( Distributor& owner, @@ -276,18 +275,10 @@ IMPL_MSG_COMMAND_H(ExternalOperationHandler, GetBucketList) IMPL_MSG_COMMAND_H(ExternalOperationHandler, CreateVisitor) { const DistributorConfiguration& config(getDistributor().getConfig()); - VisitorOperation::Config visitorConfig( - framework::MilliSecTime(config.getMinTimeLeftToResend()), - config.getMinBucketsPerVisitor(), - config.getMaxVisitorsPerNodePerClientVisitor()); - _op = Operation::SP(new VisitorOperation( - *this, - cmd, - visitorConfig, - getMetrics().visits[cmd->getLoadType()])); + VisitorOperation::Config visitorConfig(config.getMinBucketsPerVisitor(), + config.getMaxVisitorsPerNodePerClientVisitor()); + _op = Operation::SP(new VisitorOperation(*this, cmd, visitorConfig, getMetrics().visits[cmd->getLoadType()])); return true; } -} // distributor -} // storage - +} diff --git a/storage/src/vespa/storage/distributor/operations/external/visitoroperation.h b/storage/src/vespa/storage/distributor/operations/external/visitoroperation.h index 10b2b5757ab..006e2916335 100644 --- a/storage/src/vespa/storage/distributor/operations/external/visitoroperation.h +++ b/storage/src/vespa/storage/distributor/operations/external/visitoroperation.h @@ -23,14 +23,11 @@ class VisitorOperation : public Operation { public: struct Config { - Config(const framework::MilliSecTime& storageNetworkLatency_, - uint32_t minBucketsPerVisitor_, + Config(uint32_t minBucketsPerVisitor_, uint32_t maxVisitorsPerNodePerVisitor_) - : storageNetworkLatency(storageNetworkLatency_), - minBucketsPerVisitor(minBucketsPerVisitor_), + : minBucketsPerVisitor(minBucketsPerVisitor_), maxVisitorsPerNodePerVisitor(maxVisitorsPerNodePerVisitor_) {} - framework::MilliSecTime storageNetworkLatency; uint32_t minBucketsPerVisitor; uint32_t maxVisitorsPerNodePerVisitor; }; |