Commit 0174675c authored by Paul Moy's avatar Paul Moy Committed by Commit Bot

DeviceStatusCollector: Add I/O and discard disk stats

Report two new disk statistics: I/O and discard time.

Bug: chromium:1067670
Change-Id: I98234cb745501574f758842d3939c147cdfd610b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2242199
Commit-Queue: Paul Moy <pmoy@chromium.org>
Reviewed-by: default avatarMaksim Ivanov <emaxx@chromium.org>
Reviewed-by: default avatarJorge Lucangeli Obes <jorgelo@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#780371}
parent 17c5384a
......@@ -871,6 +871,14 @@ class DeviceStatusCollectorState : public StatusCollectorState {
storage->read_time_seconds_since_last_boot);
disk_info_out->set_write_time_seconds_since_last_boot(
storage->write_time_seconds_since_last_boot);
disk_info_out->set_io_time_seconds_since_last_boot(
storage->io_time_seconds_since_last_boot);
const auto& discard_time =
storage->discard_time_seconds_since_last_boot;
if (!discard_time.is_null()) {
disk_info_out->set_discard_time_seconds_since_last_boot(
discard_time->value);
}
}
break;
}
......
......@@ -174,6 +174,8 @@ constexpr uint64_t kFakeStorageBytesRead = 9070;
constexpr uint64_t kFakeStorageBytesWritten = 87653;
constexpr uint64_t kFakeStorageReadTimeSeconds = 23570;
constexpr uint64_t kFakeStorageWriteTimeSeconds = 5768;
constexpr uint64_t kFakeStorageIoTimeSeconds = 709;
constexpr uint64_t kFakeStorageDiscardTimeSeconds = 9869;
// Timezone test values:
constexpr char kPosixTimezone[] = "MST7MDT,M3.2.0,M11.1.0";
constexpr char kTimezoneRegion[] = "America/Denver";
......@@ -481,7 +483,8 @@ cros_healthd::NonRemovableBlockDeviceResultPtr CreateBlockDeviceResult() {
kFakeStoragePath, kFakeStorageSize, kFakeStorageType, kFakeStorageManfid,
kFakeStorageName, kFakeStorageSerial, kFakeStorageBytesRead,
kFakeStorageBytesWritten, kFakeStorageReadTimeSeconds,
kFakeStorageWriteTimeSeconds));
kFakeStorageWriteTimeSeconds, kFakeStorageIoTimeSeconds,
cros_healthd::UInt64Value::New(kFakeStorageDiscardTimeSeconds)));
return cros_healthd::NonRemovableBlockDeviceResult::NewBlockDeviceInfo(
std::move(storage_vector));
}
......@@ -3107,6 +3110,9 @@ TEST_F(DeviceStatusCollectorTest, TestCrosHealthdInfo) {
kFakeStorageReadTimeSeconds);
EXPECT_EQ(disk.write_time_seconds_since_last_boot(),
kFakeStorageWriteTimeSeconds);
EXPECT_EQ(disk.io_time_seconds_since_last_boot(), kFakeStorageIoTimeSeconds);
EXPECT_EQ(disk.discard_time_seconds_since_last_boot(),
kFakeStorageDiscardTimeSeconds);
// Verify the Cached VPD.
ASSERT_TRUE(device_status_.has_system_status());
......
......@@ -140,6 +140,13 @@ struct NonRemovableBlockDeviceInfo {
uint64 read_time_seconds_since_last_boot;
// Time spent writing since last boot.
uint64 write_time_seconds_since_last_boot;
// Time spent doing I/O since last boot. Counts the time the disk and queue
// were busy, so unlike the fields above, parallel requests are not counted
// multiple times.
uint64 io_time_seconds_since_last_boot;
// Time spent discarding since last boot. Discarding is writing to clear
// blocks which are no longer in use. Supported on kernels 4.18+.
UInt64Value? discard_time_seconds_since_last_boot;
};
// Cached VPD probe result. Can either be populated with the CachedVpdInfo or an
......
......@@ -992,6 +992,12 @@ message DiskInfo {
optional uint64 bytes_written_since_last_boot = 9;
optional uint64 read_time_seconds_since_last_boot = 10;
optional uint64 write_time_seconds_since_last_boot = 11;
// Counts the time the disk and queue were busy, so unlike the fields above,
// parallel requests are not counted multiple times.
optional uint64 io_time_seconds_since_last_boot = 12;
// Time spent discarding since last boot. Discarding is writing to clear
// blocks which are no longer in use. Supported on kernels 4.18+.
optional uint64 discard_time_seconds_since_last_boot = 13;
}
// Status of the storage subsystem.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment