Skip to content

Commit dfd3f3a

Browse files
authored
[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
1 parent a587101 commit dfd3f3a

File tree

5 files changed

+24
-48
lines changed

5 files changed

+24
-48
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ RUN apt update && \
66

77
WORKDIR /src
88
RUN git clone https://github.com/userver-framework/userver.git && \
9-
cd userver && git checkout 781169b63bdbc012f7d98ed045bff75ff1b0b70d
9+
cd userver && git checkout b85d540d7022e344f6fcf9fd467c67b046c961fe
1010
COPY userver_benchmark/ ./
1111
RUN mkdir build && cd build && \
1212
cmake -DUSERVER_IS_THE_ROOT_PROJECT=0 -DUSERVER_FEATURE_CRYPTOPP_BLAKE2=0 \
13-
-DUSERVER_FEATURE_REDIS=0 -DUSERVER_FEATURE_CLICKHOUSE=0 -DUSERVER_FEATURE_MONGODB=0 -DUSERVER_FEATURE_RABBITMQ=0 -DUSERVER_FEATURE_GRPC=0 \
1413
-DUSERVER_FEATURE_UTEST=0 \
1514
-DUSERVER_FEATURE_POSTGRESQL=1 \
15+
-DUSERVER_FEATURE_ERASE_LOG_WITH_LEVEL=warning \
1616
-DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=native" -DCMAKE_C_FLAGS="-march=native" \
17-
-DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_C_COMPILER=clang-16 -DUSERVER_USE_LD=lld-16 .. && \
17+
-DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_C_COMPILER=clang-16 -DUSERVER_USE_LD=lld-16 -DUSERVER_LTO_CACHE=0 .. && \
1818
make -j $(nproc)
1919

2020
FROM builder AS runner

frameworks/C++/userver/userver.dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ RUN apt update && \
66

77
WORKDIR /src
88
RUN git clone https://github.com/userver-framework/userver.git && \
9-
cd userver && git checkout 781169b63bdbc012f7d98ed045bff75ff1b0b70d
9+
cd userver && git checkout b85d540d7022e344f6fcf9fd467c67b046c961fe
1010
COPY userver_benchmark/ ./
1111
RUN mkdir build && cd build && \
1212
cmake -DUSERVER_IS_THE_ROOT_PROJECT=0 -DUSERVER_FEATURE_CRYPTOPP_BLAKE2=0 \
13-
-DUSERVER_FEATURE_REDIS=0 -DUSERVER_FEATURE_CLICKHOUSE=0 -DUSERVER_FEATURE_MONGODB=0 -DUSERVER_FEATURE_RABBITMQ=0 -DUSERVER_FEATURE_GRPC=0 \
1413
-DUSERVER_FEATURE_UTEST=0 \
1514
-DUSERVER_FEATURE_POSTGRESQL=1 \
15+
-DUSERVER_FEATURE_ERASE_LOG_WITH_LEVEL=warning \
1616
-DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=native" -DCMAKE_C_FLAGS="-march=native" \
17-
-DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_C_COMPILER=clang-16 -DUSERVER_USE_LD=lld-16 .. && \
17+
-DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_C_COMPILER=clang-16 -DUSERVER_USE_LD=lld-16 -DUSERVER_LTO_CACHE=0 .. && \
1818
make -j $(nproc)
1919

2020
FROM builder AS runner

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ file(GLOB_RECURSE SOURCES
99
${CMAKE_CURRENT_SOURCE_DIR}/bare/*.cpp
1010
)
1111

12-
include(userver/cmake/SetupEnvironment.cmake)
1312
include(GNUInstallDirs)
1413

1514
add_subdirectory(userver)
15+
userver_setup_environment()
1616

1717
add_executable(${PROJECT_NAME} ${SOURCES} userver_techempower.cpp)
1818
target_link_libraries(${PROJECT_NAME} PRIVATE userver-core userver-postgresql)

frameworks/C++/userver/userver_benchmark/bare/simple_connection.cpp

Lines changed: 16 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -11,44 +11,19 @@
1111
#include <userver/engine/async.hpp>
1212
#include <userver/utils/datetime/wall_coarse_clock.hpp>
1313
#include <userver/utils/scope_guard.hpp>
14+
#include <userver/utils/small_string.hpp>
1415

1516
namespace userver_techempower::bare {
1617

1718
namespace {
1819

19-
template <std::size_t N>
20-
class SmallString final {
21-
public:
22-
SmallString() = default;
23-
24-
void Append(const char* data, std::size_t length) {
25-
const auto old_size = Size();
26-
data_.resize(old_size + length);
27-
std::memcpy(Data() + old_size, data, length);
28-
}
29-
30-
void Append(std::string_view sw) { Append(sw.data(), sw.size()); }
31-
32-
[[nodiscard]] std::string_view AsSw() const { return {Data(), Size()}; }
33-
34-
[[nodiscard]] char* Data() { return data_.data(); }
35-
[[nodiscard]] const char* Data() const { return data_.data(); }
36-
37-
[[nodiscard]] std::size_t Size() const { return data_.size(); }
38-
39-
void Clear() { data_.resize(0); }
40-
41-
private:
42-
boost::container::small_vector<char, N> data_;
43-
};
44-
4520
struct HttpParser final {
4621
http_parser parser{};
4722
http_parser_settings parser_settings{};
4823

4924
std::function<void(std::string_view)> on_request_cb{};
5025

51-
SmallString<50> url;
26+
userver::utils::SmallString<50> url;
5227

5328
explicit HttpParser(std::function<void(std::string_view)> on_request_cb)
5429
: on_request_cb{std::move(on_request_cb)} {
@@ -68,26 +43,26 @@ struct HttpParser final {
6843
static int HttpOnUrl(http_parser* parser, const char* data,
6944
std::size_t length) {
7045
auto* self = static_cast<HttpParser*>(parser->data);
71-
self->url.Append(data, length);
46+
self->url.append(std::string_view{data, length});
7247
return 0;
7348
}
7449

7550
static int HttpOnMessageBegin(http_parser* parser) {
7651
auto* self = static_cast<HttpParser*>(parser->data);
77-
self->url.Clear();
52+
self->url.clear();
7853
return 0;
7954
}
8055

8156
static int HttpOnMessageComplete(http_parser* parser) {
8257
auto* self = static_cast<HttpParser*>(parser->data);
83-
self->on_request_cb(self->url.AsSw());
58+
self->on_request_cb(static_cast<std::string_view>(self->url));
8459
return 0;
8560
}
8661
};
8762

8863
class ResponseBuffers final {
8964
public:
90-
using HeadersString = SmallString<200>;
65+
using HeadersString = userver::utils::SmallString<200>;
9166

9267
HeadersString& Next(userver::engine::io::Socket& socket, std::string&& body) {
9368
if (Size() == kMaxResponses) {
@@ -111,9 +86,9 @@ class ResponseBuffers final {
11186
std::size_t index = 0;
11287
std::size_t total_size = 0;
11388
for (const auto& response : responses_) {
114-
iovec[index++] = {response.headers.Data(), response.headers.Size()};
89+
iovec[index++] = {response.headers.data(), response.headers.size()};
11590
iovec[index++] = {response.body.data(), response.body.size()};
116-
total_size += response.headers.Size() + response.body.size();
91+
total_size += response.headers.size() + response.body.size();
11792
}
11893

11994
if (socket.SendAll(iovec.data(), iovec.size(), {}) != total_size) {
@@ -191,17 +166,17 @@ void SimpleConnection::Process() {
191166
const auto content_length_str = std::to_string(response.body.size());
192167
auto& headers = buffers.Next(socket_, std::move(response.body));
193168

194-
headers.Append(kCommonHeaders);
195-
headers.Append("Content-Type: ");
196-
headers.Append(response.content_type);
169+
headers.append(kCommonHeaders);
170+
headers.append("Content-Type: ");
171+
headers.append(response.content_type);
197172

198-
headers.Append("\r\nContent-Length: ");
199-
headers.Append(content_length_str);
173+
headers.append("\r\nContent-Length: ");
174+
headers.append(content_length_str);
200175

201-
headers.Append("\r\nDate: ");
202-
headers.Append(GetCachedDate());
176+
headers.append("\r\nDate: ");
177+
headers.append(GetCachedDate());
203178

204-
headers.Append(kHeadersEnd);
179+
headers.append(kHeadersEnd);
205180
};
206181
HttpParser parser{handle_request};
207182

frameworks/C++/userver/userver_configs/static_config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ components_manager:
8383
max_queue_size: 512
8484
connecting_limit: 15
8585
ignore_unused_query_params: true
86+
connlimit_mode: manual
8687

8788
single-query-handler:
8889
path: /db

0 commit comments

Comments
 (0)