Skip to content

std::regex overhead is too high during CDS updates #14439

@jmarantz

Description

@jmarantz

Locally we have seen flame-graphs implicating the regex parsing in tag-extraction taking significant amount of time, even though the heaviest regex has now been converted to RE2. Combined, all the other ones are still a CPU bottleneck.

If you simply convert the addRegex calls in source/common/config/well_known_names.cc to addRe2 the following RE2 compilation errors are reported when running unit tests:

 RUN      ] UtilityTest.createTagProducer
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^http(?=\.).*?\.dynamodb\.table(?=\.).*?\.capacity(?=\.).*?(\.__partition_id=(\w{7}))$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^http(?=\.).*?\.dynamodb.(?:operation|table(?=\.).*?\.capacity)(\.(.*?))(?:\.|$)': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^mongo(?=\.).*?\.collection(?=\.).*?\.callsite\.((.*?)\.).*?query.\w+?$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^http(?=\.).*?\.dynamodb.(?:table|error)\.((.*?)\.)': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^mongo(?=\.).*?\.collection\.((.*?)\.).*?query.\w+?$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^mongo(?=\.).*?\.cmd\.((.*?)\.)\w+?$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^cluster(?=\.).*?\.grpc(?=\.).*\.((.*?)\.)\w+?$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^http(?=\.).*?\.user_agent\.((.*?)\.)\w+?$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^vhost(?=\.).*?\.vcluster\.((.*?)\.)\w+?$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^http(?=\.).*?\.fault\.((.*?)\.)\w+?$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^listener(?=\.).*?\.ssl\.cipher(\.(.*?))$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^cluster(?=\.).*?\.ssl\.ciphers(\.(.*?))$': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^cluster(?=\.).*?\.grpc\.((.*?)\.)': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^listener(?=\.).*?\.http\.((.*?)\.)': invalid perl operator: (?=
external/com_googlesource_code_re2/re2/re2.cc:205: Error parsing '^http(?=\.).*?\.rds\.((.*?)\.)\w+?$': invalid perl operator: (?=
test/common/config/utility_test.cc:107: Failure
Expected equality of these values:
  extracted_name
    Which is: "http.config_test.rq_total"
  "http.rq_total"
Stack trace:
  0x18859b4: Envoy::Config::(anonymous namespace)::UtilityTest_createTagProducer_Test::TestBody()
  0x3dda514: testing::internal::HandleSehExceptionsInMethodIfSupported<>()
  0x3dc8fdb: testing::internal::HandleExceptionsInMethodIfSupported<>()
  0x3db4a73: testing::Test::Run()
  0x3db5447: testing::TestInfo::Run()
... Google Test internal frames ...

[  FAILED  ] UtilityTest.createTagProducer (97 ms)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions