diff --git a/persistent-data/block.h b/persistent-data/block.h index 09646c7..8a0419e 100644 --- a/persistent-data/block.h +++ b/persistent-data/block.h @@ -135,6 +135,7 @@ namespace persistent_data { bool is_locked(block_address b) const; private: + uint64_t choose_cache_size(block_address nr_blocks) const; int open_or_create_block_file(std::string const &path, off_t file_size, mode m, bool excl); void check(block_address b) const; diff --git a/persistent-data/block.tcc b/persistent-data/block.tcc index 34b605a..4d70151 100644 --- a/persistent-data/block.tcc +++ b/persistent-data/block.tcc @@ -133,15 +133,22 @@ namespace persistent_data { //---------------------------------------------------------------- + template + uint64_t + block_manager::choose_cache_size(block_address nr_blocks) const + { + uint64_t const DEFAULT_CACHE_SIZE = 1024 * 1024 * 16; + return std::min(DEFAULT_CACHE_SIZE, BlockSize * nr_blocks); + } + template block_manager::block_manager(std::string const &path, block_address nr_blocks, unsigned max_concurrent_blocks, mode m, bool excl) - // FIXME: * BlockSize ? : fd_(open_or_create_block_file(path, nr_blocks * BlockSize, m, excl)), - bc_(fd_, BlockSize >> SECTOR_SHIFT, nr_blocks, 1024u * 1024u * 16), + bc_(fd_, BlockSize >> SECTOR_SHIFT, nr_blocks, choose_cache_size(nr_blocks)), superblock_ref_count_(0) { }