15de0a3e9SWalter Erquinigo //===-- ProcfsTests.cpp ---------------------------------------------------===//
25de0a3e9SWalter Erquinigo //
35de0a3e9SWalter Erquinigo // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45de0a3e9SWalter Erquinigo // See https://llvm.org/LICENSE.txt for license information.
55de0a3e9SWalter Erquinigo // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65de0a3e9SWalter Erquinigo //
75de0a3e9SWalter Erquinigo //===----------------------------------------------------------------------===//
85de0a3e9SWalter Erquinigo 
95de0a3e9SWalter Erquinigo #include "Procfs.h"
105de0a3e9SWalter Erquinigo 
115de0a3e9SWalter Erquinigo #include "lldb/Host/linux/Support.h"
125de0a3e9SWalter Erquinigo 
135de0a3e9SWalter Erquinigo #include "gmock/gmock.h"
145de0a3e9SWalter Erquinigo #include "gtest/gtest.h"
155de0a3e9SWalter Erquinigo 
165de0a3e9SWalter Erquinigo using namespace lldb_private;
175de0a3e9SWalter Erquinigo using namespace process_linux;
185de0a3e9SWalter Erquinigo using namespace llvm;
195de0a3e9SWalter Erquinigo 
TEST(Perf,HardcodedLogicalCoreIDs)205de0a3e9SWalter Erquinigo TEST(Perf, HardcodedLogicalCoreIDs) {
21*6a5355e8SWalter Erquinigo   Expected<std::vector<lldb::cpu_id_t>> cpu_ids =
225de0a3e9SWalter Erquinigo       GetAvailableLogicalCoreIDs(R"(processor       : 13
235de0a3e9SWalter Erquinigo vendor_id       : GenuineIntel
245de0a3e9SWalter Erquinigo cpu family      : 6
255de0a3e9SWalter Erquinigo model           : 85
265de0a3e9SWalter Erquinigo model name      : Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz
275de0a3e9SWalter Erquinigo stepping        : 4
285de0a3e9SWalter Erquinigo microcode       : 0x2000065
295de0a3e9SWalter Erquinigo cpu MHz         : 2886.370
305de0a3e9SWalter Erquinigo cache size      : 28160 KB
315de0a3e9SWalter Erquinigo physical id     : 1
325de0a3e9SWalter Erquinigo siblings        : 40
335de0a3e9SWalter Erquinigo core id         : 19
345de0a3e9SWalter Erquinigo cpu cores       : 20
355de0a3e9SWalter Erquinigo apicid          : 103
365de0a3e9SWalter Erquinigo initial apicid  : 103
375de0a3e9SWalter Erquinigo fpu             : yes
385de0a3e9SWalter Erquinigo fpu_exception   : yes
395de0a3e9SWalter Erquinigo cpuid level     : 22
405de0a3e9SWalter Erquinigo power management:
415de0a3e9SWalter Erquinigo 
425de0a3e9SWalter Erquinigo processor       : 24
435de0a3e9SWalter Erquinigo vendor_id       : GenuineIntel
445de0a3e9SWalter Erquinigo cpu family      : 6
455de0a3e9SWalter Erquinigo model           : 85
465de0a3e9SWalter Erquinigo model name      : Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz
475de0a3e9SWalter Erquinigo stepping        : 4
485de0a3e9SWalter Erquinigo microcode       : 0x2000065
495de0a3e9SWalter Erquinigo cpu MHz         : 2768.494
505de0a3e9SWalter Erquinigo cache size      : 28160 KB
515de0a3e9SWalter Erquinigo physical id     : 1
525de0a3e9SWalter Erquinigo siblings        : 40
535de0a3e9SWalter Erquinigo core id         : 20
545de0a3e9SWalter Erquinigo cpu cores       : 20
555de0a3e9SWalter Erquinigo apicid          : 105
565de0a3e9SWalter Erquinigo power management:
575de0a3e9SWalter Erquinigo 
585de0a3e9SWalter Erquinigo processor       : 35
595de0a3e9SWalter Erquinigo vendor_id       : GenuineIntel
605de0a3e9SWalter Erquinigo cpu family      : 6
615de0a3e9SWalter Erquinigo model           : 85
625de0a3e9SWalter Erquinigo model name      : Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz
635de0a3e9SWalter Erquinigo stepping        : 4
645de0a3e9SWalter Erquinigo microcode       : 0x2000065
655de0a3e9SWalter Erquinigo cpu MHz         : 2884.703
665de0a3e9SWalter Erquinigo cache size      : 28160 KB
675de0a3e9SWalter Erquinigo physical id     : 1
685de0a3e9SWalter Erquinigo siblings        : 40
695de0a3e9SWalter Erquinigo core id         : 24
705de0a3e9SWalter Erquinigo cpu cores       : 20
715de0a3e9SWalter Erquinigo apicid          : 113
725de0a3e9SWalter Erquinigo 
735de0a3e9SWalter Erquinigo processor       : 79
745de0a3e9SWalter Erquinigo vendor_id       : GenuineIntel
755de0a3e9SWalter Erquinigo cpu family      : 6
765de0a3e9SWalter Erquinigo model           : 85
775de0a3e9SWalter Erquinigo model name      : Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz
785de0a3e9SWalter Erquinigo stepping        : 4
795de0a3e9SWalter Erquinigo microcode       : 0x2000065
805de0a3e9SWalter Erquinigo cpu MHz         : 3073.955
815de0a3e9SWalter Erquinigo cache size      : 28160 KB
825de0a3e9SWalter Erquinigo physical id     : 1
835de0a3e9SWalter Erquinigo siblings        : 40
845de0a3e9SWalter Erquinigo core id         : 28
855de0a3e9SWalter Erquinigo cpu cores       : 20
865de0a3e9SWalter Erquinigo apicid          : 121
875de0a3e9SWalter Erquinigo power management:
885de0a3e9SWalter Erquinigo )");
895de0a3e9SWalter Erquinigo 
90*6a5355e8SWalter Erquinigo   ASSERT_TRUE((bool)cpu_ids);
91*6a5355e8SWalter Erquinigo   ASSERT_THAT(*cpu_ids, ::testing::ElementsAre(13, 24, 35, 79));
925de0a3e9SWalter Erquinigo }
935de0a3e9SWalter Erquinigo 
TEST(Perf,RealLogicalCoreIDs)945de0a3e9SWalter Erquinigo TEST(Perf, RealLogicalCoreIDs) {
955de0a3e9SWalter Erquinigo   // We first check we can read /proc/cpuinfo
965de0a3e9SWalter Erquinigo   auto buffer_or_error = errorOrToExpected(getProcFile("cpuinfo"));
975de0a3e9SWalter Erquinigo   if (!buffer_or_error)
985de0a3e9SWalter Erquinigo     GTEST_SKIP() << toString(buffer_or_error.takeError());
995de0a3e9SWalter Erquinigo 
1005de0a3e9SWalter Erquinigo   // At this point we shouldn't fail parsing the core ids
101*6a5355e8SWalter Erquinigo   Expected<ArrayRef<lldb::cpu_id_t>> cpu_ids = GetAvailableLogicalCoreIDs();
102*6a5355e8SWalter Erquinigo   ASSERT_TRUE((bool)cpu_ids);
103*6a5355e8SWalter Erquinigo   ASSERT_GT((int)cpu_ids->size(), 0) << "We must see at least one core";
1045de0a3e9SWalter Erquinigo }
105