From 30812205ddb3af08b58e37129d1298d17c6acb00 Mon Sep 17 00:00:00 2001 From: jinhelin Date: Wed, 17 Jan 2024 14:51:03 +0800 Subject: [PATCH 1/5] Storages: Not set CPU affinity of SegmentReader in unittests. --- .../Storages/DeltaMerge/ReadThread/CPU.cpp | 26 ++++++++++++++++ dbms/src/Storages/DeltaMerge/ReadThread/CPU.h | 3 ++ .../DeltaMerge/ReadThread/SegmentReader.cpp | 30 ++----------------- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/dbms/src/Storages/DeltaMerge/ReadThread/CPU.cpp b/dbms/src/Storages/DeltaMerge/ReadThread/CPU.cpp index 4ac47814df9..b0f1548cec8 100644 --- a/dbms/src/Storages/DeltaMerge/ReadThread/CPU.cpp +++ b/dbms/src/Storages/DeltaMerge/ReadThread/CPU.cpp @@ -120,4 +120,30 @@ std::vector> getNumaNodes(const LoggerPtr & log) std::vector> numa_nodes(1); // "One numa node" return numa_nodes; } + +void setCPUAffinity(const std::vector & cpus, const LoggerPtr & log) +{ + if (cpus.empty()) + { + return; + } +#ifdef __linux__ + cpu_set_t cpu_set; + CPU_ZERO(&cpu_set); + for (int i : cpus) + { + CPU_SET(i, &cpu_set); + } + int ret = sched_setaffinity(0, sizeof(cpu_set), &cpu_set); + if (ret != 0) + { + // It can be failed due to some CPU core cannot access, such as CPU offline. + LOG_INFO(log, "sched_setaffinity fail, cpus={} errno={}", cpus, std::strerror(errno)); + } + else + { + LOG_DEBUG(log, "sched_setaffinity succ, cpus={}", cpus); + } +#endif +} } // namespace DB::DM diff --git a/dbms/src/Storages/DeltaMerge/ReadThread/CPU.h b/dbms/src/Storages/DeltaMerge/ReadThread/CPU.h index 10d840d228c..9020d778f41 100644 --- a/dbms/src/Storages/DeltaMerge/ReadThread/CPU.h +++ b/dbms/src/Storages/DeltaMerge/ReadThread/CPU.h @@ -25,4 +25,7 @@ namespace DB::DM { // `getNumaNodes` returns cpus of each Numa node. std::vector> getNumaNodes(const LoggerPtr & log); + +// Bind the this thread to `cpus`. +void setCPUAffinity(const std::vector & cpus, const LoggerPtr & log); } // namespace DB::DM diff --git a/dbms/src/Storages/DeltaMerge/ReadThread/SegmentReader.cpp b/dbms/src/Storages/DeltaMerge/ReadThread/SegmentReader.cpp index 570d67bd5a6..cb0b090bceb 100644 --- a/dbms/src/Storages/DeltaMerge/ReadThread/SegmentReader.cpp +++ b/dbms/src/Storages/DeltaMerge/ReadThread/SegmentReader.cpp @@ -48,32 +48,6 @@ class SegmentReader std::thread::id getId() const { return t.get_id(); } private: - void setCPUAffinity() - { - if (cpus.empty()) - { - return; - } -#ifdef __linux__ - cpu_set_t cpu_set; - CPU_ZERO(&cpu_set); - for (int i : cpus) - { - CPU_SET(i, &cpu_set); - } - int ret = sched_setaffinity(0, sizeof(cpu_set), &cpu_set); - if (ret != 0) - { - // It can be failed due to some CPU core cannot access, such as CPU offline. - LOG_WARNING(log, "sched_setaffinity fail, cpus={} errno={}", cpus, std::strerror(errno)); - } - else - { - LOG_DEBUG(log, "sched_setaffinity succ, cpus={}", cpus); - } -#endif - } - bool isStop() { return stop.load(std::memory_order_relaxed); } void readSegments() @@ -141,7 +115,9 @@ class SegmentReader void run() { - setCPUAffinity(); +#ifndef DBMS_PUBLIC_GTEST // Does not bind CPUs in gtest. + setCPUAffinity(cpus, log); +#endif setThreadName(name.c_str()); while (!isStop()) { From 0657a5b0f132b7c154582a32728852a5c15ff693 Mon Sep 17 00:00:00 2001 From: JaySon-Huang Date: Wed, 31 Jan 2024 15:22:59 +0800 Subject: [PATCH 2/5] Show more info of test env --- tests/docker/run.sh | 2 ++ tests/docker/util.sh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/docker/run.sh b/tests/docker/run.sh index d4741e478ac..d06131531ec 100755 --- a/tests/docker/run.sh +++ b/tests/docker/run.sh @@ -22,6 +22,7 @@ df -h grep ^ /sys/block/*/queue/rotational cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c +lscpu cat /proc/meminfo uname -a hostname @@ -29,6 +30,7 @@ lsmod dmidecode | grep 'Product Name' free -mh cat /proc/loadavg +ldd --version set -e diff --git a/tests/docker/util.sh b/tests/docker/util.sh index 02ff195104b..ed33cdedd4c 100644 --- a/tests/docker/util.sh +++ b/tests/docker/util.sh @@ -21,6 +21,7 @@ function show_env() { grep ^ /sys/block/*/queue/rotational cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c + lscpu cat /proc/meminfo uname -a hostname @@ -28,6 +29,7 @@ function show_env() { dmidecode | grep 'Product Name' free -mh cat /proc/loadavg + ldd --version set -e } From 92d1a9b01cf2c3a173620b31ada7d76a71d05ca8 Mon Sep 17 00:00:00 2001 From: JaySon-Huang Date: Wed, 31 Jan 2024 15:23:27 +0800 Subject: [PATCH 3/5] Align missing comments --- .../DeltaMerge/tests/gtest_dm_delta_merge_store.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dbms/src/Storages/DeltaMerge/tests/gtest_dm_delta_merge_store.cpp b/dbms/src/Storages/DeltaMerge/tests/gtest_dm_delta_merge_store.cpp index 50ff4b4a2ed..cab4ec04b42 100644 --- a/dbms/src/Storages/DeltaMerge/tests/gtest_dm_delta_merge_store.cpp +++ b/dbms/src/Storages/DeltaMerge/tests/gtest_dm_delta_merge_store.cpp @@ -1561,7 +1561,9 @@ CATCH TEST_P(DeltaMergeStoreRWTest, IngestDupHandleVersion) try { - setStorageFormat(5); // Some old formats does not support ingest DMFiles. + // Some old formats does not support ingest DMFiles. + if (mode == TestMode::V1_BlockOnly) + return; // Add a column for extra value. const String value_col_name = "value"; @@ -1594,6 +1596,7 @@ try /* is_fast_scan= */ false, DEFAULT_BLOCK_SIZE)[0]; std::unordered_map data; + stream->readPrefix(); for (;;) { auto block = stream->read(); @@ -1608,6 +1611,7 @@ try data[handle[i]] = value[i]; } } + stream->readSuffix(); return data; }; From d8d3edb34404e4e75221aa5cecd39beb1349f5a0 Mon Sep 17 00:00:00 2001 From: JaySon-Huang Date: Wed, 31 Jan 2024 15:24:02 +0800 Subject: [PATCH 4/5] Only print the errno --- dbms/src/Storages/DeltaMerge/ReadThread/CPU.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dbms/src/Storages/DeltaMerge/ReadThread/CPU.cpp b/dbms/src/Storages/DeltaMerge/ReadThread/CPU.cpp index b0f1548cec8..fb701f2c371 100644 --- a/dbms/src/Storages/DeltaMerge/ReadThread/CPU.cpp +++ b/dbms/src/Storages/DeltaMerge/ReadThread/CPU.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -138,7 +139,7 @@ void setCPUAffinity(const std::vector & cpus, const LoggerPtr & log) if (ret != 0) { // It can be failed due to some CPU core cannot access, such as CPU offline. - LOG_INFO(log, "sched_setaffinity fail, cpus={} errno={}", cpus, std::strerror(errno)); + LOG_WARNING(log, "sched_setaffinity fail, cpus={} errno={}", cpus, errno); } else { From 8e2af982cae642d5b84dae6129cd79da247b222c Mon Sep 17 00:00:00 2001 From: JaySon Date: Wed, 31 Jan 2024 15:47:39 +0800 Subject: [PATCH 5/5] Add back --- dbms/src/Storages/DeltaMerge/ReadThread/SegmentReader.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/dbms/src/Storages/DeltaMerge/ReadThread/SegmentReader.cpp b/dbms/src/Storages/DeltaMerge/ReadThread/SegmentReader.cpp index cb0b090bceb..f7abfc78b68 100644 --- a/dbms/src/Storages/DeltaMerge/ReadThread/SegmentReader.cpp +++ b/dbms/src/Storages/DeltaMerge/ReadThread/SegmentReader.cpp @@ -115,9 +115,7 @@ class SegmentReader void run() { -#ifndef DBMS_PUBLIC_GTEST // Does not bind CPUs in gtest. setCPUAffinity(cpus, log); -#endif setThreadName(name.c_str()); while (!isStop()) {