Skip to content

Commit 5764794

Browse files
spikehfacebook-github-bot
authored andcommitted
IoUringProvidedBufferRing: make huge pages configurable
Summary: As per title, and make it false by default as there's a known issue with kernel v6.9 + huge pages + provided buffers. Reviewed By: yfeldblum Differential Revision: D72349394 fbshipit-source-id: c4282b964f4dac1227076cf1e1a2562fbb887fde
1 parent 63a2346 commit 5764794

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

folly/io/async/IoUringProvidedBufferRing.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,12 @@ IoUringProvidedBufferRing::IoUringProvidedBufferRing(
8585
uint16_t gid,
8686
int count,
8787
int bufferShift,
88-
int ringSizeShift)
88+
int ringSizeShift,
89+
bool useHugePages)
8990
: IoUringBufferProviderBase(
9091
gid, ProvidedBuffersBuffer::calcBufferSize(bufferShift)),
9192
ioRingPtr_(ioRingPtr),
92-
buffer_(count, bufferShift, ringSizeShift, true) {
93+
buffer_(count, bufferShift, ringSizeShift, useHugePages) {
9394
if (count > std::numeric_limits<uint16_t>::max()) {
9495
throw std::runtime_error("too many buffers");
9596
}

folly/io/async/IoUringProvidedBufferRing.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ class IoUringProvidedBufferRing : public IoUringBufferProviderBase {
3838
uint16_t gid,
3939
int count,
4040
int bufferShift,
41-
int ringSizeShift);
41+
int ringSizeShift,
42+
bool useHugePages = false);
4243

4344
void enobuf() noexcept override;
4445
void unusedBuf(uint16_t i) noexcept override;

folly/io/async/test/IoUringProvidedBufferRingTest.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,17 @@ TEST_F(IoUringProvidedBufferRingTest, Create) {
3939
io_uring_queue_init(512, &ring, 0);
4040
int sizeShift = std::max<int>(get_shift(4096), 5);
4141
int ringShift = std::max<int>(get_shift(1000), 1);
42-
IoUringProvidedBufferRing bufRing{&ring, 1, 1000, sizeShift, ringShift};
42+
IoUringProvidedBufferRing bufRing{&ring, 1, 1000, sizeShift, ringShift, true};
43+
EXPECT_EQ(bufRing.count(), 1000);
44+
}
45+
46+
TEST_F(IoUringProvidedBufferRingTest, CreateNoHugepages) {
47+
io_uring ring{};
48+
io_uring_queue_init(512, &ring, 0);
49+
int sizeShift = std::max<int>(get_shift(4096), 5);
50+
int ringShift = std::max<int>(get_shift(1000), 1);
51+
IoUringProvidedBufferRing bufRing{
52+
&ring, 1, 1000, sizeShift, ringShift, false};
4353
EXPECT_EQ(bufRing.count(), 1000);
4454
}
4555

0 commit comments

Comments
 (0)