--- trunk/src/brains/BlockSnapshotManager.cpp 2005/02/15 19:36:07 351 +++ trunk/src/brains/BlockSnapshotManager.cpp 2006/09/08 16:13:21 1037 @@ -40,50 +40,55 @@ */ #include #include "brains/BlockSnapshotManager.hpp" +#include "utils/residentMem.h" #include "utils/physmem.h" #include "utils/Algorithm.hpp" #include "brains/SimInfo.hpp" #include "io/DumpReader.hpp" namespace oopse { -BlockSnapshotManager::BlockSnapshotManager(SimInfo* info, const std::string& filename, - int storageLayout, int blockCapacity) + BlockSnapshotManager::BlockSnapshotManager(SimInfo* info, const std::string& filename, + int storageLayout, int blockCapacity) : SnapshotManager(storageLayout), info_(info), blockCapacity_(blockCapacity), activeBlocks_(blockCapacity_, -1), activeRefCount_(blockCapacity_, 0) { - nAtoms_ = info->getNGlobalAtoms(); - nRigidBodies_ = info->getNGlobalRigidBodies(); + nAtoms_ = info->getNGlobalAtoms(); + nRigidBodies_ = info->getNGlobalRigidBodies(); - double avalPhysMem = physmem_available(); + RealType physMem = physmem_total(); + RealType rssMem = residentMem(); + RealType avaliablePhysMem = physMem - rssMem; - int bytesPerStuntDouble = DataStorage::getBytesPerStuntDouble(storageLayout); + int bytesPerStuntDouble = DataStorage::getBytesPerStuntDouble(storageLayout); - int bytesPerFrame = (nRigidBodies_ + nAtoms_) * bytesPerStuntDouble; + int bytesPerFrame = (nRigidBodies_ + nAtoms_) * bytesPerStuntDouble; - int frameCapacity = int (avalPhysMem / bytesPerFrame); + int frameCapacity = int (avaliablePhysMem / bytesPerFrame); - nSnapshotPerBlock_ = frameCapacity /blockCapacity_ ; + nSnapshotPerBlock_ = frameCapacity /blockCapacity_ ; + reader_ = new DumpReader(info, filename); + nframes_ = reader_->getNFrames(); - reader_ = new DumpReader(info, filename); - nframes_ = reader_->getNFrames(); - - int nblocks = nframes_ / nSnapshotPerBlock_; - if (nframes_ % nSnapshotPerBlock_ != 0) { + int nblocks = nframes_ / nSnapshotPerBlock_; + if (nframes_ % nSnapshotPerBlock_ != 0) { ++nblocks; - } + } - for (int i = 0; i < nblocks; ++i) { + for (int i = 0; i < nblocks; ++i) { blocks_.push_back(SnapshotBlock(i*nSnapshotPerBlock_, (i+1)*nSnapshotPerBlock_)); - } - //the last block may not have nSnapshotPerBlock frames, we need to consider this special situation - blocks_.back().second = nframes_; + } + //the last block may not have nSnapshotPerBlock frames, we need to consider this special situation + blocks_.back().second = nframes_; - snapshots_.insert(snapshots_.begin(), nframes_, static_cast(NULL)); + snapshots_.insert(snapshots_.begin(), nframes_, static_cast(NULL)); + + // std::cout << "physmem = " << int(physMem) << "\trssMem = "<< int(rssMem) << "\t availablePhysMem = " << int(avaliablePhysMem) <