aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/driver.cc
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2020-01-14 11:25:23 -0800
committerEddie Hung <eddie@fpgeh.com>2020-01-14 11:25:23 -0800
commita901a5fb44f146415ff45f9fed3f89ca3786b0da (patch)
tree6686c4ab9032c27fc4b5cd104d0a3fd0d6737e7f /kernel/driver.cc
parentca2f3db53f3f330d283079bf44b3cef6b7f197be (diff)
downloadyosys-a901a5fb44f146415ff45f9fed3f89ca3786b0da.tar.gz
yosys-a901a5fb44f146415ff45f9fed3f89ca3786b0da.tar.bz2
yosys-a901a5fb44f146415ff45f9fed3f89ca3786b0da.zip
print_stats footer to return peak memory, option for including children
Diffstat (limited to 'kernel/driver.cc')
-rw-r--r--kernel/driver.cc40
1 files changed, 12 insertions, 28 deletions
diff --git a/kernel/driver.cc b/kernel/driver.cc
index 70a97c4b9..cf676a591 100644
--- a/kernel/driver.cc
+++ b/kernel/driver.cc
@@ -564,39 +564,23 @@ int main(int argc, char **argv)
#ifdef _WIN32
log("End of script. Logfile hash: %s\n", hash.c_str());
#else
- std::string meminfo;
std::string stats_divider = ", ";
-# if defined(__linux__)
- std::ifstream statm;
- statm.open(stringf("/proc/%lld/statm", (long long)getpid()));
- if (statm.is_open()) {
- int sz_total, sz_resident;
- statm >> sz_total >> sz_resident;
- meminfo = stringf(", MEM: %.2f MB total, %.2f MB resident",
- sz_total * (getpagesize() / 1024.0 / 1024.0),
- sz_resident * (getpagesize() / 1024.0 / 1024.0));
- stats_divider = "\n";
- }
-# elif defined(__FreeBSD__)
- pid_t pid = getpid();
- int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, (int)pid};
- struct kinfo_proc kip;
- size_t kip_len = sizeof(kip);
- if (sysctl(mib, 4, &kip, &kip_len, NULL, 0) == 0) {
- vm_size_t sz_total = kip.ki_size;
- segsz_t sz_resident = kip.ki_rssize;
- meminfo = stringf(", MEM: %.2f MB total, %.2f MB resident",
- (int)sz_total / 1024.0 / 1024.0,
- (int)sz_resident * (getpagesize() / 1024.0 / 1024.0));
- stats_divider = "\n";
- }
-# endif
struct rusage ru_buffer;
getrusage(RUSAGE_SELF, &ru_buffer);
- log("End of script. Logfile hash: %s%sCPU: user %.2fs system %.2fs%s\n", hash.c_str(),
+ if (yosys_design->scratchpad_get_bool("print_stats.include_children")) {
+ struct rusage ru_buffer_children;
+ getrusage(RUSAGE_CHILDREN, &ru_buffer_children);
+ ru_buffer.ru_utime.tv_sec += ru_buffer_children.ru_utime.tv_sec;
+ ru_buffer.ru_utime.tv_usec += ru_buffer_children.ru_utime.tv_usec;
+ ru_buffer.ru_stime.tv_sec += ru_buffer_children.ru_stime.tv_sec;
+ ru_buffer.ru_stime.tv_usec += ru_buffer_children.ru_stime.tv_usec;
+ ru_buffer.ru_maxrss = std::max(ru_buffer.ru_maxrss, ru_buffer_children.ru_maxrss);
+ }
+ log("End of script. Logfile hash: %s%sCPU: user %.2fs system %.2fs, MEM: %.2f MB peak\n", hash.c_str(),
stats_divider.c_str(), ru_buffer.ru_utime.tv_sec + 1e-6 * ru_buffer.ru_utime.tv_usec,
- ru_buffer.ru_stime.tv_sec + 1e-6 * ru_buffer.ru_stime.tv_usec, meminfo.c_str());
+ ru_buffer.ru_stime.tv_sec + 1e-6 * ru_buffer.ru_stime.tv_usec,
+ ru_buffer.ru_maxrss / 1024.0);
#endif
log("%s\n", yosys_version_str);