From 5d47db2d164d114933207ee19f6382ca2aa7a5a5 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 28 Sep 2012 17:24:40 -0700 Subject: [PATCH] OSD: queue ops based on message priority Signed-off-by: Samuel Just --- src/osd/OSD.cc | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index dc64e08c8b213..84e94d3d3705f 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -5613,8 +5613,15 @@ void OSD::enqueue_op(PG *pg, OpRequestRef op) void OSD::OpWQ::_enqueue(pair item) { - pqueue.enqueue(item.second->request->get_source_inst(), - 1, 1, item); + unsigned priority = item.second->request->get_priority(); + unsigned cost = item.second->request->get_data().length(); + if (priority >= CEPH_MSG_PRIO_LOW) + pqueue.enqueue_immediate( + item.second->request->get_source_inst(), + priority, item); + else + pqueue.enqueue(item.second->request->get_source_inst(), + priority, cost, item); osd->logger->set(l_osd_opq, pqueue.length()); } @@ -5628,8 +5635,15 @@ void OSD::OpWQ::_enqueue_front(pair item) pg_for_processing[&*(item.first)].pop_back(); } } - pqueue.enqueue_front(item.second->request->get_source_inst(), - 1, 1, item); + unsigned priority = item.second->request->get_priority(); + unsigned cost = item.second->request->get_data().length(); + if (priority >= CEPH_MSG_PRIO_HIGH) + pqueue.enqueue_immediate_front( + item.second->request->get_source_inst(), + priority, item); + else + pqueue.enqueue_front(item.second->request->get_source_inst(), + priority, cost, item); osd->logger->set(l_osd_opq, pqueue.length()); } -- 2.39.5