Commit e2b1c08a authored by Tudor Bosman's avatar Tudor Bosman Committed by Sara Golemon

Fix async_io_test to work with larger block sizes

Test Plan: ran it

Reviewed By: lucian@fb.com

FB internal diff: D787733
parent 26b90449
...@@ -40,7 +40,7 @@ using folly::AsyncIOQueue; ...@@ -40,7 +40,7 @@ using folly::AsyncIOQueue;
namespace { namespace {
constexpr size_t kAlignment = 512; // align reads to 512 B (for O_DIRECT) constexpr size_t kAlign = 4096; // align reads to 4096 B (for O_DIRECT)
struct TestSpec { struct TestSpec {
off_t start; off_t start;
...@@ -120,7 +120,7 @@ TemporaryFile tempFile(6 << 20); // 6MiB ...@@ -120,7 +120,7 @@ TemporaryFile tempFile(6 << 20); // 6MiB
typedef std::unique_ptr<char, void(*)(void*)> ManagedBuffer; typedef std::unique_ptr<char, void(*)(void*)> ManagedBuffer;
ManagedBuffer allocateAligned(size_t size) { ManagedBuffer allocateAligned(size_t size) {
void* buf; void* buf;
int rc = posix_memalign(&buf, 512, size); int rc = posix_memalign(&buf, kAlign, size);
CHECK_EQ(rc, 0) << strerror(rc); CHECK_EQ(rc, 0) << strerror(rc);
return ManagedBuffer(reinterpret_cast<char*>(buf), free); return ManagedBuffer(reinterpret_cast<char*>(buf), free);
} }
...@@ -264,56 +264,64 @@ TEST(AsyncIO, ZeroAsyncDataPollable) { ...@@ -264,56 +264,64 @@ TEST(AsyncIO, ZeroAsyncDataPollable) {
} }
TEST(AsyncIO, SingleAsyncDataNotPollable) { TEST(AsyncIO, SingleAsyncDataNotPollable) {
testReads({{0, 512}}, AsyncIO::NOT_POLLABLE); testReads({{0, kAlign}}, AsyncIO::NOT_POLLABLE);
testReads({{0, 512}}, AsyncIO::NOT_POLLABLE); testReads({{0, kAlign}}, AsyncIO::NOT_POLLABLE);
} }
TEST(AsyncIO, SingleAsyncDataPollable) { TEST(AsyncIO, SingleAsyncDataPollable) {
testReads({{0, 512}}, AsyncIO::POLLABLE); testReads({{0, kAlign}}, AsyncIO::POLLABLE);
testReads({{0, 512}}, AsyncIO::POLLABLE); testReads({{0, kAlign}}, AsyncIO::POLLABLE);
} }
TEST(AsyncIO, MultipleAsyncDataNotPollable) { TEST(AsyncIO, MultipleAsyncDataNotPollable) {
testReads({{512, 1024}, {512, 1024}, {512, 2048}}, AsyncIO::NOT_POLLABLE); testReads(
testReads({{512, 1024}, {512, 1024}, {512, 2048}}, AsyncIO::NOT_POLLABLE); {{kAlign, 2*kAlign}, {kAlign, 2*kAlign}, {kAlign, 4*kAlign}},
AsyncIO::NOT_POLLABLE);
testReads(
{{kAlign, 2*kAlign}, {kAlign, 2*kAlign}, {kAlign, 4*kAlign}},
AsyncIO::NOT_POLLABLE);
testReads({ testReads({
{0, 5*1024*1024}, {0, 5*1024*1024},
{512, 5*1024*1024}, {kAlign, 5*1024*1024}
}, AsyncIO::NOT_POLLABLE); }, AsyncIO::NOT_POLLABLE);
testReads({ testReads({
{512, 0}, {kAlign, 0},
{512, 512}, {kAlign, kAlign},
{512, 1024}, {kAlign, 2*kAlign},
{512, 10*1024}, {kAlign, 20*kAlign},
{512, 1024*1024}, {kAlign, 1024*1024},
}, AsyncIO::NOT_POLLABLE); }, AsyncIO::NOT_POLLABLE);
} }
TEST(AsyncIO, MultipleAsyncDataPollable) { TEST(AsyncIO, MultipleAsyncDataPollable) {
testReads({{512, 1024}, {512, 1024}, {512, 2048}}, AsyncIO::POLLABLE); testReads(
testReads({{512, 1024}, {512, 1024}, {512, 2048}}, AsyncIO::POLLABLE); {{kAlign, 2*kAlign}, {kAlign, 2*kAlign}, {kAlign, 4*kAlign}},
AsyncIO::POLLABLE);
testReads(
{{kAlign, 2*kAlign}, {kAlign, 2*kAlign}, {kAlign, 4*kAlign}},
AsyncIO::POLLABLE);
testReads({ testReads({
{0, 5*1024*1024}, {0, 5*1024*1024},
{512, 5*1024*1024}, {kAlign, 5*1024*1024}
}, AsyncIO::POLLABLE); }, AsyncIO::NOT_POLLABLE);
testReads({ testReads({
{512, 0}, {kAlign, 0},
{512, 512}, {kAlign, kAlign},
{512, 1024}, {kAlign, 2*kAlign},
{512, 10*1024}, {kAlign, 20*kAlign},
{512, 1024*1024}, {kAlign, 1024*1024},
}, AsyncIO::POLLABLE); }, AsyncIO::NOT_POLLABLE);
} }
TEST(AsyncIO, ManyAsyncDataNotPollable) { TEST(AsyncIO, ManyAsyncDataNotPollable) {
{ {
std::vector<TestSpec> v; std::vector<TestSpec> v;
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
v.push_back({512 * i, 512}); v.push_back({kAlign * i, kAlign});
} }
testReads(v, AsyncIO::NOT_POLLABLE); testReads(v, AsyncIO::NOT_POLLABLE);
} }
...@@ -323,7 +331,7 @@ TEST(AsyncIO, ManyAsyncDataPollable) { ...@@ -323,7 +331,7 @@ TEST(AsyncIO, ManyAsyncDataPollable) {
{ {
std::vector<TestSpec> v; std::vector<TestSpec> v;
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
v.push_back({512 * i, 512}); v.push_back({kAlign * i, kAlign});
} }
testReads(v, AsyncIO::POLLABLE); testReads(v, AsyncIO::POLLABLE);
} }
...@@ -337,7 +345,7 @@ TEST(AsyncIO, NonBlockingWait) { ...@@ -337,7 +345,7 @@ TEST(AsyncIO, NonBlockingWait) {
SCOPE_EXIT { SCOPE_EXIT {
::close(fd); ::close(fd);
}; };
size_t size = 1024; size_t size = 2*kAlign;
auto buf = allocateAligned(size); auto buf = allocateAligned(size);
op.pread(fd, buf.get(), size, 0); op.pread(fd, buf.get(), size, 0);
aioReader.submit(&op); aioReader.submit(&op);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment