MySQL 9.4.0
Source Code Documentation
my_system.cc File Reference

Functions to retrieve system information like total physical memory and total number of logical CPUs adhering to limits set by cgroups. More...

#include <cassert>
#include <cstdint>
#include <thread>
#include "my_config.h"
#include "my_system_api/my_system_api.h"
#include "mysql/components/library_mysys/my_system.h"
#include <unistd.h>

Namespaces

namespace  anonymous_namespace{my_system.cc}
 

Functions

static uint64_t total_physical_memory () noexcept
 Get the total physical memory accessible to the server. More...
 
bool init_my_physical_memory (ulonglong memory)
 Initialize the my_physical_memory function using server_memory option. More...
 
uint64_t my_physical_memory () noexcept
 Determine the total physical memory available in bytes. More...
 
uint32_t my_num_vcpus () noexcept
 Determine the total number of logical CPUs available. More...
 

Variables

ulonglong anonymous_namespace{my_system.cc}::configured_memory {0}
 

Detailed Description

Functions to retrieve system information like total physical memory and total number of logical CPUs adhering to limits set by cgroups.

Function Documentation

◆ init_my_physical_memory()

bool init_my_physical_memory ( ulonglong  memory)

Initialize the my_physical_memory function using server_memory option.

Parameters
[in]memoryValue of the server_memory startup option
Note
The input value of 0 indicates no limits, and underlying container/host configuration must be used
Returns
true on success, false if input memory value is invalid

◆ my_num_vcpus()

uint32_t my_num_vcpus ( )
noexcept

Determine the total number of logical CPUs available.

If process is running within a container, the number of logical CPUs is the maximum limit set for the container. If the process is not running in a container then it uses the appropriate system APIs to determine the number of logical CPUs.

If the API is unable to determine the number of logical CPUs, then it returns 0.

Note
: The container set limits are calculated from the CFS quota and period as quota/period and is round down. A limit of 0.5 will return the value 0 and is treated as though no limits are set.
Returns
number of logical CPUs or 0

◆ my_physical_memory()

uint64_t my_physical_memory ( )
noexcept

Determine the total physical memory available in bytes.

If process is running within a container, then memory available is the maximum limit set for the container. If the process is not running in a container then it uses the appropriate system APIs to determine the available memory.

If the API is unable to determine the available memory, then it returns 0.

Returns
physical memory in bytes or 0

◆ total_physical_memory()

static uint64_t total_physical_memory ( )
inlinestaticnoexcept

Get the total physical memory accessible to the server.

Tries to read cgroup limits first. If failed or no limits were found, then tries to read from the system using corresponding system APIs.

Returns
total physical memory available to the server, or 0 on failure