0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-06-09 05:29:00 +02:00

ircd::info: Add sysinfo; gather ram and swap totals on init.

This commit is contained in:
Jason Volk 2020-03-16 11:59:08 -07:00
parent f438718ddf
commit 59ee170817
3 changed files with 52 additions and 4 deletions

View file

@ -936,6 +936,7 @@ RB_CHK_SYSHEADER(gnu/lib-names.h, [GNU_LIB_NAMES_H])
dnl linux platform dnl linux platform
RB_CHK_SYSHEADER(sys/auxv.h, [SYS_AUXV_H]) RB_CHK_SYSHEADER(sys/auxv.h, [SYS_AUXV_H])
RB_CHK_SYSHEADER(sys/sysinfo.h, [SYS_SYSINFO_H])
RB_CHK_SYSHEADER(sys/eventfd.h, [SYS_EVENTFD_H]) RB_CHK_SYSHEADER(sys/eventfd.h, [SYS_EVENTFD_H])
RB_CHK_SYSHEADER(sys/inotify.h, [SYS_INOTIFY_H]) RB_CHK_SYSHEADER(sys/inotify.h, [SYS_INOTIFY_H])
RB_CHK_SYSHEADER(sys/sysmacros.h, [SYS_SYSMACROS_H]) RB_CHK_SYSHEADER(sys/sysmacros.h, [SYS_SYSMACROS_H])

View file

@ -44,12 +44,14 @@ namespace ircd::info
extern const string_view compiled; extern const string_view compiled;
extern const string_view startup; extern const string_view startup;
// System information // System configuration / information
extern const size_t page_size; extern const size_t page_size;
extern const size_t iov_max; extern const size_t iov_max;
extern const size_t aio_max; extern const size_t aio_max;
extern const size_t aio_reqprio_max; extern const size_t aio_reqprio_max;
extern const size_t clk_tck; extern const size_t clk_tck;
extern const size_t total_ram;
extern const size_t total_swap;
// Resource limitations // Resource limitations
extern const size_t rlimit_as; extern const size_t rlimit_as;

View file

@ -8,9 +8,10 @@
// copyright notice and this permission notice is present in all copies. The // copyright notice and this permission notice is present in all copies. The
// full license for this software is available in the LICENSE file. // full license for this software is available in the LICENSE file.
#include <RB_INC_SYS_RESOURCE_H
#include <RB_INC_UNISTD_H #include <RB_INC_UNISTD_H
#include <RB_INC_CPUID_H #include <RB_INC_CPUID_H
#include <RB_INC_SYS_SYSINFO_H
#include <RB_INC_SYS_RESOURCE_H
#include <RB_INC_GNU_LIBC_VERSION_H #include <RB_INC_GNU_LIBC_VERSION_H
namespace ircd::info namespace ircd::info
@ -433,14 +434,17 @@ ircd::info::dump_sys_info()
// Additional detected system parameters // Additional detected system parameters
#ifdef RB_DEBUG #ifdef RB_DEBUG
char buf[2][48];
log::logf log::logf
{ {
log::star, log::DEBUG, log::star, log::DEBUG,
"page_size=%zu iov_max=%zu aio_max=%zu aio_reqprio_max=%zu", "page_size=%zu iov_max=%zu aio_max=%zu aio_reqprio_max=%zu ram=%s swap=%s",
page_size, page_size,
iov_max, iov_max,
aio_max, aio_max,
aio_reqprio_max, aio_reqprio_max,
pretty(buf[0], iec(total_ram)),
pretty(buf[1], iec(total_swap)),
}; };
#endif #endif
} }
@ -509,7 +513,7 @@ ircd::info::kernel_version
}; };
// //
// System information // Resource limits
// //
#ifdef HAVE_SYS_RESOURCE_H #ifdef HAVE_SYS_RESOURCE_H
@ -576,6 +580,10 @@ ircd::info::rlimit_as
#endif #endif
}; };
//
// System configuration
//
#ifdef _SC_CLK_TCK #ifdef _SC_CLK_TCK
decltype(ircd::info::clk_tck) decltype(ircd::info::clk_tck)
ircd::info::clk_tck ircd::info::clk_tck
@ -622,6 +630,43 @@ ircd::info::page_size
#endif #endif
}; };
//
// System information
//
namespace ircd::info
{
#ifdef HAVE_SYS_SYSINFO_H
extern struct ::sysinfo sysinfo;
#endif
}
#ifdef HAVE_SYS_SYSINFO_H
decltype(ircd::info::sysinfo)
ircd::info::sysinfo{[]
{
struct ::sysinfo ret;
syscall(::sysinfo, &ret);
return ret;
}()};
#endif
decltype(ircd::info::total_ram)
ircd::info::total_ram
{
#ifdef HAVE_SYS_SYSINFO_H
sysinfo.totalram
#endif
};
decltype(ircd::info::total_swap)
ircd::info::total_swap
{
#ifdef HAVE_SYS_SYSINFO_H
sysinfo.totalswap
#endif
};
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// //
// Userspace / Library // Userspace / Library