Skip to content

Commit

Permalink
handle all errors
Browse files Browse the repository at this point in the history
  • Loading branch information
va-kuznecov committed Sep 26, 2024
1 parent 0122ee1 commit d1173c6
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
26 changes: 15 additions & 11 deletions ydb/library/pdisk_io/buffers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,16 +142,23 @@ TBufferPoolCommon::TBufferPoolCommon(ui32 bufferSize, ui32 bufferCount, TBufferP
: TBufferPool(bufferSize, bufferCount, params)
{
TBufferPool::UseHugePages = false;
Size = AlignUp((size_t)bufferSize, Alignment) * bufferCount + Alignment - 1;
Size = AlignUp((size_t)bufferSize * bufferCount, Alignment);
auto pageSize = sysconf(_SC_PAGE_SIZE);
Y_VERIFY(pageSize >= (i64)Alignment);
ui8 *alignedData;
if (HugePages) {
void *ptr = mmap(NULL, Size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB,
-1, 0);
Cerr << "ptr# " << ptr << " Alignment# " << Alignment << " Size# " << Size << Endl;
Y_VERIFY_S(ptr != MAP_FAILED, strerror(errno));
RawBufferHuge = ptr;
alignedData = (ui8*)AlignUp(RawBufferHuge, Alignment);
Cerr << "Create buffer pool, mmap_ptr# " << ptr << " Alignment# " << Alignment << " Size# " << Size << Endl;
if (ptr == MAP_FAILED) {
Cerr << "hugepages mmap failed with# " << strerror(errno) << Endl;
RawBuffer.Reset(new ui8[Size]);
alignedData = (ui8*)AlignUp(RawBuffer.Get(), Alignment);
} else {
RawBufferHuge = ptr;
alignedData = (ui8*)AlignUp(RawBufferHuge, Alignment);
}
} else {
RawBuffer.Reset(new ui8[Size]);
alignedData = (ui8*)AlignUp(RawBuffer.Get(), Alignment);
Expand All @@ -161,12 +168,9 @@ TBufferPoolCommon::TBufferPoolCommon(ui32 bufferSize, ui32 bufferCount, TBufferP
}

TBufferPoolCommon::~TBufferPoolCommon() {
Cerr << "~TBufferPoolCommon" << Endl;

if (HugePages) {
void *ptr = RawBufferHuge;
munmap(ptr, Size);
RawBufferHuge = nullptr;
if (HugePages && RawBufferHuge) {
int ret = munmap(RawBufferHuge, Size);
Y_VERIFY_S(ret == 0, "munmap failed, ptr# " << (void*)RawBufferHuge << " strerror# " << strerror(errno));
}
}

Expand Down
4 changes: 2 additions & 2 deletions ydb/library/pdisk_io/buffers.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,8 @@ class TBufferPool {
//
class TBufferPoolCommon : public TBufferPool {
TArrayHolder<ui8> RawBuffer;
void *RawBufferHuge;
size_t Size;
void *RawBufferHuge = nullptr;
size_t Size = 0;
public:
TBufferPoolCommon(ui32 bufferSize, ui32 bufferCount, TBufferPool::TPDiskParams params);
virtual ~TBufferPoolCommon();
Expand Down

0 comments on commit d1173c6

Please sign in to comment.