Skip to content
Snippets Groups Projects
Commit fc6b5585 authored by chengtbf's avatar chengtbf Committed by Will Zhang
Browse files

parse /proc/meminfo (#905)

* parse /proc/meminfo

* CHECK for getMemInfo

* refine strToToken

* for review

* use onefloe cast
parent bef6513a
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,7 @@ namespace oneflow {
const char* StrToToken(const char* text, const std::string& delims, std::string* token) {
token->clear();
while (*text != '\0' && delims.find(*text) != std::string::npos) { text++; }
while (*text != '\0' && delims.find(*text) == std::string::npos) { token->push_back(*text++); }
return text;
}
......
......@@ -63,12 +63,27 @@ void CloseStdoutAndStderr() {
size_t GetAvailableCpuMemSize() {
#ifdef PLATFORM_POSIX
struct sysinfo sys_info;
PCHECK(sysinfo(&sys_info) == 0);
return sys_info.freeram * sys_info.mem_unit;
std::ifstream mem_info("/proc/meminfo");
CHECK(mem_info.good()) << "can't open file: /proc/meminfo";
std::string line;
while (std::getline(mem_info, line).good()) {
std::string token;
const char* p = line.c_str();
p = StrToToken(p, " ", &token);
if (token != "MemAvailable:") { continue; }
CHECK_NE(*p, '\0');
p = StrToToken(p, " ", &token);
size_t mem_available = oneflow_cast<size_t>(token);
CHECK_NE(*p, '\0');
p = StrToToken(p, " ", &token);
CHECK_EQ(token, "kB");
return mem_available * 1024;
}
LOG(FATAL) << "can't find MemAvailable in /proc/meminfo";
#else
return 0; // TODO
TODO();
#endif
return 0;
}
} // namespace oneflow
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