From 6a4b352fbd75c91b81803d3cd764dab55ba2b82f Mon Sep 17 00:00:00 2001 From: Alexander Polyakov Date: Fri, 31 Jan 2025 17:43:52 +0300 Subject: [PATCH 1/4] do not initialize StringLibContext::static_buf and StringLibContext::mask_buffer --- runtime-common/stdlib/string/string-context.h | 17 +++++++++++------ runtime-light/state/instance-state.h | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/runtime-common/stdlib/string/string-context.h b/runtime-common/stdlib/string/string-context.h index af2809ebf1..d7bd78c1f3 100644 --- a/runtime-common/stdlib/string/string-context.h +++ b/runtime-common/stdlib/string/string-context.h @@ -30,18 +30,23 @@ inline constexpr std::string_view PERCENT_ = "%"; }; // namespace string_context_impl_ -class StringLibContext final : vk::not_copyable { +struct StringLibContext final : private vk::not_copyable { static constexpr int32_t MASK_BUFFER_LENGTH = 256; - -public: static constexpr int32_t STATIC_BUFFER_LENGTH = 1U << 23U; - std::array static_buf{}; - std::array mask_buffer{}; - int64_t str_replace_count_dummy{}; double default_similar_text_percent_stub{}; + // *** IMPORTANT *** + // Do not initialize this array. Initializing it would zero out the memory, + // which significantly impacts K2's performance due to the large size of the buffer. + // The buffer is intended to be used as raw storage, and its contents will be + // explicitly managed elsewhere in the code. + std::array static_buf; + std::array mask_buffer; + + StringLibContext() noexcept = default; + static StringLibContext &get() noexcept; }; diff --git a/runtime-light/state/instance-state.h b/runtime-light/state/instance-state.h index 70340d7004..1ccc04eeec 100644 --- a/runtime-light/state/instance-state.h +++ b/runtime-light/state/instance-state.h @@ -120,7 +120,7 @@ struct InstanceState final : vk::not_copyable { RegexInstanceState regex_instance_state; CurlInstanceState curl_instance_state{}; CryptoInstanceState crypto_instance_state{}; - StringInstanceState string_instance_state{}; + StringInstanceState string_instance_state; SystemInstanceState system_instance_state{}; FileSystemInstanceState file_system_instance_state{}; From 81dcdff6586ce93c0f6507fd746e9546bfa7bde2 Mon Sep 17 00:00:00 2001 From: Alexander Polyakov Date: Fri, 31 Jan 2025 17:47:45 +0300 Subject: [PATCH 2/4] rename StringLibContext::mask_buffer -> mask_buf --- runtime-common/stdlib/string/string-context.h | 2 +- runtime-common/stdlib/string/string-functions.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/runtime-common/stdlib/string/string-context.h b/runtime-common/stdlib/string/string-context.h index d7bd78c1f3..775ec4cada 100644 --- a/runtime-common/stdlib/string/string-context.h +++ b/runtime-common/stdlib/string/string-context.h @@ -43,7 +43,7 @@ struct StringLibContext final : private vk::not_copyable { // The buffer is intended to be used as raw storage, and its contents will be // explicitly managed elsewhere in the code. std::array static_buf; - std::array mask_buffer; + std::array mask_buf; StringLibContext() noexcept = default; diff --git a/runtime-common/stdlib/string/string-functions.cpp b/runtime-common/stdlib/string/string-functions.cpp index 0c76c9567c..9a15f870df 100644 --- a/runtime-common/stdlib/string/string-functions.cpp +++ b/runtime-common/stdlib/string/string-functions.cpp @@ -5,7 +5,6 @@ #include "runtime-common/stdlib/string/string-functions.h" #include -#include #include #include @@ -16,7 +15,7 @@ #include "runtime-common/stdlib/string/string-context.h" const char *get_mask(const string &what) noexcept { - auto &mask{StringLibContext::get().mask_buffer}; + auto &mask{StringLibContext::get().mask_buf}; std::memset(mask.data(), 0, mask.size()); int len = what.size(); From ebe2102115d9b40dbe296d9d220a87fd075f23eb Mon Sep 17 00:00:00 2001 From: Alexander Polyakov Date: Fri, 31 Jan 2025 17:49:20 +0300 Subject: [PATCH 3/4] fix include in instance-state.h --- runtime-light/state/instance-state.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime-light/state/instance-state.h b/runtime-light/state/instance-state.h index 1ccc04eeec..33853f5924 100644 --- a/runtime-light/state/instance-state.h +++ b/runtime-light/state/instance-state.h @@ -11,9 +11,9 @@ #include #include "common/mixin/not_copyable.h" +#include "runtime-common/core/allocator/runtime-allocator.h" #include "runtime-common/core/runtime-core.h" #include "runtime-common/core/std/containers.h" -#include "runtime-light/allocator/allocator.h" #include "runtime-light/core/globals/php-script-globals.h" #include "runtime-light/coroutine/task.h" #include "runtime-light/k2-platform/k2-api.h" From 6b4fed3d500e23c0acaecda1007624669108dafd Mon Sep 17 00:00:00 2001 From: Alexander Polyakov Date: Mon, 3 Feb 2025 12:27:32 +0300 Subject: [PATCH 4/4] change comment --- runtime-common/stdlib/string/string-context.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/runtime-common/stdlib/string/string-context.h b/runtime-common/stdlib/string/string-context.h index 775ec4cada..30540a1dc3 100644 --- a/runtime-common/stdlib/string/string-context.h +++ b/runtime-common/stdlib/string/string-context.h @@ -37,8 +37,7 @@ struct StringLibContext final : private vk::not_copyable { int64_t str_replace_count_dummy{}; double default_similar_text_percent_stub{}; - // *** IMPORTANT *** - // Do not initialize this array. Initializing it would zero out the memory, + // Do not initialize these arrays. Initializing it would zero out the memory, // which significantly impacts K2's performance due to the large size of the buffer. // The buffer is intended to be used as raw storage, and its contents will be // explicitly managed elsewhere in the code.