in src/oomd/util/Fs.cpp [685:720]
SystemMaybe<IOStat> Fs::readIostatAt(const DirFd& dirfd) {
auto lines = readFileByLine(Fs::Fd::openat(dirfd, kIoStatFile));
if (!lines) {
return SYSTEM_ERROR(lines.error());
}
std::vector<DeviceIOStat> io_stat;
io_stat.reserve(lines->size());
for (const auto& line : *lines) {
// format
//
// 0:0 rbytes=0 wbytes=0 rios=0 wios=0 dbytes=0 dios=0
DeviceIOStat dev_io_stat;
int major, minor;
int ret = sscanf(
line.c_str(),
"%d:%d rbytes=%" SCNd64 " wbytes=%" SCNd64 " rios=%" SCNd64
" wios=%" SCNd64 " dbytes=%" SCNd64 " dios=%" SCNd64 "\n",
&major,
&minor,
&dev_io_stat.rbytes,
&dev_io_stat.wbytes,
&dev_io_stat.rios,
&dev_io_stat.wios,
&dev_io_stat.dbytes,
&dev_io_stat.dios);
if (ret != 8) {
return SYSTEM_ERROR(EINVAL);
}
dev_io_stat.dev_id = std::to_string(major) + ":" + std::to_string(minor);
io_stat.push_back(dev_io_stat);
}
return io_stat;
}