| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: 收敛 routing UB admission 与恢复开销 | 16 天前 | |
build(tsan): 编译内置 brpc/bthread TSAN 抑制并预热点 brpc 全局初始化 - 新增 tools/tsan:default_suppressions.cpp 通过 __tsan_default_suppressions 钩子向 datasystem_worker / datasystem_coordinator / 所有 ds_cc_test 编译进 brpc 1.15.0 bthread M:N 调度器的初始化时 race 抑制(alwayslink),brpc_ suppressions.txt 作为运维侧 runtime 抑制文件并记录全部理由。抑制只覆盖 第三方 bthread 命名空间,datasystem::* 的真实 race 仍会被 TSAN 报出并按 默认 halt_on_error=1 中止进程。 - BrpcChannelFactory::EnsureGlobalInitialized:在主线程一次性触发 brpc::Channel::Init → GlobalInitializeOrDie (std::call_once 守卫),把 bthread worker pool 的 spawn 收敛到拓扑/RPC 代码之前的单线程安静点;Create() 同 路径幂等调用,覆盖 client SDK / 测试 / dsbench 入口。worker 启动期在 InitRpcAndMemoryRuntime 配置好 brpc 监听地址后立即调用。 - request_context.cpp:GetBthreadApiDeadline / GetBthreadTrace / GetRequestContext 在读 g_requestContextKey 前先调 InitRequestContext(), 借助 std::call_once 的 release/acquire 同步修复后台线程(MetricsFlush / ExpiredObject 等)早于主线程 CommonServer::Init 创建 bthread key 的真实 data race。 - thread_pool.cpp:GetWaitingTasksNum() 加 std::lock_guard<std::mutex> 后再 读 taskQ_.size(),修复无锁读与生产者线程修改 taskQ_ 的真实 data race。 - UBSan 配置:bazel build:ubsan 改用 --per_file_copt=external/.*@-fno- sanitize=undefined + third_party/protos/etcd/.* 同样禁用,编译器版本无关地 规避 GCC 14 对函数指针比较注入非常量 instrumentation 破坏 absl raw_hash_set constexpr 求值的问题,并修复 etcd grpc stub 的 typeinfo for grpc::internal::ClientReactor 链接错误;cmake USE_SANITIZER=UNDEFINED 用 CheckCXXCompilerFlag 检测后条件加 -fno-sanitize=function(兼容不识别 function 子检查的 GCC),其余 UBSan 子检查仍生效。 - 收窄 TSAN 抑制:移除 bthread::TimerThread::* / bvar::detail::* / urma_* 的 runtime 抑制——x86_64 在预热点 + 关 ASLR 后这些路径不再产生 race, aarch64 则整体不可用(见下条),保留只会掩盖第三方库真实问题。 - TSAN 平台支持说明:x86_64 已验证可用(需 setarch -R 关 ASLR、 history_size=1:force_seq_cst=0、shared_memory_size_mb≤256、enable_urma= false),零 race、稳态运行;aarch64 不支持——brpc 全局覆盖 pthread_mutex_lock 致 TSAN 拦截器被绕过、bthread 使用自定义汇编 fiber 栈 切换(bthread_make_fcontext,不走 swapcontext)致 TSAN 持过期栈指针后 SEGV。brpc 社区三个相关 issue (#2864 / #3295 / #1687) 均未修复,理论解法 是在 bthread 集成 __tsan_switch_to_fiber 但社区未做。aarch64 改用 --config=asan,并发安全验证依赖 x86_64 TSAN + 代码审查 + 单元测试。 - 同步 .repo_context(generated/repo_index、quality/build-test-debug、 cmake-build/design、runtime/worker-runtime)与中文构建文档。 | 19 天前 |