summaryrefslogtreecommitdiff
path: root/0023-add-benchmark-result-of-perf-test-in-cri.patch
diff options
context:
space:
mode:
Diffstat (limited to '0023-add-benchmark-result-of-perf-test-in-cri.patch')
-rw-r--r--0023-add-benchmark-result-of-perf-test-in-cri.patch256
1 files changed, 256 insertions, 0 deletions
diff --git a/0023-add-benchmark-result-of-perf-test-in-cri.patch b/0023-add-benchmark-result-of-perf-test-in-cri.patch
new file mode 100644
index 0000000..92efaeb
--- /dev/null
+++ b/0023-add-benchmark-result-of-perf-test-in-cri.patch
@@ -0,0 +1,256 @@
+From 16a0cf7e9c2c059cb5537f48a022e63df457f186 Mon Sep 17 00:00:00 2001
+From: jikai <jikai11@huawei.com>
+Date: Sat, 2 Mar 2024 11:49:08 +0800
+Subject: [PATCH 23/43] add benchmark, result of perf test in cri
+
+Signed-off-by: jikai <jikai11@huawei.com>
+---
+ docs/performance/cri_performance_test.md | 60 ++++++++
+ tools/benchmark/cri_perf_test.sh | 168 +++++++++++++++++++++++
+ 2 files changed, 228 insertions(+)
+ create mode 100644 docs/performance/cri_performance_test.md
+ create mode 100755 tools/benchmark/cri_perf_test.sh
+
+diff --git a/docs/performance/cri_performance_test.md b/docs/performance/cri_performance_test.md
+new file mode 100644
+index 00000000..594f0da7
+--- /dev/null
++++ b/docs/performance/cri_performance_test.md
+@@ -0,0 +1,60 @@
++## Machine configuration
++
++ARM machine:
++
++| Configuration | Information |
++| ------------- | -------------------------------------- |
++| OS | openEuler 22.03-LTS |
++| Kernel | linux 5.10.0-136.12.0.86.oe2203.aarch64 |
++| CPU | 96 cores |
++| Memory | 128 GB |
++
++## Version of Softwares
++
++| Name | Version |
++| ------ | ------------------------------------------------------------ |
++| iSulad | Version: 2.1.5 , Git commit: 5ebca976dd591a5676527be1bde950e5ce93eac0 |
++| containerd | Version: v2.0.0-beta.2, Git commit: 290194fe77d48521d3ea78ec02e2e406c4bf91b6 |
++| crio | version: 1.30.0, Git commit: b43e0d63a8af3277dbfc555f62d07bb2305a72c7 |
++
++## Test tool
++
++tools/benchmark/cri_perf_test.sh
++
++## Compare with other container engines
++
++### run operator once
++
++#### ARM
++
++run 1 pod and 1 container
++
++| measure | iSulad | containerd | crio | vs containerd | vs crio |
++| ----------------- | ------ | ------ | ------ | ------ | ------ |
++| time(ms) | 580 | 812 | 567 | -28.5% | 2.3% |
++| engine mem(kb) | 38704 | 66806 | 58760 | -42.0% | -34.2% |
++| shim mem(kb) | 1700 | 13876 | 4648 | -87.7% | -63.4% |
++
++run 10 pods and 10 containers
++
++| measure | iSulad | containerd | crio | vs containerd | vs crio |
++| ----------------- | ------ | ------ | ------ | ------ | ------ |
++| time(ms) | 1141 | 4000 | 1749 | -71.5% | -34.8% |
++| engine mem(kb) | 47688 | 82580 | 86128 | -42.2% | -44.6% |
++| shim mem(kb) | 16764 | 154872 | 46836 | -89.2% | -64.2% |
++
++run 50 pods and 50 containers
++
++| measure | iSulad | containerd | crio | vs containerd | vs crio |
++| ----------------- | ------ | ------ | ------ | ------ | ------ |
++| time(ms) | 4544 | 19963 | 8503 | -77.2% | -46.9% |
++| engine mem(kb) | 88700 | 134384 | 115560 | -34.0% | -23.2% |
++| shim mem(kb) | 83892 | 750924 | 233480 | -88.8% | -64.0% |
++
++run 100 pods and 100 containers
++
++| measure | iSulad | containerd | crio | vs containerd | vs crio |
++| ----------------- | ------ | ------ | ------ | ------ | ------ |
++| time(ms) | 10012 | 39629 | 18278 | -74.7% | -45.5% |
++| engine mem(kb) | 148464 | 185700 | 147836 | -20.0% | 0.4% |
++| shim mem(kb) | 168420 | 1506268| 462000 | -88.8% | -63.3% |
+diff --git a/tools/benchmark/cri_perf_test.sh b/tools/benchmark/cri_perf_test.sh
+new file mode 100755
+index 00000000..54ee24f5
+--- /dev/null
++++ b/tools/benchmark/cri_perf_test.sh
+@@ -0,0 +1,168 @@
++#!/bin/bash
++#######################################################################
++##- Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved.
++# - iSulad licensed under the Mulan PSL v2.
++# - You can use this software according to the terms and conditions of the Mulan PSL v2.
++# - You may obtain a copy of Mulan PSL v2 at:
++# - http://license.coscl.org.cn/MulanPSL2
++# - THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
++# - IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
++# - PURPOSE.
++# - See the Mulan PSL v2 for more details.
++##- @Description: perf test
++##- @Author: jikai
++##- @Create: 2024-02-29
++#######################################################################
++
++# cri_perf_test.sh -e $engine -p $parallel
++
++engine=isulad
++runtime="unix:///var/run/isulad.sock"
++shim="isulad-shim"
++parallel=1
++while getopts ":e:p:" opt
++do
++ case $opt in
++ e)
++ engine=${OPTARG}
++ # compare if OPTARG is in ["isulad", "containerd", "crio"]}
++ if [ $engine == "isulad" ]; then
++ runtime="unix:///var/run/isulad.sock"
++ shim="isulad-shim"
++ elif [ $engine == "containerd" ]; then
++ runtime="unix:///var/run/containerd/containerd.sock"
++ shim="containerd-shim"
++ elif [ $engine == "crio" ]; then
++ runtime="unix:///var/run/crio/crio.sock"
++ shim="conmon"
++ else
++ echo "Unknown engine: ${OPTARG}, only support isulad, containerd, crio."
++ exit 1
++ fi
++ ;;
++ p)
++ parallel=${OPTARG}
++ ;;
++ ?)
++ echo "Unknown parameter"
++ exit 1;;
++ esac
++done
++
++workdir="$(pwd)"
++tmpdir="$workdir/cri_perf_test_tmpdata"
++mkdir -p $tmpdir/container/
++mkdir -p $tmpdir/pod/
++mkdir -p $workdir/cri_perf_test_result/
++result_data=$workdir/cri_perf_test_result/${engine}-${parallel}-result.dat
++rm -f $result_data
++
++# Get the interval time(ms)
++function getTiming(){
++ start=$1
++ end=$2
++
++ start_s=$(echo $start | cut -d '.' -f 1)
++ start_ns=$(echo $start | cut -d '.' -f 2)
++ end_s=$(echo $end | cut -d '.' -f 1)
++ end_ns=$(echo $end | cut -d '.' -f 2)
++
++ time=$(( ( 10#$end_s - 10#$start_s ) * 1000 + ( 10#$end_ns / 1000000 - 10#$start_ns / 1000000 ) ))
++
++ echo "$time"
++}
++
++# Kill all pods and containers running
++crictl --runtime-endpoint $runtime rmp -af
++
++# Create $parallel container.json and pod.json
++for((i=0;i<$parallel;i++))
++do
++ cat > $tmpdir/container/container_$i.json << EOF
++{
++ "metadata": {
++ "name": "testcontainer$i"
++ },
++ "image": {
++ "image": "busybox"
++ },
++ "command": [
++ "/bin/sh", "-c", "sleep 1d"
++ ],
++ "log_path": "console$i.log",
++ "linux": {
++ "security_context": {
++ "capabilities": {}
++ }
++ }
++}
++EOF
++
++ cat > $tmpdir/pod/pod_$i.json <<EOF
++{
++ "metadata": {
++ "name": "testpod$i",
++ "namespace": "testns",
++ "uid": "b49ef5ee-ee30-11ed-a05b-0242ac120003",
++ "attempt": 1
++ },
++ "log_directory": "/tmp",
++ "linux": {
++ "security_context": {
++ "capabilities": {}
++ }
++ }
++}
++EOF
++done
++
++# get start time
++start_time=$(date +%s.%N)
++
++engine_pid=$(pidof $engine)
++
++for((i=0;i<$parallel;i++))
++do
++ crictl --runtime-endpoint $runtime run --no-pull $tmpdir/container/container_$i.json $tmpdir/pod/pod_$i.json &
++done
++
++# wait for all the containers to finish and get end time
++end_time=$(date +%s.%N)
++boot_time=$(getTiming $start_time $end_time)
++a=`crictl --runtime-endpoint $runtime ps | grep testcontainer | wc -l`
++while [ $a -ne $parallel ];
++do
++ a=`crictl --runtime-endpoint $runtime ps | grep testcontainer | wc -l`
++ end_time=$(date +%s.%N)
++ boot_time=$(getTiming $start_time $end_time)
++ if [ $boot_time -gt 2000000 ]; then
++ break
++ fi
++done
++
++if [ ${boot_time} -lt 2000000 ]; then
++ echo "BootTime: ${boot_time}ms"
++ # Output to the corresponding file
++ echo "time: ${boot_time}" >> ${result_data}
++else
++ echo "${boot_time}ms is too long, please check the environment."
++fi
++
++# get pids
++shim_pids=$(ps -ef | grep -v grep | grep -i $shim | awk '{print$2}')
++
++# calc memory of pids
++engine_mem=$(cat /proc/$engine_pid/status | grep VmRSS | awk '{print $2}')
++shim_mem=0
++for pid in $shim_pids
++do
++ let shim_mem+=$(cat /proc/$pid/status | grep VmRSS | awk '{print $2}')
++done
++echo "Engine Mem: ${engine_mem}KB"
++echo "engine-mem: ${engine_mem}" >> ${result_data}
++echo "Shim Mem Total: ${shim_mem}KB"
++echo "shim-mem: ${shim_mem}" >> ${result_data}
++
++# clean resources
++crictl --runtime-endpoint $runtime rmp -af
++rm -rf $tmpdir
+--
+2.34.1
+