Skip to content

Commit

Permalink
fixed cyclic traversal of classes to measure memory consumption (#942)
Browse files Browse the repository at this point in the history
  • Loading branch information
troy4eg authored Feb 9, 2024
1 parent 03eb7b4 commit 82f3514
Show file tree
Hide file tree
Showing 14 changed files with 222 additions and 152 deletions.
4 changes: 2 additions & 2 deletions compiler/code-gen/declarations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -932,7 +932,7 @@ void ClassDeclaration::compile_accept_visitor_methods(CodeGenerator &W, ClassPtr
// for kphp_instance_cache_value_size statshouse metrics
klass->need_instance_cache_visitors) {
W << NL;
compile_accept_visitor(W, klass, "InstanceMemoryEstimateVisitor");
compile_accept_visitor(W, klass, "CommonMemoryEstimateVisitor");
}

if (klass->need_instance_cache_visitors) {
Expand Down Expand Up @@ -1092,7 +1092,7 @@ void ClassMembersDefinition::compile(CodeGenerator &W) const {
// for kphp_instance_cache_value_size statshouse metrics
klass->need_instance_cache_visitors) {
W << NL;
compile_generic_accept_instantiations(W, klass, "InstanceMemoryEstimateVisitor");
compile_generic_accept_instantiations(W, klass, "CommonMemoryEstimateVisitor");
}

if (klass->need_instance_cache_visitors) {
Expand Down
3 changes: 2 additions & 1 deletion runtime/dummy-visitor-methods.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
struct DummyVisitorMethods {
// for f$estimate_memory_usage()
// set at compiler at deeply_require_instance_memory_estimate_visitor()
void accept(InstanceMemoryEstimateVisitor &) noexcept {}
// void accept(InstanceMemoryEstimateVisitor &) noexcept {}
void accept(CommonMemoryEstimateVisitor &) noexcept {}
// for f$instance_to_array(), f$to_array_debug()
// set at compiler at deeply_require_to_array_debug_visitor()
void accept(ToArrayVisitor &) noexcept {}
Expand Down
2 changes: 1 addition & 1 deletion runtime/exception.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ struct C$Throwable : public refcountable_polymorphic_php_classes_virt<> {
}
}

virtual void accept(InstanceMemoryEstimateVisitor &visitor) noexcept {
virtual void accept(CommonMemoryEstimateVisitor &visitor) noexcept {
generic_accept(visitor);
}

Expand Down
8 changes: 4 additions & 4 deletions runtime/ffi.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ struct CDataArray: public refcountable_php_classes<CDataArray<T>> {
}
}

void accept(InstanceMemoryEstimateVisitor&) {}
void accept(CommonMemoryEstimateVisitor&) {}
};

// Maybe CDataRef is enough for both field/array references,
Expand Down Expand Up @@ -94,14 +94,14 @@ struct CDataPtr {
c_value = reinterpret_cast<T*>(1);
}

void accept(InstanceMemoryEstimateVisitor&) {}
void accept(CommonMemoryEstimateVisitor&) {}
};

template<class T>
struct CDataRef {
T *c_value;

void accept(InstanceMemoryEstimateVisitor &visitor __attribute__((unused))) {}
void accept(CommonMemoryEstimateVisitor &visitor __attribute__((unused))) {}
const char *get_class() const noexcept { return "FFI\\CDataRef"; }
int get_hash() const noexcept { return -1965114283; }
};
Expand All @@ -112,7 +112,7 @@ struct CDataArrayRef {
T *data;
int64_t len;

void accept(InstanceMemoryEstimateVisitor&) {}
void accept(CommonMemoryEstimateVisitor&) {}
};

template<class T>
Expand Down
2 changes: 1 addition & 1 deletion runtime/job-workers/job-interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,6 @@ class_instance<C$KphpJobWorkerResponseError> create_error_on_other_memory(int32_
return error;
}

void C$KphpJobWorkerResponseError::accept(InstanceMemoryEstimateVisitor &visitor) noexcept {
void C$KphpJobWorkerResponseError::accept(CommonMemoryEstimateVisitor &visitor) noexcept {
return generic_accept(visitor);
}
6 changes: 3 additions & 3 deletions runtime/job-workers/job-interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class InstanceDeepDestroyVisitor;

class ToArrayVisitor;

class InstanceMemoryEstimateVisitor;
class CommonMemoryEstimateVisitor;

namespace job_workers {

Expand All @@ -45,7 +45,7 @@ struct SendingInstanceBase : virtual abstract_refcountable_php_interface {

virtual void accept(ToArrayVisitor &) noexcept {}

virtual void accept(InstanceMemoryEstimateVisitor &) noexcept {}
virtual void accept(CommonMemoryEstimateVisitor &) noexcept {}

virtual size_t virtual_builtin_sizeof() const noexcept = 0;
virtual SendingInstanceBase *virtual_builtin_clone() const noexcept = 0;
Expand Down Expand Up @@ -108,7 +108,7 @@ struct C$KphpJobWorkerResponseError: public refcountable_polymorphic_php_classes
return generic_accept(visitor);
}

void accept(InstanceMemoryEstimateVisitor &visitor) noexcept;
void accept(CommonMemoryEstimateVisitor &visitor) noexcept;

size_t virtual_builtin_sizeof() const noexcept {
return sizeof(*this);
Expand Down
10 changes: 3 additions & 7 deletions runtime/memcache.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ constexpr int64_t MEMCACHE_COMPRESSED = 2;

struct C$Memcache : public abstract_refcountable_php_interface {
public:
virtual void accept(InstanceMemoryEstimateVisitor &) = 0;
virtual void accept(CommonMemoryEstimateVisitor &) = 0;
virtual const char *get_class() const = 0;
virtual int32_t get_hash() const = 0;
};
Expand All @@ -51,8 +51,8 @@ class C$McMemcache final : public refcountable_polymorphic_php_classes<C$Memcach

using DummyVisitorMethods::accept;

void accept(InstanceMemoryEstimateVisitor &visitor) final {
visitor("", hosts);
void accept(CommonMemoryEstimateVisitor &visitor [[maybe_unused]]) final {
visitor("", array<int64_t>{});
}

const char *get_class() const final {
Expand All @@ -63,10 +63,6 @@ class C$McMemcache final : public refcountable_polymorphic_php_classes<C$Memcach
return static_cast<int32_t>(vk::std_hash(vk::string_view(C$McMemcache::get_class())));
}

friend inline int32_t f$estimate_memory_usage(const C$McMemcache::host &) {
return 0;
}

virtual C$McMemcache* virtual_builtin_clone() const noexcept {
return new C$McMemcache{*this};
}
Expand Down
21 changes: 0 additions & 21 deletions runtime/memory_usage.cpp

This file was deleted.

Loading

0 comments on commit 82f3514

Please sign in to comment.