MySQL 26.10.0
Source Code Documentation
system_info_linux_procfs.h
Go to the documentation of this file.
1/* Copyright (c) 2026, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#pragma once
25
26#include <functional>
27#include <istream>
28#include <string>
29#include <string_view>
30#include <unordered_set>
31#include <vector>
32
34
36
37/** Linux block device identity parsed from /proc/partitions. */
39 uint64_t major{0};
40 uint64_t minor{0};
41 std::string name;
42};
43
44/** Linux storage I/O capabilities parsed from /proc/diskstats. */
48};
49
50/** Linux procfs and sysfs roots used by storage collection. */
52 std::string proc_partitions;
53 std::string proc_diskstats;
54 std::string sys_class_block;
55};
56
57/** Assemble Linux storage capabilities from the supplied proc and sys roots. */
59 const Linux_storage_paths &paths,
60 const std::function<void()> &after_metadata = {});
61
62/** Check that a Linux device name is one safe path component. */
63[[nodiscard]] bool valid_linux_storage_device_name(std::string_view name);
64
65/** Read Linux block device identities from partitions input. */
67read_linux_partitions(std::istream &input);
68
69/** Read one Linux block device capacity and hardware sector size. */
71read_linux_storage_capacity(std::istream &size_input,
72 std::istream &sector_size_input,
73 std::string_view device);
74
75/** Resolve a partition relationship from its canonical sysfs path. */
77linux_partition_relationship(std::string_view canonical_path,
78 std::string_view device);
79
80/** Select the device queue attribute used for hardware sector size. */
82 std::string_view canonical_path, bool partition);
83
84/** Read Linux block device I/O capabilities from diskstats input. */
85[[nodiscard]] Linux_diskstats_snapshot read_linux_diskstats(
86 std::istream &input, const std::unordered_set<std::string> &whole_devices);
87
88/** Read the most specific matching mount from Linux mountinfo input. */
90 std::istream &input, std::string_view device_id,
91 std::string_view target_path);
92
93/** Read host memory capabilities from Linux meminfo input. */
94[[nodiscard]] Host_memory_snapshot read_linux_meminfo(std::istream &input);
95
96/** Read swap activity from Linux vmstat input. */
98 std::istream &input);
99
100/** Read host CPU capabilities from Linux stat input. */
101[[nodiscard]] Host_cpu_snapshot read_linux_cpu_stat(std::istream &input,
102 uint64_t ticks_per_second);
103
104/** Read process identity and memory from Linux status input. */
106 std::istream &input);
107
108/** Read process thread capabilities from one Linux stat record. */
110 std::istream &input, uint64_t expected_tid, uint64_t process_pid,
111 uint64_t ticks_per_second, uint64_t page_size);
112
113/** Read process thread I/O counters from one Linux io record. */
115 std::istream &input, uint64_t tid);
116
117} // namespace mysql::system_info::internal
Result of collecting one system information capability.
Definition: system_info.h:51
Definition: system_info_linux.cc:46
System_result< Filesystem_identity > read_linux_mount_info(std::istream &input, std::string_view device_id, std::string_view target_path)
Find a filesystem in /proc/self/mountinfo.
Definition: system_info_linux_procfs.cc:913
bool valid_linux_storage_device_name(std::string_view name)
Check that a Linux device name is one safe path component.
Definition: system_info_linux_procfs.cc:273
System_result< std::vector< Linux_block_device > > read_linux_partitions(std::istream &input)
Read the block device identity table from /proc/partitions.
Definition: system_info_linux_procfs.cc:296
Storage_snapshot query_linux_storage_devices(const Linux_storage_paths &paths, const std::function< void()> &after_metadata)
Assemble Linux storage metadata from procfs and sysfs.
Definition: system_info_linux_procfs.cc:624
System_result< Thread_io_counters > read_linux_thread_io(std::istream &input, uint64_t tid)
Read /proc/self/task/<tid>/io.
Definition: system_info_linux_procfs.cc:1477
System_result< std::string > linux_storage_sector_size_path(std::string_view canonical_path, bool partition)
Build the sysfs path for a device's hardware sector size.
Definition: system_info_linux_procfs.cc:434
System_result< Storage_device_relationship > linux_partition_relationship(std::string_view canonical_path, std::string_view device)
Find the parent disk of a Linux partition from its canonical sysfs path.
Definition: system_info_linux_procfs.cc:409
Linux_diskstats_snapshot read_linux_diskstats(std::istream &input, const std::unordered_set< std::string > &whole_devices)
Read cumulative block I/O counters from /proc/diskstats.
Definition: system_info_linux_procfs.cc:478
Process_memory_snapshot read_linux_process_status(std::istream &input)
Read process identity and memory from /proc/self/status.
Definition: system_info_linux_procfs.cc:1261
System_result< Swap_activity_info > read_linux_vmstat(std::istream &input)
Read cumulative paging activity from /proc/vmstat.
Definition: system_info_linux_procfs.cc:1086
Host_cpu_snapshot read_linux_cpu_stat(std::istream &input, uint64_t ticks_per_second)
Read CPU time rows from /proc/stat.
Definition: system_info_linux_procfs.cc:1145
System_result< Storage_device_capacity > read_linux_storage_capacity(std::istream &size_input, std::istream &sector_size_input, std::string_view device)
Read capacity metadata from /sys/class/block/<device>.
Definition: system_info_linux_procfs.cc:367
Host_memory_snapshot read_linux_meminfo(std::istream &input)
Read labeled host memory values from /proc/meminfo.
Definition: system_info_linux_procfs.cc:995
Process_threads_snapshot read_linux_thread_stat(std::istream &input, uint64_t expected_tid, uint64_t process_pid, uint64_t ticks_per_second, uint64_t page_size)
Read one /proc/self/task/<tid>/stat record.
Definition: system_info_linux_procfs.cc:1345
Host CPU capabilities collected at one collection point.
Definition: system_info.h:334
Host memory capabilities collected at one collection point.
Definition: system_info.h:296
Process memory capabilities collected at one collection point.
Definition: system_info.h:362
Process thread capabilities collected at one collection point.
Definition: system_info.h:450
Storage capabilities collected at one collection point.
Definition: system_info.h:261
Linux block device identity parsed from /proc/partitions.
Definition: system_info_linux_procfs.h:38
uint64_t minor
Definition: system_info_linux_procfs.h:40
uint64_t major
Definition: system_info_linux_procfs.h:39
std::string name
Definition: system_info_linux_procfs.h:41
Linux storage I/O capabilities parsed from /proc/diskstats.
Definition: system_info_linux_procfs.h:45
System_result< Storage_flush_snapshot > flush
Definition: system_info_linux_procfs.h:47
System_result< Storage_read_write_snapshot > read_write
Definition: system_info_linux_procfs.h:46
Linux procfs and sysfs roots used by storage collection.
Definition: system_info_linux_procfs.h:51
std::string proc_diskstats
Definition: system_info_linux_procfs.h:53
std::string sys_class_block
Definition: system_info_linux_procfs.h:54
std::string proc_partitions
Definition: system_info_linux_procfs.h:52