@@ -24,16 +24,19 @@ namespace cachelib {
2424
2525template <typename CacheTrait>
2626CacheAllocator<CacheTrait>::CacheAllocator(Config config)
27- : isOnShm_{config.memMonitoringEnabled ()},
27+ : memoryTierConfigs(config.getMemoryTierConfigs()),
28+ isOnShm_{config.memMonitoringEnabled ()},
2829 config_ (config.validate()),
29- tempShm_ (isOnShm_ ? std::make_unique<TempShmMapping>(config_.size)
30+ tempShm_ (isOnShm_ ? std::make_unique<TempShmMapping>(
31+ config_.getCacheSize())
3032 : nullptr ),
3133 allocator_ (isOnShm_ ? std::make_unique<MemoryAllocator>(
3234 getAllocatorConfig (config_),
3335 tempShm_->getAddr(),
34- config_.size )
36+ config_.getCacheSize() )
3537 : std::make_unique<MemoryAllocator>(
36- getAllocatorConfig (config_), config_.size)),
38+ getAllocatorConfig (config_),
39+ config_.getCacheSize())),
3740 compactCacheManager_(std::make_unique<CCacheManager>(*allocator_)),
3841 compressor_(createPtrCompressor()),
3942 accessContainer_(std::make_unique<AccessContainer>(
@@ -49,15 +52,22 @@ CacheAllocator<CacheTrait>::CacheAllocator(Config config)
4952 cacheCreationTime_{util::getCurrentTimeSec ()},
5053 nvmCacheState_{config_.cacheDir , config_.isNvmCacheEncryptionEnabled (),
5154 config_.isNvmCacheTruncateAllocSizeEnabled ()} {
55+ // TODO(MEMORY_TIER)
56+ if (std::holds_alternative<FileShmSegmentOpts>(
57+ memoryTierConfigs[0 ].getShmTypeOpts ())) {
58+ throw std::runtime_error (
59+ " Using custom memory tier is only supported for Shared Memory." );
60+ }
5261 initCommon (false );
5362}
5463
5564template <typename CacheTrait>
5665CacheAllocator<CacheTrait>::CacheAllocator(SharedMemNewT, Config config)
57- : isOnShm_{true },
66+ : memoryTierConfigs(config.getMemoryTierConfigs()),
67+ isOnShm_{true },
5868 config_ (config.validate()),
5969 shmManager_ (
60- std::make_unique<ShmManager>(config_.cacheDir, config_.usePosixShm )),
70+ std::make_unique<ShmManager>(config_.cacheDir, config_.isUsingPosixShm() )),
6171 allocator_ (createNewMemoryAllocator()),
6272 compactCacheManager_ (std::make_unique<CCacheManager>(*allocator_)),
6373 compressor_ (createPtrCompressor()),
@@ -69,7 +79,7 @@ CacheAllocator<CacheTrait>::CacheAllocator(SharedMemNewT, Config config)
6979 config_.accessConfig.getNumBuckets()),
7080 nullptr,
7181 ShmSegmentOpts(config_.accessConfig.getPageSize(),
72- false, config_.usePosixShm ))
82+ false, config_.isUsingPosixShm() ))
7383 .addr,
7484 compressor_,
7585 [this](Item* it) -> ItemHandle { return acquire (it); })),
@@ -81,7 +91,7 @@ CacheAllocator<CacheTrait>::CacheAllocator(SharedMemNewT, Config config)
8191 config_.chainedItemAccessConfig.getNumBuckets()),
8292 nullptr,
8393 ShmSegmentOpts(config_.accessConfig.getPageSize(),
84- false, config_.usePosixShm ))
94+ false, config_.isUsingPosixShm() ))
8595 .addr,
8696 compressor_,
8797 [this](Item* it) -> ItemHandle { return acquire (it); })),
@@ -92,12 +102,13 @@ CacheAllocator<CacheTrait>::CacheAllocator(SharedMemNewT, Config config)
92102 config_.isNvmCacheTruncateAllocSizeEnabled ()} {
93103 initCommon (false );
94104 shmManager_->removeShm (detail::kShmInfoName ,
95- PosixSysVSegmentOpts (config_.usePosixShm ));
105+ PosixSysVSegmentOpts (config_.isUsingPosixShm () ));
96106}
97107
98108template <typename CacheTrait>
99109CacheAllocator<CacheTrait>::CacheAllocator(SharedMemAttachT, Config config)
100- : isOnShm_{true },
110+ : memoryTierConfigs(config.getMemoryTierConfigs()),
111+ isOnShm_{true },
101112 config_ (config.validate()),
102113 shmManager_(
103114 std::make_unique<ShmManager>(config_.cacheDir, config_.usePosixShm)),
@@ -111,14 +122,14 @@ CacheAllocator<CacheTrait>::CacheAllocator(SharedMemAttachT, Config config)
111122 deserializer_->deserialize<AccessSerializationType>(),
112123 config_.accessConfig,
113124 shmManager_->attachShm(detail::kShmHashTableName , nullptr ,
114- ShmSegmentOpts (PageSizeT::NORMAL, false , config_.usePosixShm )),
125+ ShmSegmentOpts (PageSizeT::NORMAL, false , config_.isUsingPosixShm() )),
115126 compressor_,
116127 [this](Item* it) -> ItemHandle { return acquire (it); })),
117128 chainedItemAccessContainer_(std::make_unique<AccessContainer>(
118129 deserializer_->deserialize<AccessSerializationType>(),
119130 config_.chainedItemAccessConfig,
120131 shmManager_->attachShm(detail::kShmChainedItemHashTableName , nullptr ,
121- ShmSegmentOpts (PageSizeT::NORMAL, false , config_.usePosixShm )),
132+ ShmSegmentOpts (PageSizeT::NORMAL, false , config_.isUsingPosixShm() )),
122133 compressor_,
123134 [this](Item* it) -> ItemHandle { return acquire (it); })),
124135 chainedItemLocks_(config_.chainedItemsLockPower,
@@ -136,7 +147,7 @@ CacheAllocator<CacheTrait>::CacheAllocator(SharedMemAttachT, Config config)
136147 // this info shm segment here and the new info shm segment's size is larger
137148 // than this one, creating new one will fail.
138149 shmManager_->removeShm (detail::kShmInfoName ,
139- PosixSysVSegmentOpts (config_.usePosixShm ));
150+ PosixSysVSegmentOpts (config_.isUsingPosixShm () ));
140151}
141152
142153template <typename CacheTrait>
@@ -150,32 +161,39 @@ CacheAllocator<CacheTrait>::~CacheAllocator() {
150161}
151162
152163template <typename CacheTrait>
153- std::unique_ptr<MemoryAllocator>
154- CacheAllocator<CacheTrait>::createNewMemoryAllocator() {
164+ ShmSegmentOpts CacheAllocator<CacheTrait>::createShmCacheOpts() {
165+ if (memoryTierConfigs.size () > 1 ) {
166+ throw std::invalid_argument (" CacheLib only supports a single memory tier" );
167+ }
168+
155169 ShmSegmentOpts opts;
156170 opts.alignment = sizeof (Slab);
157- opts.typeOpts = PosixSysVSegmentOpts (config_.usePosixShm );
171+ opts.typeOpts = memoryTierConfigs[0 ].getShmTypeOpts ();
172+
173+ return opts;
174+ }
175+
176+ template <typename CacheTrait>
177+ std::unique_ptr<MemoryAllocator>
178+ CacheAllocator<CacheTrait>::createNewMemoryAllocator() {
158179 return std::make_unique<MemoryAllocator>(
159180 getAllocatorConfig (config_),
160181 shmManager_
161- ->createShm (detail::kShmCacheName , config_.size ,
162- config_.slabMemoryBaseAddr , opts )
182+ ->createShm (detail::kShmCacheName , config_.getCacheSize () ,
183+ config_.slabMemoryBaseAddr , createShmCacheOpts () )
163184 .addr ,
164- config_.size );
185+ config_.getCacheSize () );
165186}
166187
167188template <typename CacheTrait>
168189std::unique_ptr<MemoryAllocator>
169190CacheAllocator<CacheTrait>::restoreMemoryAllocator() {
170- ShmSegmentOpts opts;
171- opts.alignment = sizeof (Slab);
172- opts.typeOpts = PosixSysVSegmentOpts (config_.usePosixShm );
173191 return std::make_unique<MemoryAllocator>(
174192 deserializer_->deserialize <MemoryAllocator::SerializationType>(),
175193 shmManager_
176- ->attachShm (detail::kShmCacheName , config_.slabMemoryBaseAddr , opts)
177- .addr ,
178- config_.size ,
194+ ->attachShm (detail::kShmCacheName , config_.slabMemoryBaseAddr ,
195+ createShmCacheOpts ()) .addr ,
196+ config_.getCacheSize () ,
179197 config_.disableFullCoredump );
180198}
181199
@@ -274,7 +292,7 @@ void CacheAllocator<CacheTrait>::initWorkers() {
274292template <typename CacheTrait>
275293std::unique_ptr<Deserializer> CacheAllocator<CacheTrait>::createDeserializer() {
276294 auto infoAddr = shmManager_->attachShm (detail::kShmInfoName , nullptr ,
277- ShmSegmentOpts (PageSizeT::NORMAL, false , config_.usePosixShm ));
295+ ShmSegmentOpts (PageSizeT::NORMAL, false , config_.isUsingPosixShm () ));
278296 return std::make_unique<Deserializer>(
279297 reinterpret_cast <uint8_t *>(infoAddr.addr ),
280298 reinterpret_cast <uint8_t *>(infoAddr.addr ) + infoAddr.size );
@@ -2192,7 +2210,7 @@ PoolEvictionAgeStats CacheAllocator<CacheTrait>::getPoolEvictionAgeStats(
21922210template <typename CacheTrait>
21932211CacheMetadata CacheAllocator<CacheTrait>::getCacheMetadata() const noexcept {
21942212 return CacheMetadata{kCachelibVersion , kCacheRamFormatVersion ,
2195- kCacheNvmFormatVersion , config_.size };
2213+ kCacheNvmFormatVersion , config_.getCacheSize () };
21962214}
21972215
21982216template <typename CacheTrait>
@@ -3051,7 +3069,7 @@ void CacheAllocator<CacheTrait>::saveRamCache() {
30513069 ioBuf->coalesce ();
30523070
30533071 ShmSegmentOpts opts;
3054- opts.typeOpts = PosixSysVSegmentOpts (config_.usePosixShm );
3072+ opts.typeOpts = PosixSysVSegmentOpts (config_.isUsingPosixShm () );
30553073
30563074 void * infoAddr = shmManager_->createShm (detail::kShmInfoName , ioBuf->length (),
30573075 nullptr , opts).addr ;
0 commit comments