Skip to content

Commit

Permalink
librbd: add task pool / work queue for requests
Browse files Browse the repository at this point in the history
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit afb896d)

Conflicts:
	src/librbd/ImageCtx.cc
	src/librbd/ImageCtx.h
  • Loading branch information
Jason Dillaman committed Jun 5, 2015
1 parent ffd0933 commit 9fa3039
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/common/config_opts.h
Expand Up @@ -858,6 +858,8 @@ OPTION(journal_discard, OPT_BOOL, false) //using ssd disk as journal, whether su
OPTION(rados_mon_op_timeout, OPT_DOUBLE, 0) // how many seconds to wait for a response from the monitor before returning an error from a rados operation. 0 means on limit.
OPTION(rados_osd_op_timeout, OPT_DOUBLE, 0) // how many seconds to wait for a response from osds before returning an error from a rados operation. 0 means no limit.

OPTION(rbd_op_threads, OPT_INT, 1)
OPTION(rbd_op_thread_timeout, OPT_INT, 60)
OPTION(rbd_cache, OPT_BOOL, true) // whether to enable caching (writeback unless rbd_cache_max_dirty is 0)
OPTION(rbd_cache_writethrough_until_flush, OPT_BOOL, true) // whether to make writeback caching writethrough until flush is called, to be sure the user of librbd will send flushs so that writeback is safe
OPTION(rbd_cache_size, OPT_LONGLONG, 32<<20) // cache size in bytes
Expand Down
29 changes: 28 additions & 1 deletion src/librbd/ImageCtx.cc
Expand Up @@ -6,6 +6,7 @@
#include "common/dout.h"
#include "common/errno.h"
#include "common/perf_counters.h"
#include "common/WorkQueue.h"

#include "librbd/AsyncOperation.h"
#include "librbd/AsyncRequest.h"
Expand All @@ -32,6 +33,23 @@ using librados::snap_t;
using librados::IoCtx;

namespace librbd {

namespace {

class ThreadPoolSingleton : public ThreadPool {
public:
ThreadPoolSingleton(CephContext *cct)
: ThreadPool(cct, "librbd::thread_pool", cct->_conf->rbd_op_threads,
"rbd_op_threads") {
start();
}
virtual ~ThreadPoolSingleton() {
stop();
}
};

} // anonymous namespace

ImageCtx::ImageCtx(const string &image_name, const string &image_id,
const char *snap, IoCtx& p, bool ro)
: cct((CephContext*)p.cct()),
Expand Down Expand Up @@ -63,7 +81,7 @@ namespace librbd {
object_cacher(NULL), writeback_handler(NULL), object_set(NULL),
readahead(),
total_bytes_read(0), copyup_finisher(NULL),
object_map(*this)
object_map(*this), aio_work_queue(NULL)
{
md_ctx.dup(p);
data_ctx.dup(p);
Expand Down Expand Up @@ -113,6 +131,13 @@ namespace librbd {
copyup_finisher = new Finisher(cct);
copyup_finisher->start();
}

ThreadPoolSingleton *thread_pool_singleton;
cct->lookup_or_create_singleton_object<ThreadPoolSingleton>(
thread_pool_singleton, "librbd::thread_pool");
aio_work_queue = new ContextWQ("librbd::aio_work_queue",
cct->_conf->rbd_op_thread_timeout,
thread_pool_singleton);
}

ImageCtx::~ImageCtx() {
Expand All @@ -134,6 +159,8 @@ namespace librbd {
copyup_finisher = NULL;
}
delete[] format_string;

delete aio_work_queue;
}

int ImageCtx::init() {
Expand Down
3 changes: 3 additions & 0 deletions src/librbd/ImageCtx.h
Expand Up @@ -31,6 +31,7 @@
#include "librbd/parent_types.h"

class CephContext;
class ContextWQ;
class Finisher;
class PerfCounters;

Expand Down Expand Up @@ -130,6 +131,8 @@ namespace librbd {

xlist<AsyncResizeRequest*> async_resize_reqs;

ContextWQ *aio_work_queue;

/**
* Either image_name or image_id must be set.
* If id is not known, pass the empty std::string,
Expand Down
3 changes: 3 additions & 0 deletions src/librbd/internal.cc
Expand Up @@ -10,6 +10,7 @@
#include "common/errno.h"
#include "common/ContextCompletion.h"
#include "common/Throttle.h"
#include "common/WorkQueue.h"
#include "cls/lock/cls_lock_client.h"
#include "include/stringify.h"

Expand Down Expand Up @@ -2472,6 +2473,8 @@ int invoke_async_request(ImageCtx *ictx, const std::string& request_type,
}
}

ictx->aio_work_queue->drain();

ictx->cancel_async_requests();
ictx->readahead.wait_for_pending();
if (ictx->object_cacher) {
Expand Down

0 comments on commit 9fa3039

Please sign in to comment.