diff --git a/src/XrdFileCache/XrdFileCache.hh b/src/XrdFileCache/XrdFileCache.hh index 0341a6f0397..e4daec0756a 100644 --- a/src/XrdFileCache/XrdFileCache.hh +++ b/src/XrdFileCache/XrdFileCache.hh @@ -52,7 +52,8 @@ namespace XrdFileCache m_diskUsageLWM(-1), m_diskUsageHWM(-1), m_bufferSize(1024*1024), - m_NRamBuffers(8000), + m_RamAbsAvailable(8*1024*1024), + m_NRamBuffers(-1), m_prefetch_max_blocks(10), m_hdfsbsize(128*1024*1024) {} @@ -64,7 +65,8 @@ namespace XrdFileCache long long m_diskUsageHWM; //!< cache purge high water mark long long m_bufferSize; //!< prefetch buffer size, default 1MB - int m_NRamBuffers; //!< number of total in-memory cache blocks + int m_RamAbsAvailable; //!< available from configuration + int m_NRamBuffers; //!< number of total in-memory cache blocks, cached bool m_prefetch; //!< prefetch enable state size_t m_prefetch_max_blocks;//!< maximum number of blocks to prefetch per file diff --git a/src/XrdFileCache/XrdFileCacheConfiguration.cc b/src/XrdFileCache/XrdFileCacheConfiguration.cc index dcfe44f6662..f09ae3017d2 100644 --- a/src/XrdFileCache/XrdFileCacheConfiguration.cc +++ b/src/XrdFileCache/XrdFileCacheConfiguration.cc @@ -151,6 +151,8 @@ bool Cache::Config(XrdSysLogger *logger, const char *config_filename, const char } } + // get number of available RAM blocks after process configuration + m_configuration.m_NRamBuffers = static_cast(m_configuration.m_RamAbsAvailable/ m_configuration.m_bufferSize); if (retval) { int loff = 0; @@ -158,7 +160,7 @@ bool Cache::Config(XrdSysLogger *logger, const char *config_filename, const char loff = snprintf(buff, sizeof(buff), "result\n" "\tpfc.blocksize %lld\n" "\tpfc.prefetch %d\n" - "\tpfc.nram %d\n\n", + "\tpfc.nramblocks %d\n\n", m_configuration.m_bufferSize, m_configuration.m_prefetch, // AMT not sure what parsing should be m_configuration.m_NRamBuffers ); @@ -269,7 +271,12 @@ bool Cache::ConfigParameters(std::string part, XrdOucStream& config ) } else if (part == "nram" ) { - m_configuration.m_NRamBuffers = ::atoi(config.GetWord()); + long long minRAM = 1024* 1024 * 1024;; + long long maxRAM = 100 * minRAM; + if ( XrdOuca2x::a2sz(m_log, "get RAM available", config.GetWord(), &m_RamAbsAvailable, minRAM, maxRAM)) + { + return false; + } } else if ( part == "hdfsmode" ) {