aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-08-23 11:53:26 +0000
committerGeir Storli <geirst@verizonmedia.com>2021-08-23 11:53:26 +0000
commit0c641428d846917880816f7b4793653111e464e6 (patch)
tree7058082382d1628f8945c195a5af66eaa8d7a01a /searchcore
parentb5de4aa680f61f51f8b6ef0872e3d84a2c986e49 (diff)
Report max attribute address space usage in state explorer.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.cpp7
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/resource_usage_tracker.h3
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/proton.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.cpp24
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/resource_usage_explorer.h7
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;
};