Skip to content

Commit

Permalink
Merge pull request #134 from hust-open-atom-club/fix_typos
Browse files Browse the repository at this point in the history
fix typos in kcsan
  • Loading branch information
mudongliang committed Jul 25, 2024
2 parents 42ea5ca + 882be4e commit 93e3194
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions sources/kernel/dev-tools/kcsan.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
status: published
title: "内核并发消毒剂 (KCSAN)"
title: "内核并发检测器(KCSAN)"
author: Linux Kernel Community
collector: tttturtle-russ
collected_date: 20240718
Expand All @@ -13,9 +13,9 @@ published_date: 20240725
link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/dev-tools/kcsan.rst
---

# 内核并发消毒剂 (KCSAN)
# 内核并发检测器 (KCSAN)

内核并发消毒剂(KCSAN)是一个动态竞争检测器,依赖编译时插桩,并且使用基于观察点的采样方法来检测竞争。KCSAN 的主要目的是检测 [数据竞争](#数据竞争)
内核并发检测器(KCSAN)是一个动态竞争检测器,依赖编译时插桩,并且使用基于观察点的采样方法来检测竞争。KCSAN 的主要目的是检测 [数据竞争](#数据竞争)

## 使用

Expand Down Expand Up @@ -170,14 +170,14 @@ KCSAN 需要观测两个并发访问。特别重要的是,我们想要(a)
在 KCSAN 中,观察点是通过一种高效的编码实现的,该编码将访问类型、大小和地址存储在一个长整型变量中;使用“软观察点”的好处是具有可移植性和更大的灵活性。然后,KCSAN 依赖于编译器对普通访问的插桩。对于每个插桩的普通访问:

1. 检测是否存在一个复合的观测点,如果存在,并且至少有一个操作是写操作,则我们发现了一个竞争访问。
2. 如果不存在匹配的观察点,则定期的设置一个观测点并随机延迟一小段时间
2. 如果不存在匹配的观察点,则定期地设置一个观测点并随机延迟一小段时间
3. 在延迟前检查数据值,并在延迟后重新检查数据值;如果值不匹配,我们推测存在一个未知来源的竞争状况。

为了检测普通访问和标记访问之间的数据竞争,KCSAN 也对标记访问进行标记,但仅用于检查是否存在观察点;即 KCSAN 不会在标记访问上设置观察点。通过不在标记操作上设置观察点,如果对一个变量的所有并发访问都被正确标记,KCSAN 将永远不会触发观察点,因此也不会报告这些访问。

### 弱内存建模

KSCAN 检测由于缺失内存屏障的数据检测的方法是居于对访问重新排序的建模(使用参数 `CONFIG_KCSAN_WEAK_MEMORY=y`)。每个设置了观察点的普通内存访问也会被选择在其函数范围内进行模拟重新排序(最多一个正在进行的访问)。
KSCAN 检测由于缺失内存屏障的数据检测的方法是基于对访问重新排序的建模(使用参数 `CONFIG_KCSAN_WEAK_MEMORY=y`)。每个设置了观察点的普通内存访问也会被选择在其函数范围内进行模拟重新排序(最多一个正在进行的访问)。

一旦某个访问被选择用于重新排序,它将在函数范围内与每个其他访问进行检查。如果遇到适当的内存屏障,该访问将不再被考虑进行模拟重新排序。

Expand Down

0 comments on commit 93e3194

Please sign in to comment.