NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
sysinfo.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_SYSTEM_SYSINFO_HPP__
2#define NEFORCE_CORE_SYSTEM_SYSINFO_HPP__
3
11
14NEFORCE_BEGIN_NAMESPACE__
15
21
35class NEFORCE_API sysinfo {
36public:
53
60 struct NEFORCE_API memory_info {
67
72 NEFORCE_NODISCARD float64_t physical_memory_usage() const noexcept {
73 if (total_physical == 0) {
74 return 0.0;
75 }
76 return 100.0 * (1.0 - static_cast<float64_t>(available_physical) / static_cast<float64_t>(total_physical));
77 }
78
83 NEFORCE_NODISCARD size_t available_memory() const noexcept { return available_physical + available_virtual; }
84 };
85
92 struct NEFORCE_API disk_info {
93 string path;
97
102 NEFORCE_NODISCARD float64_t usage_percent() const noexcept {
103 if (total_bytes == 0) {
104 return 0.0;
105 }
106 return 100.0 * static_cast<float64_t>(used_bytes) / static_cast<float64_t>(total_bytes);
107 }
108 };
109
116 struct CPU_info {
117 string vendor;
118 string brand;
123 string features;
124
129 NEFORCE_NODISCARD bool hyperthreading() const noexcept { return logical_processors > cores; }
130 };
131
136 struct NEFORCE_API os_version_info {
141 string csd_version;
143
148 NEFORCE_NODISCARD string version() const;
149 };
150
156 string name;
157 string address;
158 string netmask;
159 string mac;
160 bool is_up{false};
161 };
162
167 enum class architecture {
168 UNKNOWN,
169 X86,
170 X64,
171 ARM,
172 ARM64,
173 RISCV32,
174 RISCV64,
175 LOONGARCH64,
176 LOONGARCH32
177 };
178
192
193private:
194 system_info system_info_{};
195 memory_info memory_info_{};
196 CPU_info cpu_info_{};
197 os_version_info os_version_info_{};
198 architecture architecture_{architecture::UNKNOWN};
199 vector<numa_node_info> numa_nodes_;
200 atomic<bool> initialized_{false};
201
205 sysinfo() noexcept;
206
210 ~sysinfo() = default;
211
217 void init();
218
219public:
224 static sysinfo& instance() noexcept {
225 static sysinfo instance;
226 return instance;
227 }
228
229 sysinfo(const sysinfo&) = delete;
230 sysinfo& operator=(const sysinfo&) = delete;
231 sysinfo(sysinfo&&) = delete;
232 sysinfo& operator=(sysinfo&&) = delete;
233
239 void refresh();
240
245 NEFORCE_NODISCARD const system_info& get_system_info() const noexcept { return system_info_; }
246
251 NEFORCE_NODISCARD const memory_info& get_memory_info() const noexcept { return memory_info_; }
252
257 NEFORCE_NODISCARD const CPU_info& get_CPU_info() const noexcept { return cpu_info_; }
258
263 NEFORCE_NODISCARD const os_version_info& get_os_version_info() const noexcept { return os_version_info_; }
264
269 NEFORCE_NODISCARD architecture get_architecture() const noexcept { return architecture_; }
270
278 NEFORCE_NODISCARD const vector<numa_node_info>& get_numa_info() const noexcept { return numa_nodes_; }
279
284 NEFORCE_NODISCARD bool is_initialized() const noexcept { return initialized_.load(memory_order_acquire); }
285
290 NEFORCE_NODISCARD static float64_t cpu_usage();
291
296 NEFORCE_NODISCARD static uint32_t process_count();
297
303 NEFORCE_NODISCARD static disk_info get_disk_info(const char* path = nullptr);
304
310
315 NEFORCE_NODISCARD static uint64_t uptime_seconds();
316};
317 // SystemInfo
319
320NEFORCE_END_NAMESPACE__
321#endif // NEFORCE_CORE_SYSTEM_SYSINFO_HPP__
原子类型完整实现
文件路径类
系统信息单例类
bool is_initialized() const noexcept
检查是否已初始化
static uint64_t uptime_seconds()
获取系统运行时间
architecture
系统架构枚举
const vector< numa_node_info > & get_numa_info() const noexcept
获取 NUMA 节点拓扑信息
static disk_info get_disk_info(const char *path=nullptr)
获取指定路径的磁盘空间信息
const CPU_info & get_CPU_info() const noexcept
获取CPU信息
static sysinfo & instance() noexcept
获取单例实例
void refresh()
刷新系统信息
architecture get_architecture() const noexcept
获取系统架构
static vector< network_interface > network_interfaces()
枚举所有网络接口
static float64_t cpu_usage()
获取当前CPU使用率
static uint32_t process_count()
获取当前运行的进程数量
const system_info & get_system_info() const noexcept
获取系统底层信息
const os_version_info & get_os_version_info() const noexcept
获取操作系统版本信息
const memory_info & get_memory_info() const noexcept
获取内存信息
动态大小数组容器
unsigned int uint32_t
32位无符号整数类型
unsigned long uint64_t
64位无符号整数类型
double float64_t
64位双精度浮点数类型
unsigned short uint16_t
16位无符号整数类型
constexpr auto memory_order_acquire
获取内存顺序常量
uint64_t uintptr_t
可容纳指针的无符号整数类型
字符串类型别名和实用函数
string features
支持的指令集特性
uint32_t cores
物理核心数
bool hyperthreading() const noexcept
检查是否支持超线程
uint32_t current_MHz
当前频率
uint32_t max_MHz
最大频率
uint32_t logical_processors
逻辑处理器数
string path
磁盘路径或挂载点
float64_t usage_percent() const noexcept
磁盘使用率
uint64_t used_bytes
已用空间(字节)
uint64_t total_bytes
总容量(字节)
uint64_t free_bytes
可用空间(字节)
uint64_t available_page_file
可用页面文件
uint64_t available_physical
可用物理内存
float64_t physical_memory_usage() const noexcept
计算物理内存使用率
uint64_t total_physical
物理内存总量
size_t available_memory() const noexcept
获取总可用内存
uint64_t total_page_file
页面文件总量
uint64_t available_virtual
可用虚拟内存
uint64_t total_virtual
虚拟内存总量
string mac
MAC 地址(格式 xx:xx:xx:xx:xx:xx)
uint32_t node_id
NUMA 节点编号
vector< uint32_t > core_list
核心逻辑编号列表
uint32_t core_count
属于该节点的逻辑核心数
uint64_t core_mask
核心位图掩码(64 核以内直接可用)
string version() const
获取版本字符串
uintptr_t active_processor_mask
活动处理器掩码
uintptr_t max_app_address
应用程序最大地址
uint32_t allocation_granularity
内存分配粒度
uint32_t processor_numbers
处理器数量
uintptr_t min_app_address
应用程序最小地址
uint32_t page_size
内存页大小
uint16_t processor_revision
处理器修订版本
uint16_t processor_level
处理器级别