diff options
| -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 76730659988..a3b630383c1 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; + } } } |
