Avoid unexpected scheduling to ECore on Hybrid Cores Windows platform (#21543)

* set core_type = MAIN_CORE_PROC with latency mode and enable hyper threading in pecore machine

* add test case

* change pcore_only to ecore_used

---------

Co-authored-by: Wanglei Shen <wanglei.shen@intel.com>
This commit is contained in:
Sun XiaoxiaandWanglei Shen authored and GitHub committed 2023-12-15 11:24:43 +00:00
1 parent 7a09894bdc
commit 406593a6d8
2 files changed
+97 -3

No files matched your search

@@ -25,6 +25,7 @@ void get_cur_stream_info(const int stream_id,
int stream_total = 0;
size_t stream_info_id = 0;
bool cpu_reserve = cpu_reservation;
bool ecore_used = false;
for (size_t i = 0; i < streams_info_table.size(); i++) {
stream_total += streams_info_table[i][NUMBER_OF_STREAMS];
if (stream_id < stream_total) {
@@ -39,9 +40,10 @@ void get_cur_stream_info(const int stream_id,
if (core_type == ALL_PROC) {
for (size_t i = stream_info_id + 1; i < streams_info_table.size(); i++) {
if (streams_info_table[i][NUMBER_OF_STREAMS] == 0) {
if (streams_info_table[i][PROC_TYPE] == HYPER_THREADING_PROC) {
if (streams_info_table[i][PROC_TYPE] == EFFICIENT_CORE_PROC) {
ecore_used = true;
} else if (streams_info_table[i][PROC_TYPE] == HYPER_THREADING_PROC) {
max_threads_per_core = 2;
break;
}
} else {
break;
@@ -62,8 +64,13 @@ void get_cur_stream_info(const int stream_id,
stream_type = STREAM_WITH_OBSERVE;
} else {
stream_type = STREAM_WITHOUT_PARAM;
// Pcore only or Ecore only with no cpu binding in hybrid cores machine
if (proc_type_table[0][EFFICIENT_CORE_PROC] > 0 && core_type != ALL_PROC) {
stream_type = STREAM_WITH_CORE_TYPE;
} else if (proc_type_table[0][EFFICIENT_CORE_PROC] > 0 && core_type == ALL_PROC &&
!ecore_used) { // Latency mode and enable hyper threading in hybrid cores machine
stream_type = STREAM_WITH_CORE_TYPE;
core_type = MAIN_CORE_PROC;
} else if (proc_type_table.size() > 1 && numa_node_id >= 0) {
stream_type = STREAM_WITH_NUMA_ID;
}
@@ -397,6 +397,29 @@ LinuxCpuStreamTypeCase _1sockets_12cores_pcore_nobinding = {
{0},
{1},
};
LinuxCpuStreamTypeCase _1sockets_12cores_pcore_nobinding_hyper_threading = {
false,
1,
{
{0, 0, 0, 0, HYPER_THREADING_PROC, 0, -1}, {1, 0, 0, 0, MAIN_CORE_PROC, 0, -1},
{2, 0, 0, 1, HYPER_THREADING_PROC, 1, -1}, {3, 0, 0, 1, MAIN_CORE_PROC, 1, -1},
{4, 0, 0, 2, HYPER_THREADING_PROC, 2, -1}, {5, 0, 0, 2, MAIN_CORE_PROC, 2, -1},
{6, 0, 0, 3, HYPER_THREADING_PROC, 3, -1}, {7, 0, 0, 3, MAIN_CORE_PROC, 3, -1},
{8, 0, 0, 4, HYPER_THREADING_PROC, 4, -1}, {9, 0, 0, 4, MAIN_CORE_PROC, 4, -1},
{10, 0, 0, 5, HYPER_THREADING_PROC, 5, -1}, {11, 0, 0, 5, MAIN_CORE_PROC, 5, -1},
{12, 0, 0, 6, HYPER_THREADING_PROC, 6, -1}, {13, 0, 0, 6, MAIN_CORE_PROC, 6, -1},
{14, 0, 0, 7, HYPER_THREADING_PROC, 7, -1}, {15, 0, 0, 7, MAIN_CORE_PROC, 7, -1},
{16, 0, 0, 8, EFFICIENT_CORE_PROC, 8, -1}, {17, 0, 0, 9, EFFICIENT_CORE_PROC, 8, -1},
{18, 0, 0, 10, EFFICIENT_CORE_PROC, 8, -1}, {19, 0, 0, 11, EFFICIENT_CORE_PROC, 8, -1},
},
{{20, 8, 4, 8, 0, 0}},
{{1, ALL_PROC, 16, 0, 0}, {0, MAIN_CORE_PROC, 8, 0, 0}, {0, HYPER_THREADING_PROC, 8, 0, 0}},
{STREAM_WITH_CORE_TYPE},
{16},
{MAIN_CORE_PROC},
{0},
{2},
};
LinuxCpuStreamTypeCase _1sockets_12cores_pcore_binding = {
true,
1,
@@ -426,6 +449,35 @@ LinuxCpuStreamTypeCase _1sockets_12cores_pcore_binding = {
{0, 0},
{1, 1},
};
LinuxCpuStreamTypeCase _1sockets_12cores_pcore_binding_hyper_threading = {
true,
1,
{
{0, 0, 0, 0, HYPER_THREADING_PROC, 0, -1}, {1, 0, 0, 0, MAIN_CORE_PROC, 0, -1},
{2, 0, 0, 1, HYPER_THREADING_PROC, 1, -1}, {3, 0, 0, 1, MAIN_CORE_PROC, 1, -1},
{4, 0, 0, 2, HYPER_THREADING_PROC, 2, -1}, {5, 0, 0, 2, MAIN_CORE_PROC, 2, -1},
{6, 0, 0, 3, HYPER_THREADING_PROC, 3, -1}, {7, 0, 0, 3, MAIN_CORE_PROC, 3, -1},
{8, 0, 0, 4, HYPER_THREADING_PROC, 4, -1}, {9, 0, 0, 4, MAIN_CORE_PROC, 4, -1},
{10, 0, 0, 5, HYPER_THREADING_PROC, 5, -1}, {11, 0, 0, 5, MAIN_CORE_PROC, 5, -1},
{12, 0, 0, 6, HYPER_THREADING_PROC, 6, -1}, {13, 0, 0, 6, MAIN_CORE_PROC, 6, -1},
{14, 0, 0, 7, HYPER_THREADING_PROC, 7, -1}, {15, 0, 0, 7, MAIN_CORE_PROC, 7, -1},
{16, 0, 0, 8, EFFICIENT_CORE_PROC, 8, -1}, {17, 0, 0, 9, EFFICIENT_CORE_PROC, 8, -1},
{18, 0, 0, 10, EFFICIENT_CORE_PROC, 8, -1}, {19, 0, 0, 11, EFFICIENT_CORE_PROC, 8, -1},
},
{{20, 8, 4, 8, 0, 0}},
{{1, MAIN_CORE_PROC, 8, 0, 0}, {1, HYPER_THREADING_PROC, 8, 0, 0}},
{
STREAM_WITH_OBSERVE,
STREAM_WITH_OBSERVE,
},
{8, 8},
{
MAIN_CORE_PROC,
HYPER_THREADING_PROC,
},
{0, 0},
{1, 2},
};
LinuxCpuStreamTypeCase _1sockets_12cores_ecore_nobinding = {
false,
1,
@@ -517,6 +569,38 @@ LinuxCpuStreamTypeCase _1sockets_24cores_all_proc = {
{0},
{1},
};
LinuxCpuStreamTypeCase _1sockets_24cores_all_proc_hyper_threading = {
false,
1,
{
{0, 0, 0, 0, HYPER_THREADING_PROC, 0, -1}, {1, 0, 0, 0, MAIN_CORE_PROC, 0, -1},
{2, 0, 0, 1, HYPER_THREADING_PROC, 1, -1}, {3, 0, 0, 1, MAIN_CORE_PROC, 1, -1},
{4, 0, 0, 2, HYPER_THREADING_PROC, 2, -1}, {5, 0, 0, 2, MAIN_CORE_PROC, 2, -1},
{6, 0, 0, 3, HYPER_THREADING_PROC, 3, -1}, {7, 0, 0, 3, MAIN_CORE_PROC, 3, -1},
{8, 0, 0, 4, HYPER_THREADING_PROC, 4, -1}, {9, 0, 0, 4, MAIN_CORE_PROC, 4, -1},
{10, 0, 0, 5, HYPER_THREADING_PROC, 5, -1}, {11, 0, 0, 5, MAIN_CORE_PROC, 5, -1},
{12, 0, 0, 6, HYPER_THREADING_PROC, 6, -1}, {13, 0, 0, 6, MAIN_CORE_PROC, 6, -1},
{14, 0, 0, 7, HYPER_THREADING_PROC, 7, -1}, {15, 0, 0, 7, MAIN_CORE_PROC, 7, -1},
{16, 0, 0, 8, EFFICIENT_CORE_PROC, 8, -1}, {17, 0, 0, 9, EFFICIENT_CORE_PROC, 8, -1},
{18, 0, 0, 10, EFFICIENT_CORE_PROC, 8, -1}, {19, 0, 0, 11, EFFICIENT_CORE_PROC, 8, -1},
{20, 0, 0, 12, EFFICIENT_CORE_PROC, 9, -1}, {21, 0, 0, 13, EFFICIENT_CORE_PROC, 9, -1},
{22, 0, 0, 14, EFFICIENT_CORE_PROC, 9, -1}, {23, 0, 0, 15, EFFICIENT_CORE_PROC, 9, -1},
{24, 0, 0, 16, EFFICIENT_CORE_PROC, 10, -1}, {25, 0, 0, 17, EFFICIENT_CORE_PROC, 10, -1},
{26, 0, 0, 18, EFFICIENT_CORE_PROC, 10, -1}, {27, 0, 0, 19, EFFICIENT_CORE_PROC, 10, -1},
{28, 0, 0, 20, EFFICIENT_CORE_PROC, 11, -1}, {29, 0, 0, 21, EFFICIENT_CORE_PROC, 11, -1},
{30, 0, 0, 22, EFFICIENT_CORE_PROC, 11, -1}, {31, 0, 0, 23, EFFICIENT_CORE_PROC, 11, -1},
},
{{32, 8, 16, 8, 0, 0}},
{{1, ALL_PROC, 32, 0, 0},
{0, MAIN_CORE_PROC, 8, 0, 0},
{0, HYPER_THREADING_PROC, 8, 0, 0},
{0, EFFICIENT_CORE_PROC, 16, 0, 0}},
{STREAM_WITHOUT_PARAM},
{32},
{ALL_PROC},
{0},
{2},
};
TEST_P(LinuxCpuStreamTypeTests, LinuxCpuStreamType) {}
@@ -528,9 +612,12 @@ INSTANTIATE_TEST_SUITE_P(CpuStreamType,
_1sockets_4cores_nobinding,
_1sockets_4cores_binding,
_1sockets_12cores_pcore_nobinding,
_1sockets_12cores_pcore_nobinding_hyper_threading,
_1sockets_12cores_pcore_binding,
_1sockets_12cores_pcore_binding_hyper_threading,
_1sockets_12cores_ecore_nobinding,
_1sockets_12cores_ecore_binding,
_1sockets_24cores_all_proc));
_1sockets_24cores_all_proc,
_1sockets_24cores_all_proc_hyper_threading));
#endif
} // namespace