[unit-tests] copier and mem_pool tests.
More to come
This commit is contained in:
@ -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),
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
|
Reference in New Issue
Block a user