diff --git a/src/XrdFileCache/README b/src/XrdFileCache/README index f76251a22da..44244e0db95 100644 --- a/src/XrdFileCache/README +++ b/src/XrdFileCache/README @@ -114,12 +114,11 @@ CONFIGURATION pfc.blocksize: prefetch buffer size, default 1M -pfc.nread: number of in memory cached blocks reserved for read tasks +pfc.ram [bytes[g]]: maximum allowed RAM usage for caching proxy -pfc.nprefetch: number of in memory cached blocks reserved for prefetch tasks +pfc.prefetch : prefetch level, default is 10. Value zero disables prefetching. -pfc.diskusage : high / low watermarks for disk cache -purge operation (default 0.9 and 0.95) +pfc.diskusage diskusage boundaries, can be specified relative in percantage or in g or T bytes pfc.user : username used by XrdOss plugin @@ -135,7 +134,7 @@ Examples a) Enable proxy file prefetching: pps.cachelib libXrdFileCache.so pfc.localroot /data/xrd-file-cache -pfc.nprefetch 1 +pfc.ram 5g b) enable file block mode, with block size 64 MB: diff --git a/src/XrdFileCache/XrdFileCache.cc b/src/XrdFileCache/XrdFileCache.cc index 09b1c9cedac..f3ec32cabf4 100644 --- a/src/XrdFileCache/XrdFileCache.cc +++ b/src/XrdFileCache/XrdFileCache.cc @@ -78,6 +78,12 @@ XrdOucCache2 *XrdOucGetCache2(XrdSysLogger *logger, } err.Emsg("Retrieve", "Success - returning a factory."); + pthread_t tid1; + XrdSysThread::Run(&tid1, ProcessWriteTaskThread, (void*)(&factory), 0, "XrdFileCache WriteTasks "); + + pthread_t tid2; + XrdSysThread::Run(&tid2, PrefetchThread, (void*)(&factory), 0, "XrdFileCache Prefetch "); + pthread_t tid; XrdSysThread::Run(&tid, CacheDirCleanupThread, NULL, 0, "XrdFileCache CacheDirCleanup"); @@ -128,11 +134,6 @@ Cache::Cache() : XrdOucCache(), m_prefetch_condVar(0), m_RAMblocks_used(0) { - pthread_t tid1; - XrdSysThread::Run(&tid1, ProcessWriteTaskThread, (void*)this, 0, "XrdFileCache WriteTasks "); - - pthread_t tid2; - XrdSysThread::Run(&tid2, PrefetchThread, (void*)this, 0, "XrdFileCache Prefetch "); } //______________________________________________________________________________ @@ -315,7 +316,7 @@ Cache::RegisterPrefetchFile(File* file) { // called from File::Open() - if (Cache::GetInstance().RefConfiguration().m_prefetch) + if (Cache::GetInstance().RefConfiguration().m_prefetch_max_blocks) { XrdCl::DefaultEnv::GetLog()->Dump(XrdCl::AppMsg, "Cache::Register new file BEGIN"); @@ -408,7 +409,7 @@ Cache::Stat(const char *curl, struct stat &sbuff) void Cache::Prefetch() { - const static int limitRAM= Cache::GetInstance().RefConfiguration().m_NRamBuffers * 0.7; + int limitRAM= Cache::GetInstance().RefConfiguration().m_NRamBuffers * 0.7; XrdCl::DefaultEnv::GetLog()->Dump(XrdCl::AppMsg, "Cache::Prefetch thread start"); diff --git a/src/XrdFileCache/XrdFileCache.hh b/src/XrdFileCache/XrdFileCache.hh index 84489a7b889..847fece3788 100644 --- a/src/XrdFileCache/XrdFileCache.hh +++ b/src/XrdFileCache/XrdFileCache.hh @@ -52,7 +52,7 @@ namespace XrdFileCache m_diskUsageLWM(-1), m_diskUsageHWM(-1), m_bufferSize(1024*1024), - m_RamAbsAvailable(8*1024*1024), + m_RamAbsAvailable(0), m_NRamBuffers(-1), m_prefetch_max_blocks(10), m_hdfsbsize(128*1024*1024) {} @@ -67,7 +67,6 @@ namespace XrdFileCache long long m_bufferSize; //!< prefetch buffer size, default 1MB long long 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 long long m_hdfsbsize; //!< used with m_hdfsmode, default 128MB diff --git a/src/XrdFileCache/XrdFileCacheConfiguration.cc b/src/XrdFileCache/XrdFileCacheConfiguration.cc index 3017425c515..513e71bd2fb 100644 --- a/src/XrdFileCache/XrdFileCacheConfiguration.cc +++ b/src/XrdFileCache/XrdFileCacheConfiguration.cc @@ -152,17 +152,23 @@ bool Cache::Config(XrdSysLogger *logger, const char *config_filename, const char } // get number of available RAM blocks after process configuration + if (m_configuration.m_RamAbsAvailable == 0 ) + { + m_log.Emsg("Error", "RAM usage not specified. Please set pfc.ram value in configuration file."); + return false; + } m_configuration.m_NRamBuffers = static_cast(m_configuration.m_RamAbsAvailable/ m_configuration.m_bufferSize); + if (retval) { int loff = 0; char buff[2048]; loff = snprintf(buff, sizeof(buff), "result\n" "\tpfc.blocksize %lld\n" - "\tpfc.prefetch %d\n" + "\tpfc.prefetch %ld\n" "\tpfc.nramblocks %d\n\n", m_configuration.m_bufferSize, - m_configuration.m_prefetch, // AMT not sure what parsing should be + m_configuration.m_prefetch_max_blocks, // AMT not sure what parsing should be m_configuration.m_NRamBuffers ); if (m_configuration.m_hdfsmode) @@ -196,7 +202,6 @@ bool Cache::Config(XrdSysLogger *logger, const char *config_filename, const char bool Cache::ConfigParameters(std::string part, XrdOucStream& config ) { - printf("part %s \n", part.c_str()); XrdSysError err(0, ""); if ( part == "user" ) { @@ -251,7 +256,7 @@ bool Cache::ConfigParameters(std::string part, XrdOucStream& config ) return false; } } - else if (part == "prefetch_max_blocks" ) + else if (part == "prefetch" ) { const char* params = config.GetWord(); if (params) {