[unit-tests] copier and mem_pool tests.

More to come
This commit is contained in:
Joe Thornber
2016-05-07 11:47:40 +01:00
parent 4f54245600
commit 73a69abfd2
7 changed files with 228 additions and 8 deletions

View File

@ -37,6 +37,7 @@ copier::issue(copy_op const &op)
job.op.read_complete = job.op.write_complete = false;
unsigned key = genkey(); // used as context for the io_engine
cerr << "data = " << &(*data) << "\n";
engine_.issue_io(src_handle_,
io_engine::READ,
to_sector(op.src_b),

View File

@ -19,6 +19,17 @@ namespace bcache {
write_complete(false) {
}
copy_op(block_address src_b_,
block_address src_e_,
block_address dest_b_)
: src_b(src_b_),
src_e(src_e_),
dest_b(dest_b_),
read_complete(false),
write_complete(false) {
}
block_address src_b, src_e;
block_address dest_b;

View File

@ -1,18 +1,19 @@
#include "block-cache/mem_pool.h"
#include <sstream>
#include <stdexcept>
#include <stdlib.h>
using namespace bcache;
using namespace boost;
using namespace mempool_detail;
#define PAGE_SIZE 4096
using namespace std;
//----------------------------------------------------------------
mempool::mempool(size_t block_size, size_t total_mem)
mempool::mempool(size_t block_size, size_t total_mem, size_t alignment)
{
mem_ = alloc_aligned(total_mem, PAGE_SIZE);
mem_ = alloc_aligned(total_mem, alignment);
unsigned nr_blocks = total_mem / block_size;
for (auto i = 0u; i < nr_blocks; i++)
@ -21,6 +22,7 @@ mempool::mempool(size_t block_size, size_t total_mem)
mempool::~mempool()
{
free_.clear();
::free(mem_);
}
@ -47,8 +49,11 @@ mempool::alloc_aligned(size_t len, size_t alignment)
{
void *result = NULL;
int r = posix_memalign(&result, alignment, len);
if (r)
return NULL;
if (r) {
ostringstream out;
out << "posix_memalign failed: len = " << len << ", alignment = " << alignment << ", r = " << r << "\n";
throw runtime_error(out.str());
}
return result;
}

View File

@ -13,13 +13,14 @@ namespace bcache {
// FIXME: move to base?
namespace mempool_detail {
struct alloc_block : public bi::list_base_hook<> {
struct alloc_block : public bi::list_base_hook<bi::link_mode<bi::normal_link>> {
};
};
class mempool {
public:
mempool(size_t block_size, size_t total_mem);
// alignment must be a power of 2
mempool(size_t block_size, size_t total_mem, size_t alignment = 8);
~mempool();
boost::optional<void *> alloc();