Describe the bug (描述bug) linux arm 64, 对brpc服务端加大压力并发压测,rpc服务端打印"bthread= sched_to itself!"并退出
To Reproduce (复现方法) linux arm 64, 300个客户端线程并发压测一段时间,rpc服务端 sched_to itself
Expected behavior (期望行为) 服务端正常工作
Versions (各种版本) OS: Linux 10-21-10-172 4.19.0-arm64-server #1813 SMP Mon Aug 31 15:44:57 CST 2020 aarch64 GNU/Linux Compiler: gcc version 8.3.0 (Uos 8.3.0.3-3+rebuild) brpc: master protobuf:
Additional context/screenshots (更多上下文/截图) 已经禁用gcse优化 -fno-gcse;经过跟踪调试,每次异常时,task_group.cpp 中的void TaskGroup::task_runner(intptr_t skip_remained) 函数内部,在调用完BAIDU_SCOPED_LOCK(m->version_lock)后,g != tls_task_group,理论上这句最终调用的是butil\scoped_lock.h 中的pthread_spin_lock(_pspin); 不清楚在arm 64 环境下,为何有时调用完此行代码会发生协程环境切换?
+1
在国产麒麟 CPU ARM64 平台调试过程中,同样遇到该问题: F1124 03:32:32.836282 1839 task_group.cpp:617] bthread=4294973184 sched_to itself! *** Check failure stack trace: *** @ 0xfffedf2bd060 google::LogMessage::Fail() @ 0xfffedf2bf02c google::LogMessage::SendToLog() @ 0xfffedf2bcbc4 google::LogMessage::Flush() @ 0xfffedf2bf8a4 google::LogMessageFatal::~LogMessageFatal() @ 0x6e1b24 bthread::TaskGroup::sched_to() @ 0x6e2ae4 bthread::TaskGroup::ending_sched() @ 0x6e3ac8 bthread::TaskGroup::task_runner() @ 0x6e63a8 bthread_make_fcontext
编译选项加上 -fno-gcse, -fno-cse-follow-jumps, -fno-move-loop-invariants 这几个试试看
master已修复
Activity
crise1990 commentedon Nov 24, 2021
+1
在国产麒麟 CPU ARM64 平台调试过程中,同样遇到该问题:
F1124 03:32:32.836282 1839 task_group.cpp:617] bthread=4294973184 sched_to itself!
*** Check failure stack trace: ***
@ 0xfffedf2bd060 google::LogMessage::Fail()
@ 0xfffedf2bf02c google::LogMessage::SendToLog()
@ 0xfffedf2bcbc4 google::LogMessage::Flush()
@ 0xfffedf2bf8a4 google::LogMessageFatal::~LogMessageFatal()
@ 0x6e1b24 bthread::TaskGroup::sched_to()
@ 0x6e2ae4 bthread::TaskGroup::ending_sched()
@ 0x6e3ac8 bthread::TaskGroup::task_runner()
@ 0x6e63a8 bthread_make_fcontext
wwbmmm commentedon Nov 24, 2021
编译选项加上 -fno-gcse, -fno-cse-follow-jumps, -fno-move-loop-invariants
这几个试试看
wwbmmm commentedon Oct 14, 2022
master已修复