libnvme(9)
π libnvme(9) β okay bestie, let's talk about struct nvme_voltage_measurement_log
So this is a page from the libnvme API Manual β yes, the libnvme manual, section 9 β and today's main character is a lil struct that maps out the Voltage Measurement Log Page, aka Log Identifier 27h. It's giving "I measure volts and I take that seriously" β¨
πΈ NAME πΈ
struct nvme_voltage_measurement_log β the Voltage Measurement Log Page, and yes bestie, that's Log Identifier 27h π
β¨ SYNOPSIS β¨
No cap, here's the whole shape of it, verbatim, don't touch a single character:
struct nvme_voltage_measurement_log {
__u8 vmgn;
__u8 vma;
__le16 vsi;
__le32 vmlsz;
__le16 nvmds;
__le16 nvmde;
__le16 svmtr;
struct nvme_timestamp svmts;
__le16 cntlid;
__le16 vlvss;
__u8 rsvd26[6];
__le16 ovol;
__le16 ovc;
__le16 ovlt;
struct nvme_timestamp ovts;
__u8 iovpe;
__le16 uvol;
__le16 uvc;
__le16 uvlt;
struct nvme_timestamp uvts;
__u8 iuvpe;
__u8 rsvd62[2];
__le16 ivmd[];
};
π¦ Members π¦
Okay so this is the part where we go field by field, and honestly? Every one of them is iconic in its own way:
vmgnβ Voltage Measurement Generation Number π« it gets incremented every single time aSet Featurescommand starts Voltage Measurements. Like a little counter that only goes up.vmaβ Voltage Measurement Attributes, peek atenum nvme_voltage_measurement_vmafor the deets.vsiβ Voltage Sensor Info, seeenum nvme_voltage_measurement_vsi. Ngl though, this one is meaningless if the VMC bit is cleared to '0' invmaβ so check your bits before you get attached πvmlszβ Voltage Measurement Log Size: how big this log page is, in bytes.nvmdsβ Number of Voltage Measurement Descriptors Supported: literally the max number of entries the Interval Voltage Measurement Descriptor list can hold.nvmdeβ Number of Voltage Measurement Descriptors Entries: how many entries are actually chillin' inivmdright now.svmtrβ Stop Voltage Measurement Time Remaining, in minutes, rounded up (generous queen behavior π«Ά).svmtsβ Stop Voltage Measurement Timestamp: the exact time interval voltage measurements stopped being collected. Seestruct nvme_timestampfor the format.cntlidβ Controller Identifier, the one associated withvsi,svmts,ovts, anduvts. One controller to bind them all πvlvssβ Voltage Log Vendor Specific Size: size in bytes of the Vendor Specific field that comes right afterivmd.rsvd26β Reserved. Not for you. Move along πovolβ Overvoltage, seeenum nvme_voltage_measurement_ovol.ovcβ Overvoltage Count.ovltβ Overvoltage Log Threshold, measured in units of the Voltage Sensor Sample Scale.ovtsβ Overvoltage Timestamp. Seestruct nvme_timestamp. β°iovpeβ Interval Overvoltage Percent Error, ranges from0to100. And if it's255? That means a value is not reported β it's giving "no data, no opinion" πuvolβ Undervoltage, seeenum nvme_voltage_measurement_uvol.uvcβ Undervoltage Count.uvltβ Undervoltage Log Threshold, also in units of the Voltage Sensor Sample Scale.uvtsβ Undervoltage Timestamp. Seestruct nvme_timestamp. β°iuvpeβ Interval Undervoltage Percent Error,0to100again. And again,255means a value is not reported.rsvd62β Reserved. Same vibe as the other one: hands off πivmdβ Interval Voltage Measurement Descriptor list, seeenum nvme_voltage_measurement_ivmd. And plot twist: it's followed by a Vendor Specific field that'svlvssbytes long β ifvlvssis non-zero. Conditional queen π
Lowkey important reminder bestie: this is a flexible array member situation at the end (ivmd[]), so the vendor-specific stuff just trails along after it. Don't go reading past whatvmlsztells you, okay? π«Ά
π that's the whole page! π
Written for the libnvme API Manual, this very page dropped in October 2026, star of the show struct nvme_voltage_measurement_log, living in section libnvme(9). Slay, bye πβ¨π
π¦ where this page comes from
- arch rolling: nvme-cli 3.2-1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms