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 0000000000000000000000000000000000000000..f3cb90c6f22f9958f56223ee0cd9ac4ab52d2958 --- /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 0000000000000000000000000000000000000000..aa64e467f0422a8ac55c1ea4a7a976487d10a1a9 --- /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 0000000000000000000000000000000000000000..7199c2e748f0f459b21c2e42f62a8d36358a2b47 --- /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 0000000000000000000000000000000000000000..47194c069035d1575968fcf31451dacf64c42f41 --- /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 0000000000000000000000000000000000000000..8c3bbf4bd34a03fe16b37a06f608c242bf75c961 --- /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 0000000000000000000000000000000000000000..c3b2a47cecbb8d267d7614e4e2d6abdf44dda95b --- /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 0000000000000000000000000000000000000000..7d0f39779bb2e7d33681fe9b694df4d9d272f02c --- /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 0000000000000000000000000000000000000000..593b9bc54633a497fbb9a365f82f07e2b2f72fdd --- /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 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 0000000000000000000000000000000000000000..0cd9f2fe7fa6e7e5336acd54629ec8e3b9de68d0 --- /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 0000000000000000000000000000000000000000..63000f892d897e0260a03fdfcf622d5179515169 --- /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 0000000000000000000000000000000000000000..a15895bc3cd73ce9a826e9ae334b86665e721da4 --- /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 0000000000000000000000000000000000000000..96d2d89f87693603d43df2b51c90a5cafd9ec204 --- /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 0000000000000000000000000000000000000000..980ca91d8ba9c65f0e9d1594ef619d294d8e5060 --- /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 0000000000000000000000000000000000000000..74400af97c195f26f492f4452b1beb6872e67e1e --- /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 0000000000000000000000000000000000000000..8f143e22964b48d872917dd0bee30a26b2b91745 --- /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 0000000000000000000000000000000000000000..218c1de87a05b2d27188bc146e1a70f65e3eb8a7 --- /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 0000000000000000000000000000000000000000..14ae87dfa3d19653c6b52806a2e05e18e6d83428 --- /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 0000000000000000000000000000000000000000..d79fbc3056d438a5185bdd35c7074f36b9b41cb2 --- /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)