Skip to content
Snippets Groups Projects
Commit bd2acace authored by Sebastian Eibl's avatar Sebastian Eibl
Browse files

added getResidentMemorySize to get how much memory is currently used

parent f210886a
Branches
Tags
No related merge requests found
//======================================================================================================================
//
// This file is part of waLBerla. waLBerla is free software: you can
// redistribute it and/or modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// waLBerla is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with waLBerla (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
//
//! \file MemoryUsage.cpp
//! \author Sebastian Eibl <sebastian.eibl@fau.de>
//
//======================================================================================================================
#include "MemoryUsage.h"
#ifdef __linux__
#include <sys/resource.h>
#endif
#include "waLBerlaDefinitions.h"
#include "core/logging/Logging.h"
#include "core/math/Sample.h"
namespace walberla {
long getResidentMemorySize()
{
#ifdef __linux__
struct rusage usage;
int gru = getrusage(RUSAGE_SELF, &usage);
if (gru!=0)
WALBERLA_LOG_WARNING("There was an error getting memory statistics!");
return usage.ru_maxrss;
#else
WALBERLA_LOG_WARNING("Getting memory statistics is currently not supported on non-Linux systems!");
return 0;
#endif
}
void printResidentMemoryStatistics()
{
math::Sample memory;
memory.castToRealAndInsert(getResidentMemorySize());
memory.mpiGatherRoot();
WALBERLA_LOG_INFO_ON_ROOT("resident memory: " << memory.format());
}
} // namespace walberla
//======================================================================================================================
//
// This file is part of waLBerla. waLBerla is free software: you can
// redistribute it and/or modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// waLBerla is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with waLBerla (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
//
//! \file MemoryUsage.h
//! \author Sebastian Eibl <sebastian.eibl@fau.de>
//
//======================================================================================================================
#pragma once
#include <string>
namespace walberla {
/**
* @return The current resident memory size of the calling process in kilobytes.
*/
long getResidentMemorySize();
/**
* Determines memory usage on all MPI processes and prints statistics. Output
* is in kilobytes.
* \attention uses mpi gather operation
*/
void printResidentMemoryStatistics();
} // namespace walberla
...@@ -194,6 +194,9 @@ waLBerla_execute_test( NAME FunctionTraitsTest ) ...@@ -194,6 +194,9 @@ waLBerla_execute_test( NAME FunctionTraitsTest )
waLBerla_compile_test( FILES GridGeneratorTest.cpp ) waLBerla_compile_test( FILES GridGeneratorTest.cpp )
waLBerla_execute_test( NAME GridGeneratorTest ) waLBerla_execute_test( NAME GridGeneratorTest )
waLBerla_compile_test( FILES MemoryUsage.cpp )
waLBerla_execute_test( NAME MemoryUsage )
waLBerla_compile_test( FILES OpenMPWrapperTest.cpp ) waLBerla_compile_test( FILES OpenMPWrapperTest.cpp )
waLBerla_execute_test( NAME OpenMPWrapperTest ) waLBerla_execute_test( NAME OpenMPWrapperTest )
......
//======================================================================================================================
//
// This file is part of waLBerla. waLBerla is free software: you can
// redistribute it and/or modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// waLBerla is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with waLBerla (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
//
//! \file MemoryUsage.cpp
//! \author Sebastian Eibl <sebastian.eibl@fau.de>
//
//======================================================================================================================
#include "core/Environment.h"
#include "core/MemoryUsage.h"
#include "core/debug/CheckFunctions.h"
#include "core/debug/TestSubsystem.h"
#include "core/logging/Logging.h"
#include <vector>
using namespace walberla;
int main( int argc, char** argv )
{
Environment env(argc, argv);
WALBERLA_UNUSED(env);
debug::enterTestMode();
std::vector<int> stuff(200*1024*1024/sizeof(int),1);
auto memSize = getResidentMemorySize();
#ifdef __linux__
WALBERLA_CHECK_GREATER(memSize, 200000);
WALBERLA_CHECK_LESS (memSize, 250000);
#else
WALBERLA_CHECK_EQUAL(memSize, 0);
#endif
printResidentMemoryStatistics();
WALBERLA_LOG_DEVEL(stuff[0]); //make sure stuff is not optimized
return EXIT_SUCCESS;
}
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