diff options
author | Konstantin Khlebnikov <koct9i@gmail.com> | 2024-04-02 23:43:02 +0300 |
---|---|---|
committer | robot-piglet <robot-piglet@yandex-team.com> | 2024-04-02 23:56:32 +0300 |
commit | d18afd09df2a08cd023012593b46109b77713a6c (patch) | |
tree | ad5a4edb17656a1c0727dbcbcfbd83d9135e158c | |
parent | 710a878d0b66c06d0e79ed31b702d6861482a388 (diff) | |
download | ydb-d18afd09df2a08cd023012593b46109b77713a6c.tar.gz |
Ignore missing task I/O accounting (/proc/*/io)
This feature is missing in kernels built with CONFIG_TASK_IO_ACCOUNTING=n
It's used for I/O engine statistics: "kernel_read_bytes", "kernel_written_bytes".
---
4a0264b832902e4cad6a8c31a38c6bc3fff27b4e
Pull Request resolved: https://github.com/ytsaurus/ytsaurus/pull/483
-rw-r--r-- | yt/yt/core/misc/proc.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/yt/yt/core/misc/proc.cpp b/yt/yt/core/misc/proc.cpp index 7673065998..a3b630383c 100644 --- a/yt/yt/core/misc/proc.cpp +++ b/yt/yt/core/misc/proc.cpp @@ -1553,24 +1553,36 @@ TTaskDiskStatistics GetSelfThreadTaskDiskStatistics() { #ifdef _linux_ static const TString path = "/proc/thread-self/io"; + static std::atomic<bool> supported = true; TTaskDiskStatistics stat; - TIFStream ioFile(path); - for (TString line; ioFile.ReadLine(line); ) { - if (line.empty()) { - continue; - } + if (supported) { + try { + TIFStream ioFile(path); + for (TString line; ioFile.ReadLine(line); ) { + if (line.empty()) { + continue; + } - auto fields = SplitString(line, " ", 2); - if (fields.size() != 2) { - continue; - } + auto fields = SplitString(line, " ", 2); + if (fields.size() != 2) { + continue; + } - if (fields[0] == "read_bytes:") { - TryFromString(fields[1], stat.ReadBytes); - } else if (fields[0] == "write_bytes:") { - TryFromString(fields[1], stat.ReadBytes); + if (fields[0] == "read_bytes:") { + TryFromString(fields[1], stat.ReadBytes); + } else if (fields[0] == "write_bytes:") { + TryFromString(fields[1], stat.ReadBytes); + } + } + } catch (const TSystemError& ex) { + if (ex.Status() == ENOENT) { + supported = false; + YT_LOG_WARNING(ex, "Task I/O accounting is not supported by kernel"); + } else { + throw; + } } } |