apache / apache/brpc

bthread signal & wait 问题咨询

Open
#2,849 25 comments 1 reaction 0 assignees View on GitHub
Dominant language
C++
Stars
17.6k
Forks
4.1k
Avg merge
2d 12h
Merged PRs (30d)
69

Description

![image](https://github.com/user-attachments/assets/23f24dd8-f4cb-41db-8461-6e8861c7a72d)

在使用过程中,观察server侧的火焰图,此时brpc_worker thread的cpu基本打满。发现futex_wake、futex_wait占用的时间占比比较高,竞争锁成为了瓶颈。怀疑可能是由于调度不均衡,某些worker中的task较多,而一些worker的task较少,当这些task消费完之后每次都会调用wait,然后又快速被signal唤醒。同时也存在parking_lot中没有wait的线程但仍然在signal的场景。

这方面是否存在一些优化点,比如:
1. signal时判断是否存在wait状态的线程;
2. wait之前先尝试steal_task n 次,如果都失败再wait挂起线程;或者wait时设置timeout时间而不是每次都是永久wait,只能被signal主动唤醒。

Contributor guide

Open the contributing guide

Research direction

Start by reading the bthread signal and wait paths and the parking_lot behavior described in the issue. Reproduce the reported futex_wake and futex_wait contention, then determine whether the proposed scheduling or wake-up changes are warranted; done should include an agreed optimization and evidence that contention improves.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
backend, performance
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.