Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/iocore/cache/Stripe.cc
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include "tscore/ink_memory.h"

#include <cstddef>
#include <cstdlib>
#include <cstring>

using CacheHTTPInfo = HTTPInfo;
Expand Down Expand Up @@ -97,6 +98,18 @@ Stripe::Stripe(CacheDisk *disk, off_t blocks, off_t dir_skip, int avg_obj_size,
this->_init_directory(this->dirlen(), this->headerlen(), DIRECTORY_FOOTER_SIZE);
}

Stripe::~Stripe()
{
if (this->directory.raw_dir != nullptr) {
if (this->_dir_uses_hugepages) {
ats_free_hugepage(this->directory.raw_dir, this->dirlen());
} else {
ats_free(this->directory.raw_dir);
}
this->directory.raw_dir = nullptr;
}
}

void
Stripe::_init_hash_text(CacheDisk const *disk, off_t blocks, off_t dir_skip)
{
Expand Down Expand Up @@ -154,6 +167,9 @@ Stripe::_init_directory(std::size_t directory_size, int header_size, int footer_
directory_size, (long long)this->len, percent(directory_size, this->len));
if (ats_hugepage_enabled()) {
this->directory.raw_dir = static_cast<char *>(ats_alloc_hugepage(directory_size));
if (this->directory.raw_dir != nullptr) {
this->_dir_uses_hugepages = true;
}
}
if (nullptr == this->directory.raw_dir) {
this->directory.raw_dir = static_cast<char *>(ats_memalign(ats_pagesize(), directory_size));
Expand Down
4 changes: 4 additions & 0 deletions src/iocore/cache/Stripe.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ class Stripe
*/
Stripe(CacheDisk *disk, off_t blocks, off_t dir_skip, int avg_obj_size = -1, int fragment_size = -1);

~Stripe();

int dir_check();

uint32_t round_to_approx_size(uint32_t l) const;
Expand Down Expand Up @@ -150,6 +152,8 @@ class Stripe
bool flush_aggregate_write_buffer(int fd);

private:
bool _dir_uses_hugepages{false};

void _init_hash_text(CacheDisk const *disk, off_t blocks, off_t dir_skip);
void _init_data(off_t store_block_size, int avg_obj_size = -1);
void _init_data_internal(int avg_obj_size = -1); // Defaults to cache_config_min_average_object_size;
Expand Down