Browse Source

[C++] [userver] bump userver commit, tune a bit (#8669)

* bump userver commit, erase logs with <error level

* replace SmallString with that of userver

* disable connlimit_mode: auto, since we know better
itrofimow 1 year ago
parent
commit
dfd3f3af4a

+ 3 - 3
frameworks/C++/userver/userver-bare.dockerfile

@@ -6,15 +6,15 @@ RUN apt update && \
 
 WORKDIR /src
 RUN git clone https://github.com/userver-framework/userver.git && \
-    cd userver && git checkout 781169b63bdbc012f7d98ed045bff75ff1b0b70d
+    cd userver && git checkout b85d540d7022e344f6fcf9fd467c67b046c961fe
 COPY userver_benchmark/ ./
 RUN mkdir build && cd build && \
     cmake -DUSERVER_IS_THE_ROOT_PROJECT=0 -DUSERVER_FEATURE_CRYPTOPP_BLAKE2=0 \
-          -DUSERVER_FEATURE_REDIS=0 -DUSERVER_FEATURE_CLICKHOUSE=0 -DUSERVER_FEATURE_MONGODB=0 -DUSERVER_FEATURE_RABBITMQ=0 -DUSERVER_FEATURE_GRPC=0 \
           -DUSERVER_FEATURE_UTEST=0 \
           -DUSERVER_FEATURE_POSTGRESQL=1 \
+          -DUSERVER_FEATURE_ERASE_LOG_WITH_LEVEL=warning \
           -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=native" -DCMAKE_C_FLAGS="-march=native" \
-          -DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_C_COMPILER=clang-16 -DUSERVER_USE_LD=lld-16 .. && \
+          -DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_C_COMPILER=clang-16 -DUSERVER_USE_LD=lld-16 -DUSERVER_LTO_CACHE=0 .. && \
     make -j $(nproc)
 
 FROM builder AS runner

+ 3 - 3
frameworks/C++/userver/userver.dockerfile

@@ -6,15 +6,15 @@ RUN apt update && \
 
 WORKDIR /src
 RUN git clone https://github.com/userver-framework/userver.git && \
-    cd userver && git checkout 781169b63bdbc012f7d98ed045bff75ff1b0b70d
+    cd userver && git checkout b85d540d7022e344f6fcf9fd467c67b046c961fe
 COPY userver_benchmark/ ./
 RUN mkdir build && cd build && \
     cmake -DUSERVER_IS_THE_ROOT_PROJECT=0 -DUSERVER_FEATURE_CRYPTOPP_BLAKE2=0 \
-          -DUSERVER_FEATURE_REDIS=0 -DUSERVER_FEATURE_CLICKHOUSE=0 -DUSERVER_FEATURE_MONGODB=0 -DUSERVER_FEATURE_RABBITMQ=0 -DUSERVER_FEATURE_GRPC=0 \
           -DUSERVER_FEATURE_UTEST=0 \
           -DUSERVER_FEATURE_POSTGRESQL=1 \
+          -DUSERVER_FEATURE_ERASE_LOG_WITH_LEVEL=warning \
           -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=native" -DCMAKE_C_FLAGS="-march=native" \
-          -DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_C_COMPILER=clang-16 -DUSERVER_USE_LD=lld-16 .. && \
+          -DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_C_COMPILER=clang-16 -DUSERVER_USE_LD=lld-16 -DUSERVER_LTO_CACHE=0 .. && \
     make -j $(nproc)
 
 FROM builder AS runner

+ 1 - 1
frameworks/C++/userver/userver_benchmark/CMakeLists.txt

@@ -9,10 +9,10 @@ file(GLOB_RECURSE SOURCES
   ${CMAKE_CURRENT_SOURCE_DIR}/bare/*.cpp
 )
 
-include(userver/cmake/SetupEnvironment.cmake)
 include(GNUInstallDirs)
 
 add_subdirectory(userver)
+userver_setup_environment()
 
 add_executable(${PROJECT_NAME} ${SOURCES} userver_techempower.cpp)
 target_link_libraries(${PROJECT_NAME} PRIVATE userver-core userver-postgresql)

+ 16 - 41
frameworks/C++/userver/userver_benchmark/bare/simple_connection.cpp

@@ -11,44 +11,19 @@
 #include <userver/engine/async.hpp>
 #include <userver/utils/datetime/wall_coarse_clock.hpp>
 #include <userver/utils/scope_guard.hpp>
+#include <userver/utils/small_string.hpp>
 
 namespace userver_techempower::bare {
 
 namespace {
 
-template <std::size_t N>
-class SmallString final {
- public:
-  SmallString() = default;
-
-  void Append(const char* data, std::size_t length) {
-    const auto old_size = Size();
-    data_.resize(old_size + length);
-    std::memcpy(Data() + old_size, data, length);
-  }
-
-  void Append(std::string_view sw) { Append(sw.data(), sw.size()); }
-
-  [[nodiscard]] std::string_view AsSw() const { return {Data(), Size()}; }
-
-  [[nodiscard]] char* Data() { return data_.data(); }
-  [[nodiscard]] const char* Data() const { return data_.data(); }
-
-  [[nodiscard]] std::size_t Size() const { return data_.size(); }
-
-  void Clear() { data_.resize(0); }
-
- private:
-  boost::container::small_vector<char, N> data_;
-};
-
 struct HttpParser final {
   http_parser parser{};
   http_parser_settings parser_settings{};
 
   std::function<void(std::string_view)> on_request_cb{};
 
-  SmallString<50> url;
+  userver::utils::SmallString<50> url;
 
   explicit HttpParser(std::function<void(std::string_view)> on_request_cb)
       : on_request_cb{std::move(on_request_cb)} {
@@ -68,26 +43,26 @@ struct HttpParser final {
   static int HttpOnUrl(http_parser* parser, const char* data,
                        std::size_t length) {
     auto* self = static_cast<HttpParser*>(parser->data);
-    self->url.Append(data, length);
+    self->url.append(std::string_view{data, length});
     return 0;
   }
 
   static int HttpOnMessageBegin(http_parser* parser) {
     auto* self = static_cast<HttpParser*>(parser->data);
-    self->url.Clear();
+    self->url.clear();
     return 0;
   }
 
   static int HttpOnMessageComplete(http_parser* parser) {
     auto* self = static_cast<HttpParser*>(parser->data);
-    self->on_request_cb(self->url.AsSw());
+    self->on_request_cb(static_cast<std::string_view>(self->url));
     return 0;
   }
 };
 
 class ResponseBuffers final {
  public:
-  using HeadersString = SmallString<200>;
+  using HeadersString = userver::utils::SmallString<200>;
 
   HeadersString& Next(userver::engine::io::Socket& socket, std::string&& body) {
     if (Size() == kMaxResponses) {
@@ -111,9 +86,9 @@ class ResponseBuffers final {
     std::size_t index = 0;
     std::size_t total_size = 0;
     for (const auto& response : responses_) {
-      iovec[index++] = {response.headers.Data(), response.headers.Size()};
+      iovec[index++] = {response.headers.data(), response.headers.size()};
       iovec[index++] = {response.body.data(), response.body.size()};
-      total_size += response.headers.Size() + response.body.size();
+      total_size += response.headers.size() + response.body.size();
     }
 
     if (socket.SendAll(iovec.data(), iovec.size(), {}) != total_size) {
@@ -191,17 +166,17 @@ void SimpleConnection::Process() {
     const auto content_length_str = std::to_string(response.body.size());
     auto& headers = buffers.Next(socket_, std::move(response.body));
 
-    headers.Append(kCommonHeaders);
-    headers.Append("Content-Type: ");
-    headers.Append(response.content_type);
+    headers.append(kCommonHeaders);
+    headers.append("Content-Type: ");
+    headers.append(response.content_type);
 
-    headers.Append("\r\nContent-Length: ");
-    headers.Append(content_length_str);
+    headers.append("\r\nContent-Length: ");
+    headers.append(content_length_str);
 
-    headers.Append("\r\nDate: ");
-    headers.Append(GetCachedDate());
+    headers.append("\r\nDate: ");
+    headers.append(GetCachedDate());
 
-    headers.Append(kHeadersEnd);
+    headers.append(kHeadersEnd);
   };
   HttpParser parser{handle_request};
 

+ 1 - 0
frameworks/C++/userver/userver_configs/static_config.yaml

@@ -83,6 +83,7 @@ components_manager:
             max_queue_size: 512
             connecting_limit: 15
             ignore_unused_query_params: true
+            connlimit_mode: manual
 
         single-query-handler:
             path: /db