diff options
author | Geir Storli <geirst@verizonmedia.com> | 2021-08-23 11:53:26 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2021-08-23 11:53:26 +0000 |
commit | 0c641428d846917880816f7b4793653111e464e6 (patch) | |
tree | 7058082382d1628f8945c195a5af66eaa8d7a01a /searchcore | |
parent | b5de4aa680f61f51f8b6ef0872e3d84a2c986e49 (diff) |
Report max attribute address space usage in state explorer.
Diffstat (limited to 'searchcore')
5 files changed, 34 insertions, 12 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp index 9f1c6e66b5c..49bd5f79b9d 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp @@ -83,6 +83,13 @@ ResourceUsageTracker::~ResourceUsageTracker() _disk_mem_usage_notifier.removeDiskMemUsageListener(this); } +storage::spi::ResourceUsage +ResourceUsageTracker::get_resource_usage() const +{ + std::lock_guard guard(_lock); + return _resource_usage; +} + void ResourceUsageTracker::notifyDiskMemUsage(DiskMemUsageState state) { diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h index 40d8598a8da..f9d2561299b 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h @@ -26,7 +26,7 @@ class ResourceUsageTracker : public std::enable_shared_from_this<ResourceUsageTr { class ListenerGuard; class AttributeUsageListener; - std::mutex _lock; + mutable std::mutex _lock; storage::spi::ResourceUsage _resource_usage; storage::spi::IResourceUsageListener* _listener; IDiskMemUsageNotifier& _disk_mem_usage_notifier; @@ -39,6 +39,7 @@ class ResourceUsageTracker : public std::enable_shared_from_this<ResourceUsageTr public: ResourceUsageTracker(IDiskMemUsageNotifier& notifier); ~ResourceUsageTracker() override; + storage::spi::ResourceUsage get_resource_usage() const; void notifyDiskMemUsage(DiskMemUsageState state) override; std::unique_ptr<vespalib::IDestructorCallback> set_listener(storage::spi::IResourceUsageListener& listener); std::unique_ptr<IAttributeUsageListener> make_attribute_usage_listener(const vespalib::string &document_type); diff --git a/searchcore/src/vespa/searchcore/proton/server/proton.cpp b/searchcore/src/vespa/searchcore/proton/server/proton.cpp index ef72a52eb02..ee822d07999 100644 --- a/searchcore/src/vespa/searchcore/proton/server/proton.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/proton.cpp @@ -943,8 +943,9 @@ Proton::get_child(vespalib::stringref name) const return std::make_unique<FlushEngineExplorer>(*_flushEngine); } else if (name == TLS_NAME && _tls) { return std::make_unique<search::transactionlog::TransLogServerExplorer>(_tls->getTransLogServer()); - } else if (name == RESOURCE_USAGE && _diskMemUsageSampler) { - return std::make_unique<ResourceUsageExplorer>(_diskMemUsageSampler->writeFilter()); + } else if (name == RESOURCE_USAGE && _diskMemUsageSampler && _persistenceEngine) { + return std::make_unique<ResourceUsageExplorer>(_diskMemUsageSampler->writeFilter(), + _persistenceEngine->get_resource_usage_tracker()); } else if (name == THREAD_POOLS) { return std::make_unique<ProtonThreadPoolsExplorer>(_sharedExecutor.get(), (_matchEngine) ? &_matchEngine->get_executor() : nullptr, diff --git a/searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.cpp b/searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.cpp index 83c268fc755..c5633cdded2 100644 --- a/searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.cpp @@ -2,9 +2,11 @@ #include "resource_usage_explorer.h" #include "disk_mem_usage_filter.h" +#include <vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h> #include <vespa/vespalib/data/slime/cursor.h> using namespace vespalib::slime; +using storage::spi::AttributeResourceUsage; namespace proton { @@ -24,8 +26,10 @@ convertMemoryStatsToSlime(const vespalib::ProcessMemoryStats &stats, Cursor &obj object.setLong("anonymousRss", stats.getAnonymousRss()); } -ResourceUsageExplorer::ResourceUsageExplorer(const DiskMemUsageFilter &usageFilter) - : _usageFilter(usageFilter) +ResourceUsageExplorer::ResourceUsageExplorer(const DiskMemUsageFilter& usage_filter, + const ResourceUsageTracker& usage_tracker) + : _usage_filter(usage_filter), + _usage_tracker(usage_tracker) { } @@ -33,25 +37,31 @@ void ResourceUsageExplorer::get_state(const vespalib::slime::Inserter &inserter, bool full) const { Cursor &object = inserter.insertObject(); - DiskMemUsageState usageState = _usageFilter.usageState(); + DiskMemUsageState usageState = _usage_filter.usageState(); + AttributeResourceUsage attr_usage = _usage_tracker.get_resource_usage().get_attribute_address_space_usage(); if (full) { Cursor &disk = object.setObject("disk"); disk.setDouble("usage", usageState.diskState().usage()); disk.setDouble("limit", usageState.diskState().limit()); disk.setDouble("utilization", usageState.diskState().utilization()); - convertDiskStatsToSlime(_usageFilter.getHwInfo(), _usageFilter.getDiskUsedSize(), disk.setObject("stats")); + convertDiskStatsToSlime(_usage_filter.getHwInfo(), _usage_filter.getDiskUsedSize(), disk.setObject("stats")); Cursor &memory = object.setObject("memory"); memory.setDouble("usage", usageState.memoryState().usage()); memory.setDouble("limit", usageState.memoryState().limit()); memory.setDouble("utilization", usageState.memoryState().utilization()); - memory.setLong("physicalMemory", _usageFilter.getHwInfo().memory().sizeBytes()); - convertMemoryStatsToSlime(_usageFilter.getMemoryStats(), memory.setObject("stats")); - size_t transient_memory = _usageFilter.get_transient_memory_usage(); + memory.setLong("physicalMemory", _usage_filter.getHwInfo().memory().sizeBytes()); + convertMemoryStatsToSlime(_usage_filter.getMemoryStats(), memory.setObject("stats")); + size_t transient_memory = _usage_filter.get_transient_memory_usage(); memory.setLong("transient", transient_memory); + + Cursor &address_space = object.setObject("attribute_address_space"); + address_space.setDouble("usage", attr_usage.get_usage()); + address_space.setString("name", attr_usage.get_name()); } else { object.setDouble("disk", usageState.diskState().usage()); object.setDouble("memory", usageState.memoryState().usage()); + object.setDouble("attribute_address_space", attr_usage.get_usage()); } } diff --git a/searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.h b/searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.h index bd6deea326f..6394cb137e2 100644 --- a/searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.h +++ b/searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.h @@ -7,6 +7,7 @@ namespace proton { class DiskMemUsageFilter; +class ResourceUsageTracker; /** * Class used to explore the resource usage of proton. @@ -14,10 +15,12 @@ class DiskMemUsageFilter; class ResourceUsageExplorer : public vespalib::StateExplorer { private: - const DiskMemUsageFilter &_usageFilter; + const DiskMemUsageFilter& _usage_filter; + const ResourceUsageTracker& _usage_tracker; public: - ResourceUsageExplorer(const DiskMemUsageFilter &usageFilter); + ResourceUsageExplorer(const DiskMemUsageFilter& usage_filter, + const ResourceUsageTracker& usage_tracker); virtual void get_state(const vespalib::slime::Inserter &inserter, bool full) const override; }; |