Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1610612pxj; Fri, 21 May 2021 19:59:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwJJUKDSEYiqIIBc1B6bbhPra41jrnMQDLJ4yvL8rAyjxyUFtZNeqa4fZcQZToEQ31ooRRW X-Received: by 2002:aa7:dc49:: with SMTP id g9mr14002924edu.160.1621652340389; Fri, 21 May 2021 19:59:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621652340; cv=none; d=google.com; s=arc-20160816; b=BMmEb9CLYcFsBie2TuY295wfVpMLphBotHbmZ0qLBIHNSWLdiniuh+ArWQMfTwPS2o nZdON2tOqF9C6oI8c+fiX1QI+HSJtdYcRGdw+YM7GadEeRKo+mu4o8VOgB7Mh1dl2GY1 0S2KXZ0lMIp2zEpwvCVICgpmA5dy7BKS4tBDrTQ43Cua0nnGSNXDVsFubJso11S2M2LR D17h1o8xFhzabCN70JPf19/mOYDniMZ2CnZKaina/A6KmVJxs92RKkGMS1KC+/bGjDiH 2k1ZvR3NGLB+IaNqkPZgY5T1HSarEIpSevYeCWvkd5sUwHkxCHniBEWyAQGQjDSzWORH DFIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=hntywSLJbmMc0eS0eUn+J3DcmqniTqDW0KyMVDsmkPc=; b=0Y+tHmyD4DXuxeKmNfHb5+znjwi+zCmr0eiFUFqZgnZUWoKwbUgerQwm0Vp0CM6/ro 956XwVqoHbPm74y/RN4AYaOtx/STe1ta2cAH8Xt0i0rKf3snl3EsjC7yyRTgsLtGjMl+ 96ocuV1QWdbSBQQZyB4WQ39jcWxoxYRtSifN1fA4rphMPE2yjtAwxFaQX98dfgqEGPlh 1Xy0C4QrnyklDEwK4dwbKeOAb3afKiq7C4SxhiPki377Wki5TRNFt2F7pKbXc8c4EsAk PKR+km1CpA3epaRGSzDKylLAiTAHG1RzFvjmBod0qsc0/95petlj1o7PNVIXAV4+H4cB HU1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@email.cn header.s=dkim header.b="J/VEqKbU"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id fx13si6900424ejb.602.2021.05.21.19.58.36; Fri, 21 May 2021 19:59:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@email.cn header.s=dkim header.b="J/VEqKbU"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231215AbhEVC6u (ORCPT + 99 others); Fri, 21 May 2021 22:58:50 -0400 Received: from m34-101.88.com ([104.250.34.101]:14958 "EHLO 88.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S230527AbhEVC6t (ORCPT ); Fri, 21 May 2021 22:58:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=email.cn; s=dkim; h=From:To:Date; bh=hntywSLJbmMc0eS0eUn+J3DcmqniTqDW0KyMV DsmkPc=; b=J/VEqKbUAftQWg4JLlBrE0SnUXW1utKlra67AdXopdkyfVJ64jl3g 1131rSf/Bhj+sQOZXbVGSqO3+7NgcWVIBtfmkD4mPWEgAvndT3qhsZMXpVWV3Tyh lf8H0dId0LqM0uzOn4OVRVdT5BIrqsrn4ydDUv9rqvR4NKyHw1Owaw= Received: from localhost.localdomain (unknown [113.251.14.223]) by v_coremail2-frontend-2 (Coremail) with SMTP id GiKnCgCH1ljYcqhg2f9AAA--.18786S3; Sat, 22 May 2021 10:56:32 +0800 (CST) From: Hu Haowen To: alexs@kernel.org, corbet@lwn.net, bobwxc@email.cn, maskray@google.com, bernard@vivo.com Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Hu Haowen Subject: [PATCH v2 2/2] docs/zh_CN: create new translations for zh_CN/dev-tools/testing-overview Date: Sat, 22 May 2021 10:55:45 +0800 Message-Id: <20210522025545.57275-2-src.res@email.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210522025545.57275-1-src.res@email.cn> References: <20210522025545.57275-1-src.res@email.cn> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-CM-TRANSID: GiKnCgCH1ljYcqhg2f9AAA--.18786S3 X-Coremail-Antispam: 1UD129KBjvJXoW3Gr17KFykGF18tF1rJr4DXFb_yoWxuw13pF Wvgr97K3WUZry7A340k3WUXF18KFn7ur43tF18Ja4Sqr18AFsYyFsFgFyqq343WrW8ZF98 AF4rKFyj93s2yFUanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUg01xkIjI8I6I8E6xAIw20EY4v20xvaj40_Jr0_Jr4l8cAvFVAK 0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW8JVW5JwA2z4 x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwA2z4x0Y4vEx4A2jsIE14v26r4UJVWxJr1l 84ACjcxK6I8E87Iv6xkF7I0E14v26r4j6r4UJwAS0I0E0xvYzxvE52x082IY62kv0487Mc 02F40EFcxC0VAKzVAqx4xG6I80ewAv7VCjz48v1sIEY20_Cr1UJr1lOx8S6xCaFVCjc4AY 6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCF04k20xvY0x 0EwIxGrwCF04k20xvE74AGY7Cv6cx26F4UJr1UMxC20s026xCaFVCjc4AY6r1j6r4UMI8I 3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxV WUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8I cVCY1x0267AKxVW8JVWxJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aV AFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZE Xa7VU0mhF7UUUUU== X-Originating-IP: [113.251.14.223] X-CM-SenderInfo: hvufh21hv6vzxdlohubq/ Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Create new translations for dev-tools/testing-overview.rst and link it to dev-tools/index.rst with TODOList modifications. Signed-off-by: Hu Haowen --- .../translations/zh_CN/dev-tools/index.rst | 2 + .../zh_CN/dev-tools/testing-overview.rst | 99 +++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 Documentation/translations/zh_CN/dev-tools/testing-overview.rst diff --git a/Documentation/translations/zh_CN/dev-tools/index.rst b/Documentation/translations/zh_CN/dev-tools/index.rst index 7ba02fc392a6..b6b6d3b09acc 100644 --- a/Documentation/translations/zh_CN/dev-tools/index.rst +++ b/Documentation/translations/zh_CN/dev-tools/index.rst @@ -22,6 +22,7 @@ Documentation/dev-tools/testing-overview.rst :maxdepth: 2 gcov + testing-overview Todolist: @@ -32,6 +33,7 @@ Todolist: - ubsan - kmemleak - kcsan + - kfence - gdb-kernel-debugging - kgdb - kselftest diff --git a/Documentation/translations/zh_CN/dev-tools/testing-overview.rst b/Documentation/translations/zh_CN/dev-tools/testing-overview.rst new file mode 100644 index 000000000000..6e2046ac53ff --- /dev/null +++ b/Documentation/translations/zh_CN/dev-tools/testing-overview.rst @@ -0,0 +1,99 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: ../disclaimer-zh_CN.rst + +:Original: Documentation/dev-tools/testing-overview.rst +:Translator: 胡皓文 Hu Haowen + +============ +内核测试指南 +============ + +有许多不同的工具可以用于测试Linux内核,因此知道什么时候使用它们可能 +很困难。该文档提供了它们之间区别的一个粗略概览,并阐释了它们怎样糅 +合在一起的。 + +编写和运行测试 +============== + +大多数内核测试都是用kselftest或KUnit框架之一编写的。它们都让运行测试 +更加简化,并为编写新测试提供帮助。 + +如果你想验证内核的行为——尤其是内核的特定部分——那你就要使用kUnit或 +kselftest。 + +KUnit和kselftest的区别 +---------------------- + +KUnit(Documentation/zh_CN/dev-tools/kunit/index.rst)是用于“白箱”测 +试的一个完整的内核内部系统:因为测试代码是内核的一部分,所以它能够访 +问用户空间不能访问到的内部结构和功能。 + +因此,KUnit测试最好不要写得太小,也不要有内核中本身包含的部分,以便 +能够独立地测试。‘单元’测试的概念亦是如此。 + +比如,一个KUnit测试可能测试一个单独的内核功能(甚至通过一个函数测试 +一个单一的代码路径),而不是整个地测试一个特性。 + +这也使得KUnit测试构建和运行非常地快,从而能够作为开发流程的一部分被 +频繁地运行。 + +有关更详细的介绍,请参阅KUnit测试代码风格指南 +Documentation/translations/zh_CN/dev-tools/kunit/style.rst + +kselftest(Documentation/translations/zh_CN/dev-tools/kselftest.rst), +另一方面,大量地在用户空间被实现,并且测试通常是用户空间的脚本或程序。 + +这使得编写复杂的测试,或者需要操作更多全局系统状态的测试更加容易(诸 +如生成进程之类)。然而,从kselftest直接调用内核函数是不行的。这也就 +意味着只有通过某种方式(如系统调用、驱动设备、文件系统等)导出到了用 +户空间的内核功能才能使用kselftest来测试。为此,有些测试包含了一个伴 +生的内核模块用于导出更多的信息和功能。不过,对于基本上或者完全在内核 +中运行的测试,KUnit可能是更佳工具。 + +比如,一个新的系统调用应该伴随有新的kselftest测试。 + +代码覆盖率工具 +============== + +Linux内核支持不同代码之间的覆盖率测量工具。这能被用来验证一个测试是 +执行的特定的函数或者特定行的代码。这有助于决定内核被测试了多少,或 +用来查找合适的测试中没有覆盖到的极端情况。 + +:doc:`gcov` 是GCC的覆盖率测试工具,能用于获取内核的全局或每个模块的 +覆盖率。与KCOV不同的是,这个工具不记录每个任务的覆盖率。覆盖率数据可 +以通过debugfs读取,并通过常规的gcov工具进行解释。 + +:doc:`kcov` 是能够构建在内核之中,用于在每个任务的层面捕捉覆盖率的一 +个功能。因此,对于代码执行位置信息的其它情况,它是非常有用的,比如在 +一个单一系统调用里使用它就很有用。 + +动态分析工具 +============ + +内核也支持许多动态分析工具,用以检测正在运行的内核中出现的多种类型的 +问题。这些工具尤其用于不同类型的漏洞,比如非法内存访问,诸如数据竞争 +的并发问题,或者整型溢出的其它未定义的行为。 + +一些工具如下: + +* kmemleak检测可能的内存泄漏。参阅 + Documentation/dev-tools/kmemleak.rst +* KASAN检测非法内存访问,如数组越界和释放内存后再使用的错误。参阅 + Documentation/dev-tools/kasan.rst +* UBSAN检测C标准中未定义的行为,如整型溢出。参阅 + Documentation/dev-tools/ubsan.rst +* KCSAN检测数据竞争。参阅 Documentation/dev-tools/kcsan.rst +* KFENCE是一个低开销的内存问题检测器,比KASAN更快而能被用于批量构建。 + 参阅 Documentation/dev-tools/kfence.rst +* lockdep是一个锁定正确性检测器。参阅 + Documentation/locking/lockdep-design.rst +* 除此以外,在内核中还有一些其它的调试工具,大多数能在 + lib/Kconfig.debug 中找到。 + +这些工具倾向于对内核进行整体测试,并且不像kselftest和KUnit一样“传递”。 +它们能与kselftest和KUnit结合起来,通过激活这些工具在一个内核上运行测 +试:之后你就能确保这些错误在测试过程中都不会发生了。 + +一些工具与KUnit和kselftest集成,并且当问题被检测时测试会自动失败。 + -- 2.25.1