28-limit-thread-pools-via-env.patch 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. --- contrib/libs/grpc/src/core/lib/event_engine/thread_pool.cc (1c9f99d6c38355a4a99b04e59c154a9ae9cb2d58)
  2. +++ contrib/libs/grpc/src/core/lib/event_engine/thread_pool.cc (working tree)
  3. @@ -33,7 +33,8 @@
  4. #include "src/core/lib/event_engine/thread_local.h"
  5. #include "src/core/lib/gprpp/thd.h"
  6. #include "src/core/lib/gprpp/time.h"
  7. -
  8. +#include "src/core/lib/gprpp/env.h"
  9. +#include "src/core/lib/gpr/string.h"
  10. namespace {
  11. size_t threads_limit_ = 0;
  12. }
  13. @@ -41,6 +42,17 @@ namespace {
  14. namespace grpc_event_engine {
  15. namespace experimental {
  16. +size_t GetMaxPoolThreadFromEnv() {
  17. + auto value = grpc_core::GetEnv("GRPC_MAX_THREADS_THREAD_POOL_ENV");
  18. + if (!value.has_value()) return 0;
  19. + int parse_succeeded = gpr_parse_nonnegative_int(value->c_str());
  20. +
  21. + if (parse_succeeded <= 0) {
  22. + return 0;
  23. + }
  24. + return static_cast<size_t>(parse_succeeded);
  25. +}
  26. +
  27. size_t ThreadPool::SetThreadsLimit(size_t count) {
  28. size_t prev = threads_limit_;
  29. threads_limit_ = count;
  30. @@ -50,11 +62,19 @@ size_t ThreadPool::SetThreadsLimit(size_t count) {
  31. unsigned ThreadPool::GetMaxSystemThread() {
  32. unsigned max_threads = grpc_core::Clamp(gpr_cpu_num_cores(), 2u, 32u);
  33. + auto threads_limit_env = GetMaxPoolThreadFromEnv();
  34. + if (threads_limit_env) {
  35. + unsigned new_max_threads = std::min(max_threads, static_cast<unsigned>(threads_limit_env));
  36. + gpr_log(GPR_INFO, "Threads limit changed via env from %u to %u", max_threads, new_max_threads);
  37. + max_threads = new_max_threads;
  38. + }
  39. +
  40. if (threads_limit_) {
  41. unsigned new_max_threads = std::min(max_threads, static_cast<unsigned>(threads_limit_));
  42. gpr_log(GPR_INFO, "Threads limit changed from %u to %u", max_threads, new_max_threads);
  43. max_threads = new_max_threads;
  44. }
  45. + gpr_log(GPR_INFO, "Threads limit:[%u]", max_threads);
  46. return max_threads;
  47. }