-
Notifications
You must be signed in to change notification settings - Fork 411
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
close #6434
- Loading branch information
1 parent
3677d68
commit 7ea00bf
Showing
11 changed files
with
422 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
// Copyright 2022 PingCAP, Ltd. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#include <Common/Logger.h> | ||
#include <Common/getNumberOfLogicalCPUCores.h> | ||
#include <common/logger_useful.h> | ||
#include <common/types.h> | ||
|
||
namespace CPUCores | ||
{ | ||
UInt16 number_of_logical_cpu_cores = std::thread::hardware_concurrency(); | ||
UInt16 number_of_physical_cpu_cores = std::thread::hardware_concurrency() / 2; | ||
} // namespace CPUCores | ||
|
||
|
||
UInt16 getNumberOfLogicalCPUCores() | ||
{ | ||
return CPUCores::number_of_logical_cpu_cores; | ||
} | ||
|
||
UInt16 getNumberOfPhysicalCPUCores() | ||
{ | ||
return CPUCores::number_of_physical_cpu_cores; | ||
} | ||
|
||
// We should call this function before Context has been created, | ||
// which will call `getNumberOfLogicalCPUCores`, or we can not | ||
// set cpu cores any more. | ||
void setNumberOfLogicalCPUCores(UInt16 number_of_logical_cpu_cores_) | ||
{ | ||
CPUCores::number_of_logical_cpu_cores = number_of_logical_cpu_cores_; | ||
} | ||
|
||
void computeAndSetNumberOfPhysicalCPUCores(UInt16 number_of_logical_cpu_cores_, UInt16 number_of_hardware_physical_cores) | ||
{ | ||
// First of all, we need to take consideration of two situation: | ||
// 1. tiflash on physical machine. | ||
// In old codes, tiflash needs to set max_threads which is equal to | ||
// physical cpu cores, so we need to ensure this behavior is not broken. | ||
// 2. tiflash on virtual environment. | ||
// In virtual environment, when setting max_threads, we can't directly | ||
// get physical cpu cores to set this variable because only host machine's | ||
// physical cpu core can be reached. So, number of physical cpus cores can | ||
// only be assigned by calculated with logical cpu cores. | ||
// | ||
// - `number_of_logical_cpu_cores_` which represents how many logical cpu cores a tiflash could use(no matter in physical or virtual environment) is assigned from ServerInfo. | ||
// - `hardware_logical_cpu_cores` represents how many logical cpu cores the host physical machine has. | ||
// - `number_of_hardware_physical_cores` represents how many physical cpu cores the host physical machine has. | ||
// - `(hardware_logical_cpu_cores / number_of_hardware_physical_cores)` means how many logical cpu core a physical cpu core has. | ||
// - `number_of_logical_cpu_cores_ / (hardware_logical_cpu_cores / number_of_hardware_physical_cores)` means how many physical cpu cores the tiflash process could use. (Actually, it's needless to get physical cpu cores in virtual environment, but we must ensure the behavior `1` is not broken) | ||
auto hardware_logical_cpu_cores = std::thread::hardware_concurrency(); | ||
UInt16 physical_cpu_cores = number_of_logical_cpu_cores_ / (hardware_logical_cpu_cores / number_of_hardware_physical_cores); | ||
CPUCores::number_of_physical_cpu_cores = physical_cpu_cores > 0 ? physical_cpu_cores : 1; | ||
auto log = DB::Logger::get("CPUCores"); | ||
LOG_FMT_INFO( | ||
log, | ||
"logical cpu cores: {}, hardware logical cpu cores: {}, hardware physical cpu cores: {}, physical cpu cores: {}, number_of_physical_cpu_cores: {}", | ||
number_of_logical_cpu_cores_, | ||
hardware_logical_cpu_cores, | ||
number_of_hardware_physical_cores, | ||
physical_cpu_cores, | ||
CPUCores::number_of_physical_cpu_cores); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.