X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Fexperimental%2Fio%2Ftest%2FAsyncIOTest.cpp;h=f4ee54b6b91b464d1ad70c8993b2c8a24bacd94a;hb=46de7098b46d000be284450d582c14608cab6f93;hp=de00065aff0eb1a3d8e10f1c5cfb884018fbcd97;hpb=e2b1c08aae0f2651a56de5a519705bbe13331f46;p=folly.git diff --git a/folly/experimental/io/test/AsyncIOTest.cpp b/folly/experimental/io/test/AsyncIOTest.cpp index de00065a..f4ee54b6 100644 --- a/folly/experimental/io/test/AsyncIOTest.cpp +++ b/folly/experimental/io/test/AsyncIOTest.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -152,20 +153,39 @@ void testReadsSerially(const std::vector& specs, } void testReadsParallel(const std::vector& specs, - AsyncIO::PollMode pollMode) { + AsyncIO::PollMode pollMode, + bool multithreaded) { AsyncIO aioReader(specs.size(), pollMode); std::unique_ptr ops(new AsyncIO::Op[specs.size()]); std::vector bufs; + bufs.reserve(specs.size()); int fd = ::open(tempFile.path().c_str(), O_DIRECT | O_RDONLY); PCHECK(fd != -1); SCOPE_EXIT { ::close(fd); }; + + std::vector threads; + if (multithreaded) { + threads.reserve(specs.size()); + } for (int i = 0; i < specs.size(); i++) { bufs.push_back(allocateAligned(specs[i].size)); + } + auto submit = [&] (int i) { ops[i].pread(fd, bufs[i].get(), specs[i].size, specs[i].start); aioReader.submit(&ops[i]); + }; + for (int i = 0; i < specs.size(); i++) { + if (multithreaded) { + threads.emplace_back([&submit, i] { submit(i); }); + } else { + submit(i); + } + } + for (auto& t : threads) { + t.join(); } std::vector pending(specs.size(), true); @@ -249,7 +269,8 @@ void testReadsQueued(const std::vector& specs, void testReads(const std::vector& specs, AsyncIO::PollMode pollMode) { testReadsSerially(specs, pollMode); - testReadsParallel(specs, pollMode); + testReadsParallel(specs, pollMode, false); + testReadsParallel(specs, pollMode, true); testReadsQueued(specs, pollMode); } @@ -321,7 +342,7 @@ TEST(AsyncIO, ManyAsyncDataNotPollable) { { std::vector v; for (int i = 0; i < 1000; i++) { - v.push_back({kAlign * i, kAlign}); + v.push_back({off_t(kAlign * i), kAlign}); } testReads(v, AsyncIO::NOT_POLLABLE); } @@ -331,7 +352,7 @@ TEST(AsyncIO, ManyAsyncDataPollable) { { std::vector v; for (int i = 0; i < 1000; i++) { - v.push_back({kAlign * i, kAlign}); + v.push_back({off_t(kAlign * i), kAlign}); } testReads(v, AsyncIO::POLLABLE); }