From 565d6270ecb9ba44397ea9775806c7ee697b05f7 Mon Sep 17 00:00:00 2001 From: Liu Song Date: Wed, 13 Sep 2023 17:55:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=80=9A=E5=A4=A9?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E9=AB=98=E6=80=A7=E8=83=BDRedis=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E5=AE=9E=E9=AA=8C=E8=AF=BE=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Liu Song --- .../index.yaml" | 10 +++++++++ .../finish.md" | 3 +++ .../index.yaml" | 18 ++++++++++++++++ .../start.md" | 4 ++++ .../step2.md" | 4 ++++ .../step3.md" | 10 +++++++++ .../step4.md" | 9 ++++++++ .../step5.md" | 21 +++++++++++++++++++ 8 files changed, 79 insertions(+) create mode 100644 "anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/index.yaml" create mode 100644 "anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/finish.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/index.yaml" create mode 100644 "anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/start.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step2.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step3.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step4.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step5.md" diff --git "a/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/index.yaml" "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/index.yaml" new file mode 100644 index 0000000..f3cb90c --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/index.yaml" @@ -0,0 +1,10 @@ +name: 基于 Alinux 3 的redis优化镜像在倚天实例下的试用 +desc: 通过课程学习,了解基于 Alinux 3 的 redis 优化镜像如何在倚天实例下使用,掌握基本的redis命令,能得到redis的性能测试结果 +type: course +total_time: 15min +level: beginner +chapters: + - name: 倚天实例部署Redis优化镜像 + desc: 倚天实例部署Redis优化镜像并进行benchmark跑分测试验证 + content: + live_time: 15min \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/finish.md" "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/finish.md" new file mode 100644 index 0000000..aa64e46 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/finish.md" @@ -0,0 +1,3 @@ +经过以上学习,了解了redis镜像拉取方法,其中通过运行redis_keentune.sh对redis进行了优化,并且通过测试得到了测试数据。 + +感兴趣的同学可以再试试,如果不执行redis_keentune.sh优化,再测试一下redis的数据,看看是否会有什么不同呢? \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/index.yaml" "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/index.yaml" new file mode 100644 index 0000000..7199c2e --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/index.yaml" @@ -0,0 +1,18 @@ +name: 倚天实例部署Redis优化镜像 +desc: 倚天实例部署Redis优化镜像并进行benchmark跑分测试验证 +image: Anolis OS 8.6 ANCK 64位 ARM版 +live_time: 15min +machine: aarch64-2c4g +max_clients: 1 +details: + steps: + start: start.md + - name: 安装docker应用 + content: step2.md + - name: 从ACR制品中心拉取优化后的redis镜像 + content: step3.md + - name: 执行优化操作并进入容器 + content: step4.md + - name: 对redis进行测试 + content: step5.md + finish: finish.md diff --git "a/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/start.md" "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/start.md" new file mode 100644 index 0000000..47194c0 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/start.md" @@ -0,0 +1,4 @@ +本课程将介绍如何使用阿里云ACR制品中心的优化镜像来部署优化过的redis应用 +系统环境:龙蜥操作系统(Anolis OS) + +Redis是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等,可以对这些数据结构进行各种操作。Redis将数据存储在内存中,因此可以提供非常高的读写性能。 \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step2.md" "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step2.md" new file mode 100644 index 0000000..8c3bbf4 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step2.md" @@ -0,0 +1,4 @@ +在环境上执行如下命令,安装 docker 应用 +```language +yum install -y docker +``` \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step3.md" "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step3.md" new file mode 100644 index 0000000..c3b2a47 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step3.md" @@ -0,0 +1,10 @@ +在环境上执行如下命令 +```language +docker run -ti -d --privileged="true" --net=host alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/redis_optimized /usr/sbin/init +``` +完毕后,执行如下命令 +```language +docker ps +``` +能看到如下容器镜像信息 +![dockerps.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694596100413-dockerps.jpg) diff --git "a/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step4.md" "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step4.md" new file mode 100644 index 0000000..7d0f397 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step4.md" @@ -0,0 +1,9 @@ +根据docker ps中看到的CONTAINER ID,本教程例子中的CONTAINER ID为7c37178d14f5,执行如下命令来对redis进行优化 +```language +docker exec -it 7c37178d14f5 /bin/bash redis_keentune.sh +``` +然后执行如下命令进入容器 +```language +docker exec -it 7c37178d14f5 bash +``` +需要注意的是,在实际操作过程中,要根据docker ps看到的具体CONTAINER ID来操作 \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step5.md" "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step5.md" new file mode 100644 index 0000000..593b9bc --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\345\256\236\344\276\213\351\253\230\346\200\247\350\203\275Redis\351\225\234\345\203\217\345\256\236\351\252\214/\345\200\232\345\244\251\345\256\236\344\276\213\351\203\250\347\275\262Redis\344\274\230\345\214\226\351\225\234\345\203\217/step5.md" @@ -0,0 +1,21 @@ +进入容器后,执行如下命令查看redis版本信息 +```language +redis-server -v +``` +因为镜像确保了分发内容一致性,所以应当显示的信息如下 +```language +Redis server v=6.0.5 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=536c9b203f0745b9 +``` +执行如下命令来启动redis server +```language +redis-server --protected-mode no --save --daemonize yes +``` +有如下显示,表示服务已经启动 +![server.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694596712895-server.jpg) + +接下来,执行如下命令来对redis进行压测并得到测试数据 +```language +redis-benchmark -h 127.0.0.1 -q -t set,get -P 4 --threads 8 -n 5000000 -c 10 +``` +如下图所示,即为对优化后的redis进行的测试结果 +![benchmark.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694596845626-benchmark.jpg) \ No newline at end of file -- Gitee From a396564cb6ef7b9737519e1c46619ac7f62d9bfc Mon Sep 17 00:00:00 2001 From: Liu Song Date: Fri, 15 Sep 2023 10:25:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=80=9A=E5=A4=A9?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=80=A7=E8=83=BD=E5=88=86=E6=9E=90perf?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E4=BB=8B=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Liu Song --- .../index.yaml" | 10 +++++ .../finish.md" | 20 ++++++++++ .../index.yaml" | 22 +++++++++++ .../start.md" | 4 ++ .../step2.md" | 15 ++++++++ .../step3.md" | 3 ++ .../step4.md" | 8 ++++ .../step5.md" | 12 ++++++ .../step6.md" | 38 +++++++++++++++++++ .../step7.md" | 7 ++++ 10 files changed, 139 insertions(+) create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/index.yaml" create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/finish.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/index.yaml" create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/start.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step2.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step3.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step4.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step5.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step6.md" create mode 100644 "anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step7.md" diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/index.yaml" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/index.yaml" new file mode 100644 index 0000000..0cd9f2f --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/index.yaml" @@ -0,0 +1,10 @@ +name: 倚天环境性能分析perf工具介绍 +desc: 学习了解倚天实例下进行性能分析的基本方法,使用perf工具记录性能数据并进行分析 +type: course +total_time: 30min +level: intermediate +chapters: + - name: 倚天环境性能分析perf工具介绍 + desc: 学习了解倚天实例下进行性能分析的基本方法,使用perf工具记录性能数据并进行分析 + content: + live_time: 30min \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/finish.md" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/finish.md" new file mode 100644 index 0000000..63000f8 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/finish.md" @@ -0,0 +1,20 @@ +大家一般得到的是一个空载环境,而我们进行性能分析都是带着业务目标去的,所以一定是一个带负载的环境。 + +下面介绍一下添加负载的方法,方便大家后续对 perf 工具的试用体验。 + +首先,执行下面命令安装stress工具 +```language +yum install -y stress +``` +然后可以根据stress工具给环境添加负载,命令如下,负载持续时间60秒 +```language +stress -c 2 -i 2 -m 2 -d 2 -t 60& +``` +在负载时间过程中,可以试用前面介绍的命令来体验perf工具了,例如执行如下命令 +```language +perf record -ag -- sleep 10 +``` +然后再执行perf report来对性能数据生成报告,如下图所示。 +![stress.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694743619871-stress.jpg) + +perf 工具对于性能分析是非常强大的,也欢迎大家多多发掘工具的适用场景。 \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/index.yaml" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/index.yaml" new file mode 100644 index 0000000..a15895b --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/index.yaml" @@ -0,0 +1,22 @@ +name: 倚天环境性能分析perf工具介绍 +desc: 学习了解倚天实例下进行性能分析的基本方法,使用perf工具记录性能数据并进行分析 +image: Anolis OS 8.6 ANCK 64位 ARM版 +live_time: 30min +machine: aarch64-2c4g +max_clients: 1 +details: + steps: + start: start.md + - name: 初步接触perf工具 + content: step2.md + - name: perf list + content: step3.md + - name: perf top + content: step4.md + - name: perf stat + content: step5.md + - name: perf record 和 perf report + content: step6.md + - name: perf script + content: step7.md + finish: finish.md diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/start.md" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/start.md" new file mode 100644 index 0000000..96d2d89 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/start.md" @@ -0,0 +1,4 @@ +执行如下命令,在环境中部署perf工具 +```language + yum install -y perf +``` \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step2.md" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step2.md" new file mode 100644 index 0000000..980ca91 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step2.md" @@ -0,0 +1,15 @@ +perf是Linux性能分析工具,用于收集和分析系统性能数据,可以监测CPU、内存、I/O等系统资源的使用情况,并生成相应的报告。 +执行如下命令,查看perf的基本命令操作 +```language +perf help +``` +![help.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694690634317-help.jpg) +如上图所示,是perf支持的命令,常用的命令如下,接下来逐一介绍 +```language +perf record +perf list +perf script +perf stat +perf top +perf report +``` \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step3.md" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step3.md" new file mode 100644 index 0000000..74400af --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step3.md" @@ -0,0 +1,3 @@ +perf list 命令用于列出系统上可用的性能事件和事件类型。它提供了一份当前系统支持的可用事件的清单,包括CPU、内存、硬件事件等。 +![list.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694691138254-list.jpg) +能支持的事件是非常多的,主要分为硬件事件、软件事件、预制的跟踪点等等 diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step4.md" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step4.md" new file mode 100644 index 0000000..8f143e2 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step4.md" @@ -0,0 +1,8 @@ +perf top命令是perf工具的一个子命令,用于实时监测系统性能,并显示当前消耗CPU资源最多的函数和指令。 + +执行perf top命令后,会打开一个实时的交互界面,显示当前系统中占用CPU资源最多的函数和指令。它会根据采样数据进行排序,以展示最高消耗CPU资源的函数和指令,如下图所示 +![top.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694691384828-top.jpg) +这是一个可以动态交互的界面,移动光标对应函数高亮,回车可以进入annotate界面,能查看函数反汇编信息,如下图所示,显示当前进程间切换函数的的反汇编热点信息 +![annotated.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694691669422-annotated.jpg) + +通过perf top命令,可以实时查看当前系统热点,是比较好用的命令 \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step5.md" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step5.md" new file mode 100644 index 0000000..218c1de --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step5.md" @@ -0,0 +1,12 @@ +perf stat命令是perf工具的一个子命令,可以提供各种系统性能指标的统计数据,如CPU周期数、指令数、缓存命中率、上下文切换数等,简单、方便、好用。 +执行perf stat命令后需要主动停止,停止后则显示从开始到停止这段时间内的系统性能指标统计数据,如下图所示,包括上下文切换次数、缺页异常次数,每秒执行指令数等关键数据 +![perf_stat.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694692119011-perf_stat.jpg) + +perf stat命令还能指定感兴趣的事件,执行如下指令 +```language +perf stat -e dTLB-load-misses,iTLB-load-misses +``` +则会记录tlb miss相关信息,如下图所示 +![tlbmiss.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694692259137-tlbmiss.jpg) + +所以,在进行性能分析是,使用perf stat命令监控获取统计数据是比较有效的方式 \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step6.md" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step6.md" new file mode 100644 index 0000000..14ae87d --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step6.md" @@ -0,0 +1,38 @@ +perf record命令通常需要配合perf report命令使用 + +perf record用于记录系统的性能事件和数据,以供后续的性能分析和调试。 + +perf report会解析perf record记录的数据文件(perf.data),并生成一个详细的性能报告。 + +下面我们来分别试用一下 + +首先执行如下命令 ,记录10秒钟的系统数据 +```language +perf record -a -- sleep 10 +``` +10秒后,会有如下显示,表明记录的采样数据个数 +```language +[ perf record: Captured and wrote 2.545 MB perf.data (41517 samples) ] +``` +然后执行如下命令,来获得采集数据的分析报告 +```language +perf report +``` +如下图所示 +![report.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694693325401-report.jpg) + +从数据中可知,当前系统中开销最大的是fio进程,最大的热点函数是rwsem_spin_on_owner + +如果使用如下命令记录,可以得到函数的call graph +```language +perf record -a -g -- sleep 10 +``` +执行perf report后,如下图所示,多出一列+ +![graph.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694693703322-graph.jpg) +移动光标到对应函数后按+号,可以展开看到函数调用栈,便于分析真正的热点 +![expand.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694693773035-expand.jpg) + +通过这节学习,大家掌握了perf record和report命令的基本操作,其实这2个命令,尤其是perf record命令还支持复杂的参数,可以通过如下命令来查看有哪些参数,欢迎多多试用各参数,可能会发现很多奇妙的能力 +```language +perf record --help +``` \ No newline at end of file diff --git "a/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step7.md" "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step7.md" new file mode 100644 index 0000000..d79fbc3 --- /dev/null +++ "b/anolis-courses/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/\345\200\232\345\244\251\347\216\257\345\242\203\346\200\247\350\203\275\345\210\206\346\236\220perf\345\267\245\345\205\267\344\273\213\347\273\215/step7.md" @@ -0,0 +1,7 @@ +perf script 用于解析和显示通过"perf record"命令收集到的性能数据,以脚本的方式进行输出,可以查看事件的详细信息。 +在刚才环境中,执行如下命令 +```language +perf script -G +``` +如下图所示,可以查看系统中具体发生了什么,每个函数的开销是多少,便于精细化分析和统计 +![script1.jpg](https://anolis-pub-share.oss-cn-hangzhou.aliyuncs.com/anolis-lab/assets/1694694387676-script1.jpg) -- Gitee