Skip to content

Commit 2c1d0c7

Browse files
authored
Merge pull request ceph#53477 from jianwei1216/fix_msgr_worker_cpu_high
src/msg: fix high CPU consumption of msgr worker thread Reviewed-by: Radoslaw Zarzynski <[email protected]> Reviewed-by: Pere Diaz Bou <[email protected]> Reviewed-by: Mark Nelson <[email protected]>
2 parents 50e984c + 94d1759 commit 2c1d0c7

File tree

4 files changed

+27
-6
lines changed

4 files changed

+27
-6
lines changed

src/common/options/global.yaml.in

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,6 +1299,23 @@ options:
12991299
desc: Inject a network congestions that stuck with N times operations
13001300
default: 0
13011301
with_legacy: true
1302+
- name: ms_time_events_min_wait_interval
1303+
type: uint
1304+
level: dev
1305+
desc: In microseconds, msgr-worker's time_events min wait time for epoll_wait timeout
1306+
default: 1000
1307+
min: 0
1308+
max: 60000000
1309+
with_legacy: true
1310+
- name: ms_client_throttle_retry_time_interval
1311+
type: uint
1312+
level: dev
1313+
desc: In microseconds, user client, the time interval between the next retry
1314+
when the throttle get_or_fail.
1315+
default: 5000
1316+
min: 1000
1317+
max: 60000000
1318+
with_legacy: true
13021319
- name: ms_blackhole_osd
13031320
type: bool
13041321
level: dev

src/msg/async/Event.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,8 @@ int EventCenter::process_events(unsigned timeout_microseconds, ceph::timespan *
404404

405405
if (end_time > now) {
406406
timeout_microseconds = std::chrono::duration_cast<std::chrono::microseconds>(end_time - now).count();
407+
timeout_microseconds = std::max<unsigned>(timeout_microseconds,
408+
cct->_conf->ms_time_events_min_wait_interval);
407409
} else {
408410
timeout_microseconds = 0;
409411
}

src/msg/async/ProtocolV1.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ CtPtr ProtocolV1::throttle_message() {
682682
// short time, so we can wait a ms.
683683
if (connection->register_time_events.empty()) {
684684
connection->register_time_events.insert(
685-
connection->center->create_time_event(1000,
685+
connection->center->create_time_event(cct->_conf->ms_client_throttle_retry_time_interval,
686686
connection->wakeup_handler));
687687
}
688688
return nullptr;
@@ -715,7 +715,8 @@ CtPtr ProtocolV1::throttle_bytes() {
715715
if (connection->register_time_events.empty()) {
716716
connection->register_time_events.insert(
717717
connection->center->create_time_event(
718-
1000, connection->wakeup_handler));
718+
cct->_conf->ms_client_throttle_retry_time_interval,
719+
connection->wakeup_handler));
719720
}
720721
return nullptr;
721722
}
@@ -742,7 +743,7 @@ CtPtr ProtocolV1::throttle_dispatch_queue() {
742743
// short time, so we can wait a ms.
743744
if (connection->register_time_events.empty()) {
744745
connection->register_time_events.insert(
745-
connection->center->create_time_event(1000,
746+
connection->center->create_time_event(cct->_conf->ms_client_throttle_retry_time_interval,
746747
connection->wakeup_handler));
747748
}
748749
return nullptr;

src/msg/async/ProtocolV2.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1555,7 +1555,7 @@ CtPtr ProtocolV2::throttle_message() {
15551555
// short time, so we can wait a ms.
15561556
if (connection->register_time_events.empty()) {
15571557
connection->register_time_events.insert(
1558-
connection->center->create_time_event(1000,
1558+
connection->center->create_time_event(cct->_conf->ms_client_throttle_retry_time_interval,
15591559
connection->wakeup_handler));
15601560
}
15611561
return nullptr;
@@ -1587,7 +1587,8 @@ CtPtr ProtocolV2::throttle_bytes() {
15871587
if (connection->register_time_events.empty()) {
15881588
connection->register_time_events.insert(
15891589
connection->center->create_time_event(
1590-
1000, connection->wakeup_handler));
1590+
cct->_conf->ms_client_throttle_retry_time_interval,
1591+
connection->wakeup_handler));
15911592
}
15921593
return nullptr;
15931594
}
@@ -1615,7 +1616,7 @@ CtPtr ProtocolV2::throttle_dispatch_queue() {
16151616
// short time, so we can wait a ms.
16161617
if (connection->register_time_events.empty()) {
16171618
connection->register_time_events.insert(
1618-
connection->center->create_time_event(1000,
1619+
connection->center->create_time_event(cct->_conf->ms_client_throttle_retry_time_interval,
16191620
connection->wakeup_handler));
16201621
}
16211622
return nullptr;

0 commit comments

Comments
 (0)