From d95759b7f967d0a9d18de6d73873ec4913d54e15 Mon Sep 17 00:00:00 2001 From: Daniel Schwen Date: Fri, 10 Mar 2017 11:02:53 -0700 Subject: [PATCH] Address comments (#8619) --- .../include/postprocessors/MemoryUsage.h | 8 ++-- framework/src/postprocessors/MemoryUsage.C | 46 ++++++++++++------- .../memory_usage/print_memory_usage.i | 4 +- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/framework/include/postprocessors/MemoryUsage.h b/framework/include/postprocessors/MemoryUsage.h index 7fc02d4ee5e9..d2b0fe4f9523 100644 --- a/framework/include/postprocessors/MemoryUsage.h +++ b/framework/include/postprocessors/MemoryUsage.h @@ -19,7 +19,7 @@ class MemoryUsage; -template<> +template <> InputParameters validParams(); /** @@ -38,13 +38,15 @@ class MemoryUsage : public GeneralPostprocessor virtual PostprocessorValue getValue() override; protected: - enum class MemType { + enum class MemType + { virtual_memory, physical_memory, page_faults } _mem_type; - enum class ValueType { + enum class ValueType + { total, average, max_process, diff --git a/framework/src/postprocessors/MemoryUsage.C b/framework/src/postprocessors/MemoryUsage.C index 4ceeb80796e0..6b525e89683f 100644 --- a/framework/src/postprocessors/MemoryUsage.C +++ b/framework/src/postprocessors/MemoryUsage.C @@ -23,21 +23,25 @@ #include #endif -template<> -InputParameters validParams() +template <> +InputParameters +validParams() { InputParameters params = validParams(); params.addClassDescription("Memory usage statistics for the running simulation."); MooseEnum mem_type("virtual_memory physical_memory page_faults", "virtual_memory"); params.addParam("mem_type", mem_type, "Memory metric to report."); MooseEnum value_type("total average max_process min_processs", "total"); - params.addParam("value_type", value_type, "Aggregation method to apply to the requested memory metric."); - params.addParam("report_peak_value", true, "If the postprocessor is executed more than one during a time step, report the aggregated peak value."); + params.addParam("value_type", value_type, + "Aggregation method to apply to the requested memory metric."); + params.addParam("report_peak_value", true, "If the postprocessor is executed more than one " + "during a time step, report the aggregated peak " + "value."); return params; } -MemoryUsage::MemoryUsage(const InputParameters & parameters) : - GeneralPostprocessor(parameters), +MemoryUsage::MemoryUsage(const InputParameters & parameters) + : GeneralPostprocessor(parameters), _mem_type(getParam("mem_type").getEnum()), _value_type(getParam("value_type").getEnum()), _report_peak_value(getParam("report_peak_value")) @@ -59,6 +63,15 @@ MemoryUsage::initialize() void MemoryUsage::execute() { + // data entries are numbered according to their position in /proc/self/stat + enum StatItem + { + index_page_faults = 8, + index_virtual_size = 19, + index_resident_size = 20, + num = 21 // total number of entries read + }; + // inspect /proc std::ifstream stat_stream("/proc/self/stat", std::ios_base::in); std::array val; @@ -67,25 +80,26 @@ MemoryUsage::execute() // if the proc filesystem file is found (Linux) read its contents std::string pid, comm, state; stat_stream >> pid >> comm >> state; - for (unsigned int i = 0; i < 21; ++i) + for (unsigned int i = 0; i < num; ++i) stat_stream >> val[i]; // resident size is reported as number of pages in /proc - val[20] *= sysconf(_SC_PAGE_SIZE); + val[index_resident_size] *= sysconf(_SC_PAGE_SIZE); } else { // set all data entries to zero (if all else should fail) val.fill(0); - // obtain mach task info on mac OS +// obtain mach task info on mac OS #ifdef __APPLE__ struct task_basic_info t_info; mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT; - if (KERN_SUCCESS == task_info(mach_task_self(), TASK_BASIC_INFO, reinterpret_cast(&t_info), &t_info_count)) + if (KERN_SUCCESS == task_info(mach_task_self(), TASK_BASIC_INFO, + reinterpret_cast(&t_info), &t_info_count)) { - val[19] = t_info.virtual_size; - val[20] = t_info.resident_size; + val[index_virtual_size] = t_info.virtual_size; + val[index_resident_size] = t_info.resident_size; } #endif } @@ -94,16 +108,16 @@ MemoryUsage::execute() switch (_mem_type) { case MemType::virtual_memory: - _value = val[19]; + _value = val[index_virtual_size]; break; case MemType::physical_memory: - _value = val[20]; + _value = val[index_resident_size]; break; case MemType::page_faults: // major page faults are currently only reported on Linux systems - _value = val[8]; + _value = val[index_page_faults]; break; } } @@ -141,5 +155,3 @@ MemoryUsage::getValue() { return _report_peak_value ? _peak_value : _value; } - -#undef RUSAGE_AVAILABLE diff --git a/test/tests/postprocessors/memory_usage/print_memory_usage.i b/test/tests/postprocessors/memory_usage/print_memory_usage.i index d37a3203b3b8..98dfdc3d6378 100644 --- a/test/tests/postprocessors/memory_usage/print_memory_usage.i +++ b/test/tests/postprocessors/memory_usage/print_memory_usage.i @@ -87,8 +87,8 @@ [Executioner] type = Transient solve_type = 'NEWTON' - petsc_options_iname = '-pc_type' - petsc_options_value = 'lu' + petsc_options_iname = '-pc_type -sub_pc_type' + petsc_options_value = 'asm lu' nl_abs_tol = 1e-10