-
Notifications
You must be signed in to change notification settings - Fork 5.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[native] Add LinuxMemoryChecker check/warning to ensure system-mem-limit-gb is reasonably set #24149
base: master
Are you sure you want to change the base?
[native] Add LinuxMemoryChecker check/warning to ensure system-mem-limit-gb is reasonably set #24149
Conversation
4478ae1
to
15f55bb
Compare
15f55bb
to
7646600
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we add a test with fake files again just like we did with the original tests for this class?
That way we can try the "max" value for cgv2, and gigantic values and reasonable values. Basically testing the various situations we saw when investigating this.
8da401b
to
4ae2cee
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @minhancao, could you please squash the commits?
presto-native-execution/presto_cpp/main/tests/LinuxMemoryCheckerTest.cpp
Outdated
Show resolved
Hide resolved
std::string statFile_; | ||
std::string memInfoFile_ = "/proc/meminfo"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: const std::string kMemInfoFile_
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This has to stay as a non-const variable since I need to change its path to point to the meminfo test file when I am running the LinuxMemoryCheckerTests.
85b3b9d
to
dab2335
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is ideal if we can avoid checking in data files for testing.
We only need a few fields from the file for testing.
Can we write these required fields to a temporary file as part of the testing?
presto-native-execution/presto_cpp/main/tests/examples/cgroupV1memoryNotSet.limit_in_bytes
Outdated
Show resolved
Hide resolved
71c9fa9
to
89a50a8
Compare
89a50a8
to
163880b
Compare
presto-native-execution/presto_cpp/main/tests/LinuxMemoryCheckerTest.cpp
Outdated
Show resolved
Hide resolved
presto-native-execution/presto_cpp/main/tests/LinuxMemoryCheckerTest.cpp
Outdated
Show resolved
Hide resolved
163880b
to
29dc3b5
Compare
9a7cbf7
to
80ca9b5
Compare
@czentgr @majetideepak @pramodsatya |
if ((stat(kCgroupV1MaxMemFilePath, &buffer) == 0)) { | ||
memMaxFile_ = kCgroupV1MaxMemFilePath; | ||
PRESTO_STARTUP_LOG(INFO) | ||
<< fmt::format("Using cgroup v1 memory max file {}", memMaxFile_); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it possible to have cgroup v2 memory stat file along with group v1 memory max file?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, that combination is not possible.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel we could then combine both V1 parts in one block and V2 parts in another block.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Setting the memMaxFile_ and memStatFile_ should both have their own if block to check because it's possible for one of them to exist and the other does not on a Linux machine.
presto-native-execution/presto_cpp/main/tests/LinuxMemoryCheckerTest.cpp
Show resolved
Hide resolved
presto-native-execution/presto_cpp/main/tests/LinuxMemoryCheckerTest.cpp
Show resolved
Hide resolved
bb3ce29
to
f25e5b1
Compare
…mit-gb is reasonably set Add additional checks and warnings to ensure system-memory-gb < system-mem-limit-gb < memory limit for process. For cgroup v1: Set memory limit for process to be the smaller number between /proc/meminfo and memory.limit_in_bytes For cgroup v2: Set memory limit for process to be the smaller number between /proc/meminfo and memory.max If memory.max contains "max" string, then look at /proc/meminfo for the MemTotal, otherwise use the value in memory.max.
f25e5b1
to
b52384a
Compare
@majetideepak I have updated the PR with some new changes, please review when you can, thank you! |
Description
Add LinuxMemoryChecker check and warning to ensure system-memory-gb < system-mem-limit-gb < memory limit for process.
For cgroup v1:
Set memory limit for process to be the smaller number between /proc/meminfo and memory.limit_in_bytes
For cgroup v2:
Set memory limit for process to be the smaller number between /proc/meminfo and memory.max
If memory.max contains "max" string, then look at /proc/meminfo for the MemTotal, otherwise use the value in memory.max.
VELOX_CHECK_LT(system-mem-limit-gb, memory limit for process):
Warning to output to worker's log:
Motivation and Context
Impact
Test Plan
Contributor checklist
Release Notes
Please follow release notes guidelines and fill in the release notes below.