测评未始,福利先送
ECS免费送,测评领好礼:👉👉👉点击即领3月C8Y ECS服务器👈👈👈
倚天一出,谁与争锋?
5nm、单芯600亿晶体管、128核、主频3.2GHz、支持DDR5内存、PCIe5.0。首战跑分就超出业内标杆20%,能效比提升50%以上。这就是2021年云栖大会上由平头哥半导体发布首颗为云而生的CPU芯片倚天710。
作为一颗高性能服务器芯片,倚天710芯片针对云场景的高并发、高性能和高能效需求而设计,把最前沿的芯片设计技术与云场景的独特需求相结合,最终实现了性能和能效比的突破。
例如云计算高并发条件下的带宽瓶颈,倚天710就对片上互联进行了特殊优化设计,通过全新的流控算法,有效缓解系统拥塞,从而提升了系统效率和扩展性。
这也是为什么平头哥的倚天710一出,Arm赛道服务器CPU无一能与争锋关键原因。
货比"三家",低价先行
本次对比测评的实例规格有三个,如下表所示(标配带40GiB的PL0系统盘)
服务器规格 |
价格(抢占/按需/包月)单位:元 |
c8y.large |
0.09/时 | 0.175/时| 148.13 |
c7.large |
0.119/时 | 0.45/时 | 215.70 |
c8i.large |
0.119/时 | 0.47/时 | 225.48 |
从上表来看,若性能一致,那ARM架构的C8y更具价格优势。若是性能上再能够比x86的服务器高上10~20%,那么这钱是真花得值,在性价比方面完胜X86服务器。那么在这一环节看,我们的倚天710支持的c8y ARM服务器的确是占据低价优势,接下来,我们共同看看性能方面的测试。
测试先跑分
笔者之前有对于阿里云服务器的很详细的测评,其中采用Geekbench来测试服务器的CPU分数
规格参数
服务器规格 |
系统版本 |
geekbench版本 |
处理器 |
c8y.large 2h4g |
Ubuntu 22.04 64位 |
6.1.0 |
Yitian 710 |
c7.large 2h4g |
Ubuntu 22.04 64位 |
6.1.0 |
Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz |
c8i.large 2h4g |
Ubuntu 22.04 64位 |
6.1.0 |
Intel(R) Xeon(R) Platinum 8475B |
测试代码
# ARM版 wget https://cdn.geekbench.com/Geekbench-6.1.0-LinuxARMPreview.tar.gz tar -zxf Geekbench-6.1.0-LinuxARMPreview.tar.gz cd Geekbench-6.1.0-LinuxARMPreview/ ./geekbench6 # x86版本 wget https://cdn.geekbench.com/Geekbench-6.1.0-Linux.tar.gz tar -zxf Geekbench-6.1.0-Linux.tar.gz cd Geekbench-6.1.0-Linux/ ./geekbench6
测试结果
分数(单核/多核) |
测试结果链接 |
|
c8y.large 2h4g |
1377/2494 |
|
c7.large 2h4g |
1665/1920 |
|
c8i.large 2h4g |
1796/2211 |
从测试结果来看,倚天710在单核测试确实不尽人意,但是多核可以完爆另外两个规格的处理器,这也可以从倚天710的架构设计上进行回答,具体的详解我会放在后面为大家解答,同时也希望大家不要单看服务器的单核分数,因为实际使用中,真的会只使用单核服务器吗?对吧,在实际业务中,服务器的规格会很大,以支撑业务完整运行,关于倚天710多核的优秀性能会在后面为大家解释,请耐心往下阅读!👉👉👉也可直接点击跳转👈👈👈
测码奔腾
本次测试采用FFmpeg来进行测试,同时使用Python构建一个并行处理转码的服务器,用来接收客户端发来的转码请求,实际操作步骤如下
测试参数如下
注:实例规格较小,但是同规格,不影响测试的对比,望周知
服务器 |
处理器 |
配置 |
测试任务 |
测试文件 |
c8y.large |
倚天710 |
2H4G |
flv转mp4(h264) |
LG.flv |
c7.large |
Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz |
2H4G |
flv转mp4(h264) |
LG.flv |
c8i.large |
Intel(R) Xeon(R) Platinum 8475B |
2H4G |
flv转mp4(h264) |
LG.flv |
测试文件、转码后视频文件
源视频文件:https://www.aliyundrive.com/s/Xjr437fRrvN
arm转码后视频文件:https://www.aliyundrive.com/s/Xjr437fRrvN
x86转码后视频文件:https://www.aliyundrive.com/s/ki6qBmrRUPh
原视频参数
ffmpeg -i LG.flv
安装必备依赖包
apt update && apt install -y ffmpeg python3 python3-pip3 && pip3 install Flask
服务器端ffmpeg并发转码代码
直接在终端运行即可,会自动写入文件
cat >> trans_video.py << EOF import os from flask import Flask, request, jsonify import subprocess from datetime import datetime import threading import uuid app = Flask(__name__) def get_resolution_param(): resolution = request.args.get('resolution') if resolution not in ['30', '60']: resolution = '30' # 默认为30 return resolution def get_output_file_name(input_filename, resolution): base_name, extension = os.path.splitext(input_filename) current_time = datetime.now().strftime("%Y%m%d_%H%M%S") unique_id = str(uuid.uuid4())[:8] return f"{base_name}_{current_time}_{unique_id}_{resolution}fps.mp4" @app.route('/transcode', methods=['POST']) def transcode(): input_file = request.files.get('file') if not input_file: return jsonify({'error': 'No file received'}) resolution = get_resolution_param() output_file = get_output_file_name(input_file.filename, resolution) start_time = datetime.now() # 记录开始时间 ffmpeg_cmd = ['ffmpeg', '-i', input_file.filename, '-c:v', 'h264', '-c:a', 'copy', '-b:v', '3000k', '-copyts', '-r', resolution, output_file] try: # 保存上传的文件到服务器 input_file.save(input_file.filename) # 创建一个新的线程来处理转码 transcode_thread = threading.Thread(target=do_transcode, args=(ffmpeg_cmd, input_file.filename, output_file, start_time)) transcode_thread.start() except Exception as e: return jsonify({'error': 'Transcoding failed'}) return jsonify({'message': 'Transcoding started', 'output_file': output_file}) def do_transcode(ffmpeg_cmd, input_filename, output_file, start_time): try: # 执行转码命令 subprocess.run(ffmpeg_cmd, check=True) except Exception as e: pass end_time = datetime.now() # 记录结束时间 processing_time = end_time - start_time total_seconds = processing_time.total_seconds() print(f'Transcoding completed in {total_seconds} seconds.') if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) EOF
客户端请求代码
同上,直接在终端运行即可,会自动写入文件
cat >> send_task.py << EOF import os import requests from concurrent.futures import ThreadPoolExecutor def transcode_video(file_path, resolution): url = "http://127.0.0.1:5000/transcode" files = {'file': open(file_path, 'rb')} params = {'resolution': resolution} response = requests.post(url, files=files, params=params) return response.json() if __name__ == "__main__": file_path = "/root/LG.flv" # 替换为实际视频文件路径 resolution = "30" # 替换为所需的分辨率 # 使用ThreadPoolExecutor进行并发转码测试 with ThreadPoolExecutor() as executor: # 可按需求修改range中的并发请求数量 futures = [executor.submit(transcode_video, file_path, resolution) for _ in range(6)] for future in futures: result = future.result() print(result) EOF
开始测试
需要每台服务器开启两个窗口,一个窗口用来运行服务器端,等待接收客户端发来的请求,进行转码处理,另一个窗口则用来模拟客户端发送请求
以C8Y为例
# 服务器端 python3 trans_video.py # 客户端 python3 send_task.py
测试结果
并发转码量:2
服务器 |
并发数量 |
结果(成功/总数) |
耗时/任务 |
稳定平均FPS |
c8y.large |
2 |
2/2 |
约135s |
9.5 |
c7.large |
2 |
2/2 |
约160s |
8.0 |
c8i.large |
2 |
2/2 |
约148s |
8.7 |
并发转码量:4
服务器 |
并发数量 |
结果(成功/总数) |
耗时/任务 |
稳定平均FPS |
c8y.large |
4 |
4/4 |
约272s |
4.7 |
c7.large |
4 |
4/4 |
约323s |
4.0 |
c8i.large |
4 |
4/4 |
约299s |
4.3 |
并发转码量:6
服务器 |
并发数量 |
结果(成功/总数) |
耗时 |
稳定平均fps |
c8y.large |
6 |
6/6 |
约410s |
3.3 |
c7.large |
6 |
6/6 |
约487s |
2.6 |
c8i.large |
6 |
6/6 |
约454s |
2.8 |
并发转码量:8
服务器 |
并发数量 |
结果(成功/总数) |
耗时 |
备注 |
c8y.large |
8 |
6/8 |
约383 |
应是内存吃满,导致两个任务失败 |
c7.large |
8 |
0/8 |
未完成 |
卡顿严重,几乎卡死 |
c8i.large |
8 |
6/8 |
约456 |
应是内存吃满,导致两个任务失败 |
转码质量比较(pnsr&&ssim)
机型 |
PNSR&SSIM |
结论 |
arm |
[Parsed_ssim_0 @ 0xaaab09396eb0] SSIM Y:0.957138 (13.679229) U:0.973304 (15.735503) V:0.970093 (15.242341) All:0.961991 (14.201162) [Parsed_psnr_1 @ 0xaaab09396f60] PSNR y:25.245152 u:32.326591 v:31.380328 average:26.553509 min:9.613420 max:59.335978 |
从PSNR和SSIM的数值来看,x86服务器和ARM服务器转码后的视频质量非常接近,差异相对较小。在大多数情况下,SSIM和PSNR值的差异在小数点后几位或小于0.01,这表明两个转码结果在视觉上是非常相似的,质量都较高。 综上所述,根据PSNR和SSIM指标来看,ARM服务器转码后的视频质量与x86服务器相当。 |
x86 |
[Parsed_ssim_0 @ 0x562ed0788d40] SSIM Y:0.957135 (13.678973) U:0.973306 (15.735836) V:0.970089 (15.241654) All:0.961989 (14.200919) [Parsed_psnr_1 @ 0x562ed0789800] PSNR y:25.245107 u:32.326732 v:31.380153 average:26.553465 min:9.613410 max:59.175929 |
|
综合上述的测试结果来看,在2,4,6并发解码的情况下,采用倚天710的ARM服务器的转码性能均优于同规格X86服务器(均为2h4g硬件规格),对于c7实例,转码性能提升约为18%左右,对于最新一代c8i实例,转码性能提升约为10%。从并发量的递增,我们可以看出,并发量越高,arm架构的实例转码性能较之x86架构的实例而言,是更优的。同时从几个高并发测试中可以看到,倚天710在处理转码的时候fps始终是平稳状态,而x86架构的服务器则是在超过4路并发处理后性能暴跌,为何会如此,下个章节会为您详细解答。
而阿里技术团队,采用更大规格的测试中,基于倚天ECS,阿里云视频云与平头哥团队联合,对s264、s265编码器进行深度优化,使得搭载倚天710的ECS实例转码性能超过c7实例30%。
。
(图片来自阿里云技术团队博文)
为何倚天710如此优秀?
全物理核心,独享计算单元
倚天710单颗CPU即实现了128核的高密度设计,高并发负载下可实现高线性度性能增长;同时处理器无超线程概念,避免了性能争抢的问题:独享物理核,性能更强劲。
传统CPU架构是两个vCPU/HT共享一个物理核,1份ALU。阿里云ECS倚天实例采用的是独享物理核心方式,没有超卖概念,让算力密集的计算指令不必排队、不必争抢,计算速度更快。
独享Cache
传统CPU架构,在Cache维度,过去两个vCPU/HT共享一二级缓存,相互争抢,性能波动较为严重。采用倚天710独享Cache的设计,让vCPU之间相互不影响,为重负载计算带来更高性能。
高效不降频
影响算力性能的关键因素,除了核的资源,还有主频。以视频编码为例,传统架构CPU在并发超过4路后,性能下降40%,这背后的原因是高算力负载很容易造成功耗过大,温度上升,因此采用降频规避,进而影响了性能。而倚天710功耗相比主流CPU有大幅下降,没有任何降频问题。参考上面的视频转码测试,我们可以很容易得到这个结论。
高效的扩展指令集和可伸缩向量指令架构
倚天710还针对特定算法场景进行了指令集加速与优化。比如像SVE等矢量计算技术,其中BF16/INT8 mmla指令可实现高效的矩阵乘法运算,此外还支持Hash、CRC32等加速指令,可以让单条指令并行处理更多数据,大幅提升视频编解码、AI编解码增强等场景性能。
特性 |
倚天710 |
Vector |
NEON , SIMD , SVE/SVE2 128bit*2 per core |
BF16 MM |
Armv8.2-AA32BF16, 16-bit floating-point instructions |
INT8 MM |
Armv8.2-I8MM, Int8 Matrix Multiply instructions |
Hash |
SHA1 , SHA2,SHA256,SHA512 and SHA3 |
CRC32 |
SIMD CRC32 |
业务"移栽"
常规来讲,大家都用的是X86架构的服务器,很少使用到arm架构的服务器,在本节中,将使用几个常规场景来测试在arm架构上服务是否能够正常运行。
LNMP环境部署WordPress
参数预览
服务器 |
软件信息 |
c8y.large |
LNMP+WordPress |
LNMP构建
sudo apt update sudo apt install nginx mysql-server php-fpm php-mysql unzip cat > defaults << EOF server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; # Add index.php to the list if you are using PHP index index.php index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 根据PHP版本修改此处 } } EOF # 修改PHP-FPM配置 sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/8.1/fpm/php.ini # 重启服务 systemctl enable nginx php8.1-fpm mysql # 初始化数据库,密码强度可以设置为 0 low mysql_secure_installation # 直接登录,不需要密码 mysql -uroot -p #修改数据库密码 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yitian710'; # 设置wordpress数据库 CREATE DATABASE IF NOT EXISTS `wordpress-db`; create user 'wordpress'@'localhost' identified by 'yitian-wd'; GRANT ALL PRIVILEGES ON `wordpress-db`.* TO 'wordpress'@'localhost';
WordPress安装配置
# 下载、解压 wget https://cn.wordpress.org/latest-zh_CN.zip -O wordpress.zip unzip wordpress.zip # 配置wordpress cd wordpress/ cp wp-config-sample.php wp-config.php sed -i "s/database_name_here/wordpress-db/" wp-config.php sed -i "s/username_here/wordpress/" wp-config.php sed -i "s/password_here/yitian-wd/" wp-config.php # 复制修改后的文件夹到网站根目录 cp -r /root/wordpress/* /var/www/html/
成果展示
服务器负载
企业必备GitLab CI/CD
Gitlab应该是个人开发者和企业用户在服务器上部署比较多的服务,用来存储代码和持续构建、测试和部署迭代代码更改。
Gitlab的安装
#安装和配置必须的依赖项 sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates tzdata perl #下载及安装gitlab curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash sudo EXTERNAL_URL=`curl cip.cc|awk -F ": " 'NR==1{print $2}'` apt-get install gitlab-jh #查看生成默认密码 cat /etc/gitlab/initial_root_password |grep Password:
新建仓库
gitlab控制台
new project ---> 设置名称 ---> 设置公开访问
CI/CD的应用
#安装gitlab runner ##添加官方极狐GitLab 仓库 curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash ##安装最新版本的极狐GitLab Runner sudo apt-get install gitlab-runner ##gitlab runner注册 ### 复制gitlab runner 的 token 项目 ---> Settings ---> CI/CD ---> Runners ---> Expand ---> New Project旁边 三个点(可以查看token值) ### 注册runner gitlab-runner register # 输入当前服务器或者安装gitlab的服务器地址 Enter the GitLab instance URL (for example, https://gitlab.com/): http://47.98.141.12 # 在这里 # 输入上面复制的token Enter the registration token: GR1348941RWd4QeFBsbSRTsQyG4sE # 在这里 # 给定描述,随意编写 Enter a description for the runner: [iZbp1ev4xnol3agh868urwZ]: test_runner 在这里 # 设置tag,很重要 Enter tags for the runner (comma-separated): test # 设置你自己的tag # 可选描述,随便写 Enter optional maintenance note for the runner: test runner # 设置一个执行,例如shell来执行ci/cd Enter an executor: parallels, shell, docker-autoscaler, instance, kubernetes, custom, docker, docker-windows, ssh, virtualbox, docker+machine: shell # 直接输入shell 回车即可 Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
示例代码
app.py
from flask import Flask # 创建一个Flask应用程序实例 app = Flask(__name__) # 定义路由,当访问根URL时执行的处理函数 @app.route('/') def hello_gitlab(): return '<h1>Hello GitLab, Running On C8Y of YiTian 710</h1>' # 运行Flask应用程序 if __name__ == '__main__': app.run(host='0.0.0.0', port=8000)
.gitlab-ci.yml
示例项目,没有需要额外安装的包,直接部署即可
stages: - deploy deploy: tags: - test stage: deploy script: - echo "Deploying the application" - python3 app.py # 运行Flask应用
推送到仓库CI/CD
注:一定要看注释,将上面的示例代码添加进项目目录
# 先拉取仓库到本地 git clone git@你的服务器IP:root/demo.git cd demo # 将上面的示例代码文件添加到这个目录中 # 将上面的示例代码文件添加到这个目录中 # 将上面的示例代码文件添加到这个目录中 git add . git commit -m "upload project" git push # 这里就输入之前的root和密码
查看pipeline执行情况
最终效果
容器---Docker
这里只是做一个简单的测试,为了展示x86业务可以在arm上也能很好的运行
实验规格
服务器规格 |
操作系统 |
Docker版本 |
c8y.large |
Ubuntu 22.04 64位 |
24.0.5 |
安装Docker、构建镜像及运行
安装Docker
#添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg #添加Docker存储库 echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list #更新软件包索引并安装Docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io #启动并设置开机启动 systemctl enable docker --now
编写Dockerfile
cat > Dockerfile << EOF # 使用官方 Python 镜像作为基础镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 复制当前目录下的 app 文件夹到容器的 /app 目录下 COPY app /app # 安装 Flask 和依赖 RUN pip install --no-cache-dir Flask # 设置 Flask 环境变量 ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 ENV FLASK_RUN_PORT=5000 # 暴露容器的端口 EXPOSE 5000 # 运行 Flask 应用 CMD ["flask", "run"] EOF
app.py文件
mkdir app cat > app/app.py << EOF from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return '<h1>Hello from Docker, Running on C8Y Yitian 710</h1>' if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) EOF
构建镜像
docker build -t yitian . docker run -dit --name demo -p 5000:5000 yitian
效果
总结
从近些年来看,市面上主流云服务厂商中 AWS、华为、Oracle 在出售 ARM64 的机器,随着阿里自研芯片的出现,阿里也加入到出售ARM64云服务器的队列中,并且是自身研发的芯片。要知道,在平头哥交货之前,全球只有Intel、AMD、AWS、华为等公司掌握这样的技术实力。同时随着国家"双碳"战略的推动,企业也有了碳排放要求,平头哥推出的倚天710,采用5nm工艺,拥有更好的能效比,能够大大降低碳排放。
那么从本篇文章的整体测试中,跑分、转码、业务移植,这几个流程走下来,都可以感受到倚天710的强大,在不同的业务场景中,搭载倚天710的服务器都可以很好的负载业务,同时在一些特定的场景中会有额外优化,使其性能能够媲美甚至超过同规格的x86架构服务器。
平头哥每次推出的芯片都是以我国传统的武侠文化中选取神器的名称来命名,
- 玄铁是“重剑无锋,大巧不工”开山始祖
- 含光是“视不可见,无往不利”AI神助
- 倚天是“倚天一出,谁与争锋”云端动力来源
现在国际局势的紧张,面对他国对我们的科技封锁,我们更是应该
倚天一出,谁与争锋,倚天自强!