Skip to content

Commit

Permalink
Fix reported Data bytes Read/Written on SSDs
Browse files Browse the repository at this point in the history
	 This value is reported in thousands (i.e., a value of 1 corresponds to 1000 units of 512 bytes written) and is rounded up.
	 When the LBA size is a value other than 512 bytes, the controller shall convert the amount of data written to 512 byte units.

Current code is using 1024 instead of 1000.

Signed-off-by: tekert <[email protected]>
  • Loading branch information
tekert committed Jul 25, 2023
1 parent 895bf1e commit c2e9d33
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions smartctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -300,21 +300,25 @@ func (smart *SMARTctl) mineNumErrLogEntries() {
}

func (smart *SMARTctl) mineBytesRead() {
blockSize := smart.json.Get("logical_block_size").Float() * 1024
blockSize := smart.json.Get("logical_block_size").Float()
smart.ch <- prometheus.MustNewConstMetric(
metricDeviceBytesRead,
prometheus.CounterValue,
smart.json.Get("nvme_smart_health_information_log.data_units_read").Float()*blockSize,
// This value is reported in thousands (i.e., a value of 1 corresponds to 1000 units of 512 bytes written) and is rounded up.
// When the LBA size is a value other than 512 bytes, the controller shall convert the amount of data written to 512 byte units.
smart.json.Get("nvme_smart_health_information_log.data_units_read").Float()*1000.0*blockSize,
smart.device.device,
)
}

func (smart *SMARTctl) mineBytesWritten() {
blockSize := smart.json.Get("logical_block_size").Float() * 1024
blockSize := smart.json.Get("logical_block_size").Float()
smart.ch <- prometheus.MustNewConstMetric(
metricDeviceBytesWritten,
prometheus.CounterValue,
smart.json.Get("nvme_smart_health_information_log.data_units_written").Float()*blockSize,
// This value is reported in thousands (i.e., a value of 1 corresponds to 1000 units of 512 bytes written) and is rounded up.
// When the LBA size is a value other than 512 bytes, the controller shall convert the amount of data written to 512 byte units.
smart.json.Get("nvme_smart_health_information_log.data_units_written").Float()*1000.0*blockSize,
smart.device.device,
)
}
Expand Down

0 comments on commit c2e9d33

Please sign in to comment.