xinyiZzz commented on code in PR #50107: URL: https://github.com/apache/doris/pull/50107#discussion_r2051919549
########## be/src/runtime/workload_group/workload_group_manager.cpp: ########## @@ -652,87 +656,88 @@ int64_t WorkloadGroupMgr::flush_memtable_from_current_group_(WorkloadGroupPtr wg return 0; } -int64_t WorkloadGroupMgr::revoke_memory_from_other_group_(std::shared_ptr<QueryContext> requestor, - bool hard_limit, int64_t need_free_mem) { - int64_t total_freed_mem = 0; - std::unique_ptr<RuntimeProfile> profile = std::make_unique<RuntimeProfile>("RevokeMemory"); - // 1. memtable like memory - // 2. query exceed workload group limit - int64_t freed_mem = revoke_overcommited_memory_(requestor, need_free_mem, profile.get()); - total_freed_mem += freed_mem; - // The revoke process may kill current requestor, so should return now. - if (need_free_mem - total_freed_mem < 0 || requestor->is_cancelled()) { - return total_freed_mem; - } - // TODO, remove cancel_top_query_in_overcommit_group_, in `revoke_overcommited_memory_` already include - // "cancel top query". - // if (hard_limit) { - // freed_mem = cancel_top_query_in_overcommit_group_(need_free_mem - total_freed_mem, - // doris::QUERY_MIN_MEMORY, profile.get()); - // } else { - // freed_mem = cancel_top_query_in_overcommit_group_( - // need_free_mem - total_freed_mem, requestor->get_mem_tracker()->consumption(), - // profile.get()); - // } - // total_freed_mem += freed_mem; - // // The revoke process may kill current requestor, so should return now. - // if (need_free_mem - total_freed_mem < 0 || requestor->is_cancelled()) { - // return total_freed_mem; - // } - return total_freed_mem; -} - // Revoke memory from workload group that exceed it's limit. For example, if the wg's limit is 10g, but used 12g // then should revoke 2g from the group. -int64_t WorkloadGroupMgr::revoke_overcommited_memory_(std::shared_ptr<QueryContext> requestor, - int64_t need_free_mem, - RuntimeProfile* profile) { - int64_t total_freed_mem = 0; - // 1. check memtable usage, and try to free them. - int64_t freed_mem = revoke_memtable_from_overcommited_groups_(need_free_mem, profile); - total_freed_mem += freed_mem; - // The revoke process may kill current requestor, so should return now. - if (need_free_mem - total_freed_mem < 0 || requestor->is_cancelled()) { - return total_freed_mem; - } - // 2. Cancel top usage query, one by one +int64_t WorkloadGroupMgr::revoke_memory_from_other_overcommited_groups_( + std::shared_ptr<ResourceContext> requestor, int64_t need_free_mem) { + int64_t freed_mem = 0; + MonotonicStopWatch watch; + watch.start(); + std::unique_ptr<RuntimeProfile> profile = + std::make_unique<RuntimeProfile>("RevokeMemoryFromOtherOvercommitedGroups"); + using WorkloadGroupMem = std::pair<WorkloadGroupPtr, int64_t>; auto cmp = [](WorkloadGroupMem left, WorkloadGroupMem right) { return left.second < right.second; }; - std::priority_queue<WorkloadGroupMem, std::vector<WorkloadGroupMem>, decltype(cmp)> heap(cmp); + std::priority_queue<WorkloadGroupMem, std::vector<WorkloadGroupMem>, decltype(cmp)> + exceeded_memory_heap(cmp); + int64_t total_exceeded_memory = 0; { std::shared_lock<std::shared_mutex> r_lock(_group_mutex); - for (auto iter = _workload_groups.begin(); iter != _workload_groups.end(); iter++) { + for (auto& _workload_group : _workload_groups) { Review Comment: done gpt自己改的,还是不行啊。。 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org