geopm::MSRIO(3) – methods for reading and writing MSRs
Namespaces
The MSRIO class is a member of the namespace geopm, but the
full name, geopm::MSRIO, has been abbreviated in this manual.
Similarly, the std:: namespace specifier has been omitted from the
interface definitions for the following standard types: std::vector,
std::string, std::set, std::unique_ptr, std::shared_ptr
to enable better rendering of this manual.
Synopsis
#include <geopm/MSRIO.hpp>
Link with -lgeopmd
virtual uint64_t MSRIO::read_msr(int cpu_idx,
uint64_t offset) = 0;
virtual void MSRIO::write_msr(int cpu_idx,
uint64_t offset,
uint64_t raw_value,
uint64_t write_mask) = 0;
virtual int MSRIO::add_read(int cpu_idx, uint64_t offset) = 0;
virtual void MSRIO::read_batch(void) = 0;
virtual int MSRIO::add_write(int cpu_idx, uint64_t offset) = 0;
virtual void MSRIO::adjust(int batch_idx,
uint64_t value,
uint64_t write_mask) = 0;
virtual uint64_t MSRIO::sample(int batch_idx) const = 0;
virtual void MSRIO::write_batch(void) = 0;
static unique_ptr<MSRIO> MSRIO::make_unique(void);
static shared_ptr<MSRIO> MSRIO::make_shared(void);
Description
The MSRIO class handles reading and writing to Model-Specific Registers (MSRs). The implementation uses msr-safe, found at https://github.com/LLNL/msr-safe to allow access to a controlled set of MSRs from user space. Refer to geopm_pio_msr(7) for more details.
This class is an abstract base class.
Class Methods
read_msr()Read from a single MSR at offset on the logical Linux CPU specified by cpu_idx. Returns the raw encoded MSR value.
write_msr()Write to a single MSR at offset on the logical Linux CPU specified by cpu_idx. The value in raw_value will be masked with write_mask and the value will only be written for bits where the write_mask is
1. All other bits in the MSR will remain unmodified. If the raw_value tries to write any bits outside the mask, an error will be raised.add_read()Add an offset to the list of MSRs to be read by the next call to
read_batch(), extend this set of MSRs with a single offset. The cpu_idx is the logical Linux CPU index to read from whenread_batch()method is called. Returns the logical index that will be passed tosample().read_batch()Batch read a set of MSRs configured by a previous call to the
batch_config()method. The memory used to store the result should have been returned byadd_read(). The resulting raw encoded MSR values are accessible throughsample().add_write()Add another offset to the list of MSRs to be written in batch. The cpu_idx is the logical Linux CPU index to write to when
write_batch()method is called. Returns the logical index that will be passed toadjust().adjust()Adjust a value that was previously added with the
add_write()method. The value in will be masked with write_mask and the value will only be written for bits where the write_mask is1. All other bits in the MSR will remain unmodified. If the value tries to write any bits outside the mask, an error will be raised.sample()Read the full 64-bit value of the MSR that was previously added to the MSRIO batch with
add_read().read_batch()must be called prior to callingsample().write_batch()Batch write a set of MSRs configured by a previous call to the
batch_config()method. The values in the raw_value vector will be written to the corresponding configured locations.make_unique()Returns a
unique_ptrto a concrete object constructed using the underlying implementationmake_shared()Returns a
shared_ptrto a concrete object constructed using the underlying implementation