• [其他语言] etcd软件移植centos7.6-arm
    1 etcd简介etcd是一个高可用的分布式键值数据库,可用于配置共享和服务发现。 2 编译移植环境 服务器TaiShan2280CPUKunpeng 920-3226操作系统Centos7.6 ARMGoGo1.11.5 3 移植源码可以在github上下载。本文以3.3.15版本为例说明下载并解压到/user/local目录wget https://github.com/etcd-io/etcd/releases/download/v3.3.15/etcd-v3.3.15-linux-arm64.tar.gztar -xzvf etcd-v3.3.15-linux-arm64.tar.gz -C /usr/local/cd /usr/local/etcd-v3.3.15-linux-arm64/ 解压后看到etcd和etcdctl可执行文件[root@centos76 etcd-v3.3.15-linux-arm64]# lsDocumentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md 直接运行会提示错误[root@centos76 etcd-v3.3.15-linux-arm64]# ./etcd2019-09-17 20:50:24.571196 E | etcdmain: etcd on unsupported platform without ETCD_UNSUPPORTED_ARCH=arm64 set. 根据提示设置环境变量# export ETCD_UNSUPPORTED_ARCH=arm64也可以加入到vi ~/.bash_profile中然后source ~/.bash_profile固化下来 再次执行./etcd --version输出版本信息[root@centos76 etcd-v3.3.15-linux-arm64]# ./etcd --version2019-09-17 20:50:43.759999 W | etcdmain: running etcd on unsupported architecture "arm64" since ETCD_UNSUPPORTED_ARCH is setetcd Version: 3.3.15Git SHA: 94745a4eeGo Version: go1.12.9Go OS/Arch: linux/arm64 4 验证写入键值[root@centos76 etcd-v3.3.15-linux-arm64]# ./etcdctl --endpoints=http://127.0.0.1:2379 set foo "Hello World"Hello World获取键值[root@centos76 etcd-v3.3.15-linux-arm64]# ./etcdctl --endpoints=http://127.0.0.1:2379 get fooHello World  
  • [其他语言] cfssl移植指导书-centos7.6-ARM
    1 软件简介CFSSL是CloudFlare开源的一款PKI/TLS工具。 CFSSL 包含一个命令行工具 和一个用于 签名,验证并且捆绑TLS证书的 HTTP API 服务。 使用Go语言编写 2 移植环境信息 服务器TaiShan2280CPUKunpeng 920-3226操作系统Centos7.6 ARMGO1.11.5cfssl1.3.4 3 配置本地Yum源# cat /etc/yum.repos.d/local.repo[local]name=localbaseurl=file:///mnt/enabled=1 4 软件下载https://github.com/cloudflare/cfssl/archive/1.3.4.tar.gz5 编译安装 首选需要安装GO编译器,本文使用1.11.5版本的GO编译器# go versiongo version go1.11.5 linux/arm64 查看并配置GO的环境变量# go env | egrep -i 'GOPATH|GOROOT'GOPATH="/root/go"GOROOT="/usr/lib/golang" 通过vi编辑器配置下bash的环境变量在~/.bash_profile中加入下面4行export GOPATH="/root/go"export GOROOT="/usr/lib/golang"#添加GO的代理export GO111MODULE=onexport GOPROXY=https://goproxy.io 执行source ~/.bash_profile使设置生效 编译安装cfssl源码mkdir $GOPATH/src/github.com/cloudflare/cfssl -pcd $GOPATH/src/github.com/cloudflare/cfsslwget https://github.com/cloudflare/cfssl/archive/1.3.4.tar.gztar -xzvf 1.3.4.tar.gzcd cfssl-1.3.4/make会在./bin下面生成可执行文件# cd bin/# lscfssl  cfssl-bundle  cfssl-certinfo  cfssl-newkey  cfssl-scan  cfssljson  mkbundle  multirootca 6 验证# ./cfssl versionVersion: 1.3.4Revision: devRuntime: go1.11.5 
  • 鲲鹏920(ARM64) RSA2048_for_Centos_7.6迁移指导
    加速引擎是TaiShan 200服务器基于Kunpeng 920芯片提供的硬件加速解决方案,包含了对称加密、非对称加密和数字签名,压缩解压缩等算法,用于加速SSL/TLS应用和数据压缩,可以显著降低处理消耗,提高处理器效率。此外,加速引擎对应用层屏蔽了其内部实现细节,用户通过OpenSSL、zlib标准接口即可以实现快速迁移现有业务。目前加速引擎主要支持以下算法:l   对称加密算法SM4,支持CTR/CBC模式。l   压缩解压缩算法,支持zlib/gzip。 
  • TaiShan服务器(ARM64) hummingbird 1.6.0移植指南★★★
    1 简介    CentOS 7.6下hummingbird编译需要用到如下组件:组件名 版本hummingbird 1.6.0go  1.12.9或更高版本操作系统 CentOS 7.6.18102 依赖根据编译提示安装依赖1、安装go编译器到home目录下https://dl.google.com/go/go1.12.9.linux-arm64.tar.gztar -C /root/ -zxvf go1.12.9.linux-arm64.tar.gz2、设置环境变量vim ~/.bash_profileexport GOROOT=/home/goPATH=$PATH:$GOROOT/bin3、查看版本:go versiongo version go1.12.9 linux/arm64 3 编译安装1) 从github下载hummingbird源码,并放在root目录下cd  ~git clone https://github.com/troubling/hummingbird2) 进入hummingbird解压目录cd  hummingbird3) 下载依赖包export  GOPATH=/home/go/src/mkdir -p $GOPATH/github.com/troublingcd $GOPATH/github.com/troublingln -s $GOPATH/src/github.com/troubling/hummingbird ~/hummingbird-1.6.0go get "github.com/beorn7/perks/quantile" "github.com/gholt/brimtext" "github.com/codahale/hdrhistogram" "github.com/golang/protobuf/proto"  "github.com/justinas/alice" "github.com/klauspost/reedsolomon" "github.com/opentracing/opentracing-go" "github.com/opentracing/opentracing-go/ext" "github.com/opentracing/opentracing-go/log"  "github.com/pkg/errors" "github.com/prometheus/client_model/go" "github.com/prometheus/common/expfmt" "github.com/prometheus/common/model" "github.com/prometheus/procfs" "github.com/shirou/gopsutil/disk"   "github.com/shirou/gopsutil/load"  "github.com/shirou/gopsutil/mem"  "github.com/shirou/gopsutil/process" "github.com/troubling/nectar" "github.com/troubling/nectar/nectarutil" "github.com/vaughan0/go-ini"mkdir -p $GOPATH/src/golang.org/xcd $GOPATH/src/golang.org/xgit clone https://github.com/golang/sys.gitgit clone https://github.com/golang/net.gitgit clone https://github.com/golang/crypto.gitgit clone https://github.com/golang/text.gitmkdir -p $GOPATH/src/go.uber.org/git clone https://github.com/uber-go/zap.gitgit clone https://github.com/uber-go/atomic.gitgit clone https://github.com/uber-go/multierr.git4) 编译,依次执行如下命令make4 参考信息    无5 问题处理方法5.1问题一问题现象:执行make出现如下搞错[root@1hummingbird]#make/home/go/src/github.com/troubling/hummingbird/common/srv/server.go:281:10: undefined: syscall.Dup2/home/go/src/github.com/troubling/hummingbird/common/srv/server.go:304:10: undefined: syscall.Dup2make: *** [bin/hummingbird] Error 2处理方式 :修改/home/go/src/github.com/troubling/hummingbird/common/srv/server.go的281行和304的syscall.Dup2(int(lowPrioFile.(*os.File).Fd()), int(os.Stdout.Fd()))修改成syscall.Dup3(int(lowPrioFile.(*os.File).Fd()), int(os.Stdout.Fd()),0)5.2 问题二问题现象make 出现如下搞错[root@1hummingbird]#make/home/go/src/github.com/troubling/hummingbird/middleware/recon.go:329:8: cannot use cnt (type uint32) as type uint64 in map value/home/go/src/github.com/troubling/hummingbird/middleware/recon.go:330:12: invalid operation: oCnt += cnt (mismatched types uint64 and uint32)make: *** [bin/hummingbird] Error 2处理方式 :1、 修改/home/go/src/github.com/troubling/hummingbird/middleware/recon.go的327行cnt := stat.Sys().(*syscall.Stat_t).Nlink - 2修改成cnt := uint64(stat.Sys().(*syscall.Stat_t).Nlink - 2)2、 修改/home/go/src/github.com/troubling/hummingbird/middleware/recon.go的160行cnt += stat.Nlink – 1修改成cnt += uint64(stat.Nlink - 1) 
  • [交流吐槽] 建议增加树莓派 raspbian 系统源
    Raspbian 简介Raspbian 是专门用于 ARM 卡片式计算机 Raspberry Pi® “树莓派”的操作系统。Raspberry Pi® “树莓派”是 2012 年问世的 ARM 计算机,旨在为儿童和所有的计算机爱好者提供一套廉价的编程学习与硬件 DIY 平台。树莓派基于 ARM11,具有 1080P 高清视频解析能力,附带用于硬件开发的 GPIO 接口,使用Linux操作系统。售价仅 $25~$35。Raspbian 系统是 Debian 7.0/wheezy 的定制版本。得益于 Debian从7.0/wheezy 开始引入的“带硬件浮点加速的ARM架构”(armhf),Debian 7.0 在树莓派上的运行性能有了很大提升。Raspbian 默认使用 LXDE 桌面,内置 C 和 Python 编译器。Raspbian 是树莓派的开发与维护机构 The Raspbeery Pi Foundation “树莓派基金会”,推荐用于树莓派的首选系统。由于以下原因,Raspbian 需要单独组建软件仓库,而不能使用 Debian 的仓库: Debian下所有的软件包都需要用 armhf 重新编译。 树莓派有部分特有的软件包,例如 BCM2835 CPU 的 GPIO 底层操作库。 树莓派用户倾向于探索、尝试最新的软件。这与 Debian 软件源的策略完全不同。----------------------------------------------该系统有两个源需要镜像:1、默认的源地址/etc/apt/sources.list文件: http://archive.raspberrypi.org/2、树莓派的 archive.raspberrypi.org 软件源 /etc/apt/sources.list.d/raspi.list 文件中的源
  • arm鲲鹏服务器使用docker-compose部署问题
    arm鲲鹏服务器使用docker-compose部署问题描述1:项目开发:基于java的微服务,在使用x86部署时没有任何问题2:使用arm架构的服务器安装使用docker和docker-compose在启动的适合总是报以下错误 ---> de764ad211deStep 2/13 : MAINTAINER lengleng(wangiegie@gmail.com) ---> Using cache ---> 41ec295856a6Step 3/13 : RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ---> Running in 9b8129a5a173standard_init_linux.go:211: exec user process caused "exec format error"ERROR: Service 'pigx-mysql' failed to build: The command '/bin/sh -c ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime' returned a non-zero code: 1错误排查:1:排除window到unix环境转换的格式问题,使用dos2unix转换仍然不行2:错误原因,在指令执行过程中出现指令格式执行错误
  • [Atlas300] 有没有ubuntu的arm版本的mind studio
    求mini_mind_studio_Ubuntu_arm_server.tar.gz
  • [技术干货] 国内可用arm源
    中科大源deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universedeb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universedeb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universedeb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universedeb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universedeb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universedeb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universedeb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universedeb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universedeb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe清华源:deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universedeb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universedeb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universedeb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universedeb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
  • [活动分享] X86应用迁移到MEC(ARM)平台,你遇到了哪些问题?
    X86应用迁移到MEC(ARM)平台,你遇到了哪些问题?汇编不容易改?没有ARM编译机?开源软件适配难?代码平台耦合性大,无替代方案?欢迎跟帖讨论。。。。。
  • 各Linux arm操作系统获取“多路径管理软件(Multipath)”路径汇总
    1、CentOSCentOS系统yum源有rpm安装包,可以直接通过“yum -y install device-mapper-multipath*”安装,或通过如下链接手动使用rpm -ivh命令安装:http://mirror.centos.org/altarch/7/os/aarch64/Packages/device-mapper-multipath-0.4.9-127.el7.aarch64.rpmhttp://mirror.centos.org/altarch/7/os/aarch64/Packages/device-mapper-multipath-devel-0.4.9-127.el7.aarch64.rpmhttp://mirror.centos.org/altarch/7/os/aarch64/Packages/device-mapper-multipath-libs-0.4.9-127.el7.aarch64.rpmhttp://mirror.centos.org/altarch/7/os/aarch64/Packages/device-mapper-multipath-sysvinit-0.4.9-127.el7.aarch64.rpm2、中标麒麟NeoKylin中标麒麟NeoKylin系统yum源有rpm安装包,可以直接通过“yum -y install device-mapper-multipath*”安装,或通过如下链接手动使用rpm -ivh命令安装:http://download.cs2c.com.cn/neokylin/server/releases/7.0/aarch64/os/Packages/device-mapper-multipath-0.4.9-68.nd7.1.aarch64.rpmhttp://download.cs2c.com.cn/neokylin/server/releases/7.0/aarch64/os/Packages/device-mapper-multipath-libs-0.4.9-68.nd7.1.aarch64.rpmhttp://download.cs2c.com.cn/neokylin/server/releases/7.0/aarch64/os/Packages/device-mapper-multipath-sysvinit-0.4.9-68.nd7.1.aarch64.rpm3、凝思凝思有一些自己的多路径软件,需要根据对应系统版本选择对应的软件安装,获取链接如下:http://www.linx-info.com/#/support/software4、FedoraFedora系统针对不同的版本有不同的多路径软件,链接如下:Fedora Rawhide for aarch64:https://rpmfind.net/linux/fedora/linux/development/rawhide/Everything/aarch64/os/Packages/d/device-mapper-multipath-0.8.2-1.fc32.aarch64.rpmFedora 31 for aarch64:https://rpmfind.net/linux/fedora/linux/releases/31/Everything/aarch64/os/Packages/d/device-mapper-multipath-0.8.0-3.fc31.aarch64.rpmFedora 30 for aarch64:https://rpmfind.net/linux/fedora/linux/releases/30/Everything/aarch64/os/Packages/d/device-mapper-multipath-0.7.9-6.git2df6110.fc30.aarch64.rpmFedora 29 updates for aarch64:https://rpmfind.net/linux/fedora/linux/updates/29/Everything/aarch64/Packages/d/device-mapper-multipath-0.7.7-6.gitef6d98b.fc29.aarch64.rpmFedora 29 for aarch64:https://rpmfind.net/linux/fedora/linux/releases/29/Everything/aarch64/os/Packages/d/device-mapper-multipath-0.7.7-5.gitef6d98b.fc29.aarch64.rpm5、UbuntuUbuntu系统直接安装多路径软件multipath-tools即可:apt-get install multipath-tools如果需要从SAN引导,则还需要multipath-tools-boot软件包,不需要可以不安装:apt-get install multipath-tools-boot
  • [问题求助] 合作伙伴因为NDI和Adobe AE没有ARM版本,阻塞ARM切换,华为能够提替代建议吗
    合作伙伴因为NDI(NetworkDevice Interface)和Adobe AE没有ARM版本,阻塞ARM切换,华为能够提替代建议吗
  • 华为ARM64服务器上手体验--不吹不黑,用实际应用来看看TaiShan鲲鹏的表现
    ![](http://files.17study.com.cn/201912/hw/huawei-kunpeng920.jpeg) #### 背景 中美贸易冲突以来,相信最大的感受,并不是我对你加多少关税,而是我有,可我不卖给你。“禁售”成了市场经济中最大的竞争力。 相信也是因为这个原因,华为“备胎转正”的鲲鹏系列芯片,一经推出,就吸引了业界的眼球。 经过漫长的等待,基于鲲鹏920,代表高端计算能力的华为服务器已经开始大量出货。不过,限于专业壁垒,服务器用的芯片,无论如何也比不上5G和MATE30更令人瞩目。 今天偶然发现,华为云上正在进行“鲲鹏弹性云服务器”免费试用活动,于是迅速的申请了一台尝鲜。 ![](http://files.17study.com.cn/201912/hw/huawei-event.png) #### 基本环境 最基本的试用套餐中,包括一台1核、1G内存、1M带宽的弹性服务器;一个100G的云硬盘还有一个动态的公网IP。个人用户可以免费试用15天。 ![](http://files.17study.com.cn/201912/hw/huawei-order.png) 服务器可选多种操作系统,华为推荐的是自有的欧拉操作系统(EulerOS)。这是华为基于CentOS定制的版本,包含了多种服务器场景的优化,对于ARM64芯片也有更好的支持。其它还有10余种选择,都是Linux类的各种发行版本。 严重依赖Windows系列的话...你现在可以退散了,除了Windows操作系统当前还绑定在X86系列CPU之上,微软系列也属禁售之列。 作为试用,首先要“玩”起来方便,我选择了Ubuntu18.04系统。 ![](http://files.17study.com.cn/201912/hw/huawei-panel.png) 跟常见的云端系统一样,购买完成,服务器会快速的自己完成配置、启动。华为云提供了基于浏览器的终端界面: ![](http://files.17study.com.cn/201912/hw/huawei-console.png) 一开始只有一个root,利用浏览器的终端,新建一个日常使用的账号,升级各项更新和补丁,重启,然后可以放心安全的在远程使用ssh登陆了。有一个动态公网IP,还是方便很多。 整个过程流畅、稳定,第一印象跟通常使用的服务器并没有什么不同。如果不使用uname检查内核,完全感觉不到是一台ARM服务器。 ```js $ uname -a Linux ecs-kc1-small-1-linux-20191209185931 4.15.0-72-generic #81-Ubuntu SMP Tue Nov 26 12:21:09 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux ``` 先来看看配置,CPU: ```js $ cat /proc/cpuinfo processor : 0 BogoMIPS : 200.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm CPU implementer : 0x48 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd01 CPU revision : 0 ``` 接着是内存: ```js $ cat /proc/meminfo MemTotal: 1006904 kB MemFree: 387044 kB MemAvailable: 671300 kB Buffers: 33604 kB Cached: 296076 kB SwapCached: 1148 kB Active: 217232 kB Inactive: 275692 kB Active(anon): 59824 kB Inactive(anon): 119960 kB Active(file): 157408 kB Inactive(file): 155732 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 1762696 kB SwapFree: 1729472 kB Dirty: 28632 kB Writeback: 0 kB AnonPages: 162892 kB Mapped: 61680 kB Shmem: 16508 kB Slab: 96464 kB SReclaimable: 60696 kB SUnreclaim: 35768 kB KernelStack: 2464 kB PageTables: 3824 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2266148 kB Committed_AS: 1049036 kB VmallocTotal: 135290290112 kB VmallocUsed: 0 kB VmallocChunk: 0 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB ``` 虽说只是一个体验,但如果没有对比,我们很难对“体验”结果做出一个公正的评价。 所以我又在国内三甲的云服务商(这里就不提名字了,反正没有打擂台的意思)另外借用了一台生产用传统Intel至强的服务器。 同样使用Ubuntu 18: ```js $ uname -a Linux ebs-31389 4.15.0-72-generic #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux ``` CPU: ```js $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU E5-2678 v3 @ 2.50GHz stepping : 2 microcode : 0x1 cpu MHz : 2494.224 cache size : 4096 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti fsgs**Base** tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit bogomips : 4988.44 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU E5-2678 v3 @ 2.50GHz stepping : 2 microcode : 0x1 cpu MHz : 2494.224 cache size : 4096 KB physical id : 1 siblings : 1 core id : 0 cpu cores : 1 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti fsgs**Base** tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit bogomips : 4988.44 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: ``` 内存: ```js $ cat /proc/meminfo MemTotal: 4039500 kB MemFree: 1083580 kB MemAvailable: 3561040 kB Buffers: 206180 kB Cached: 2326624 kB SwapCached: 296 kB Active: 1394884 kB Inactive: 1213580 kB Active(anon): 40644 kB Inactive(anon): 53080 kB Active(file): 1354240 kB Inactive(file): 1160500 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 4038652 kB SwapFree: 4033008 kB Dirty: 20 kB Writeback: 0 kB AnonPages: 75392 kB Mapped: 88396 kB Shmem: 18068 kB Slab: 305188 kB SReclaimable: 251528 kB SUnreclaim: 53660 kB KernelStack: 2704 kB PageTables: 8312 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6058400 kB Committed_AS: 597368 kB VmallocTotal: 34359738367 kB VmallocUsed: 0 kB VmallocChunk: 0 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 106368 kB DirectMap2M: 4087808 kB DirectMap1G: 2097152 kB ``` 从硬件参数上看,“鲲鹏”很不利啊,可怜的1核1G内存。另一台Intel XEON虽说也不是啥高级货色,但2核4G内存,任谁看起来也是碾压式的对手。如果知道我只能借到这样一台对比的服务器,在华为云就应当开一台配置更高的机器。可惜免费机会仅有一次,也只能硬起头皮继续了。 | 主机 | TaiShan | 竞品品牌未知 | |-------|----------|------------| | CPU | 鲲鹏920 | Intel Xeon | | 核心数量 | 1 | 2 | | 内存 | 1G | 4G | 其它配置就不拉出来看了,因为剩下的硬件对本次对比影响不大;软件配置,都是默认的基础系统,两边都没有做任何专门的设定和调优。如果有区别,那也是云端工作人员水平的发挥,也得算加分项。 #### 体验内容和环境准备 早先还是很喜欢看跑分,后来时间长了,发现跑分的内容,跟实际工作区别还是比较大。往往跑分的指标很漂亮,真正用起来,满不是那么回事。 所以今天我们搞的稍微复杂一点,选择从前端开发、后端开发及服务、容器三个方面,对鲲鹏服务器做一个深度体验。我想从云服务的角度上说,这三类应用,怎么也能涵盖80%的常见需求吧。 (文中沿用口头习惯混用了芯片品牌和服务器品牌,相信你看的懂,就不再改了。) 首先我们准备相应的工具和环境。 前端开发选用node.js/npm/yarn工具链,vue框架。两台机器的版本完全相同: ```js $ node -v v12.13.1 $ npm -v 6.12.1 $ yarn -v 1.21.0 ``` 后端选用PostgreSQL数据库,两端版本相同: ```js $ psql --version psql (PostgreSQL) 10.10 (Ubuntu 10.10-0ubuntu0.18.04.1) ``` 后端工具链使用Rust nightly编译,两端相同: ```js $ rustc -V rustc 1.41.0-nightly (59947fcae 2019-12-08) ``` 这里补充一句,nightly只适合开发和实验,请勿在生产环境使用。这里考虑既然是体验,当然要有适度的超前,所以选用nightly版本。因为毕竟等到你用的时候,今天的nightly版本估计已经转正了。 在后端开发的过程中,还会使用到gcc/git/openssl等开源工具链。都使用了Ubuntu内置的版本,两台服务器相同。因为这些工具并非主要开发环境,这里节省篇幅,就不一一列出版本了。 容器方面,因为更多是兼容性体验,并不需要什么指标数据,所以只安装了鲲鹏服务器,版本如下: ```js $ sudo docker version Client: Version: 18.09.7 API version: 1.39 Go version: go1.10.1 Git commit: 2d0083d Built: Fri Aug 16 14:20:24 2019 OS/Arch: linux/arm64 Experimental: false Server: Engine: Version: 18.09.7 API version: 1.39 (minimum version 1.12) Go version: go1.10.1 Git commit: 2d0083d Built: Wed Aug 14 19:41:23 2019 OS/Arch: linux/arm64 Experimental: false ``` 本文不是教学,所以安装过程都忽略。值得一提的是,两台服务器在环境搭建的过程中,表现的都很流畅快捷,操作完全相同。常常需要专门看一眼主机名才能想的起来这是哪一台服务器。跟以往操作一些异构服务器的时候沟沟坎坎密布完全不可同日而语。 此外,各工具链国内的镜像站点对于环境搭建帮助很大,显著的提高了搭建速度。 #### 试用项目 有习惯使然的因素,这里用来测试服务器的项目选用了Gothinkster的RealWorld。RealWorld是一个极简的微型博客系统,号称“应用型演示之母”。是一个麻雀虽小,五脏俱卷的小应用。 在其[项目网站](https://github.com/gothinkster/realworld)上,提供了22种前端和50种后端的开源代码,任一种前端,都可以配合任一种后端组合工作。 看了前面的环境配置,估计你已经猜到了,我在这里选择了Vue的前端和rust-rocket-diesel后端的组合方式。 #### 前端开发 我们先从前端看起,首先把源码下载下来: ```bash $ git clone https://github.com/gothinkster/vue-realworld-example-app ``` 然后下载相关的依赖包: ```bash $ cd vue-realworld-example-app $ yarn install ``` 我们需要对源码做4处修改: 1. 在项目根目录增加`vue.config.js`文件,配置项目在网站中的子路径,毕竟虽然是试用,直接把根目录开放给RealWorld也太不讲究了。 2. Vue写的前端,使用了单网页结构。不同功能之间,看上去是不同的网页,实际是Vue截获URL地址,在屏幕组件之间的切换。为了让Vue路由工作准确,我们需要修改`src/router/index.js`文件,设置路由模式和基础网页文件URL。 3. 前端同后端之间,使用Restful的接口通讯,我们需要在`src/common/config.js`文件中设置这个API基础地址。 4. `src/store/auth.module.js`文件,UPDATE_USER方法中,有一处BUG。这一处问题同大多数后端配合中体现不出来,但同Rust这种严格的后端配合,会导致用户无法编辑个人资料。需要修改函数中的数据提交部分。 本文不做教学,相信大家也没兴趣看教学,所以具体的修改、配置方法都略过。我们只来看编译的过程。 首先是在鲲鹏服务器上: ```bash $ time yarn build yarn run v1.21.0 $ cross-env BABEL_ENV=dev vue-cli-service build ⠇ Building for production... File Size Gzipped dist/js/chunk-vendors.dcd10e99.js 172.11 KiB 58.87 KiB dist/js/chunk-52fabea2.8d54de7e.js 35.24 KiB 10.74 KiB dist/js/app.5e06b01a.js 19.41 KiB 5.56 KiB dist/js/chunk-8ab06c80.0691ea34.js 13.74 KiB 4.53 KiB dist/js/chunk-fee37f4e.962c341f.js 5.50 KiB 1.80 KiB dist/js/chunk-2d0b3289.4ecc4d5e.js 3.68 KiB 1.17 KiB dist/js/chunk-2d217357.a492fd23.js 3.20 KiB 1.15 KiB dist/js/chunk-704fe663.1eb6fa07.js 2.94 KiB 1.14 KiB dist/js/chunk-2d0d6d35.3e7333df.js 2.92 KiB 1.15 KiB dist/js/chunk-2d2086b7.9e172229.js 2.57 KiB 1.12 KiB dist/precache-manifest.d3673753a0030f7 1.66 KiB 0.55 KiB ef7bc3318dfea2bf8.js dist/service-worker.js 0.95 KiB 0.54 KiB dist/js/chunk-2d0bd246.4cab42ec.js 0.58 KiB 0.40 KiB dist/js/chunk-2d0f1193.580d39c8.js 0.57 KiB 0.40 KiB dist/js/chunk-2d0cedd0.a32d9392.js 0.53 KiB 0.38 KiB dist/js/chunk-2d207fb4.d8669731.js 0.48 KiB 0.35 KiB dist/js/chunk-2d0bac97.f736bcaf.js 0.48 KiB 0.35 KiB Images and other types of assets omitted. DONE Build complete. The dist directory is ready to be deployed. INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html Done in 23.57s. real 0m23.889s user 0m19.927s sys 0m0.965s ``` 为了减少篇幅,日志信息删除了个别源码格式的警告信息。一切都很正常,没有什么不兼容的现象发生。再来看看Intel的表现: ```bash $ time yarn build yarn run v1.21.0 $ cross-env BABEL_ENV=dev vue-cli-service build ⠇ Building for production... File Size Gzipped dist/js/chunk-vendors.dcd10e99.js 172.11 KiB 58.87 KiB dist/js/chunk-52fabea2.c34912e7.js 35.24 KiB 10.74 KiB dist/js/app.348e5166.js 19.35 KiB 5.53 KiB dist/js/chunk-8ab06c80.3fa2c5de.js 13.74 KiB 4.53 KiB dist/js/chunk-fee37f4e.55893266.js 5.50 KiB 1.80 KiB dist/js/chunk-2d0b3289.7b3abcbe.js 3.68 KiB 1.17 KiB dist/js/chunk-2d217357.e2eb7ad1.js 3.20 KiB 1.14 KiB dist/js/chunk-704fe663.25958462.js 2.94 KiB 1.14 KiB dist/js/chunk-2d0d6d35.ddc63fdd.js 2.92 KiB 1.15 KiB dist/js/chunk-2d2086b7.35190064.js 2.57 KiB 1.12 KiB dist/precache-manifest.049c26b68ee8b9c 1.55 KiB 0.53 KiB 603c4f04a6cd8e3c8.js dist/service-worker.js 0.95 KiB 0.54 KiB dist/js/chunk-2d0bd246.b354ca7f.js 0.58 KiB 0.40 KiB dist/js/chunk-2d0f1193.12c44839.js 0.57 KiB 0.40 KiB dist/js/chunk-2d0cedd0.ea949ae4.js 0.53 KiB 0.38 KiB dist/js/chunk-2d207fb4.245dc458.js 0.48 KiB 0.35 KiB dist/js/chunk-2d0bac97.74e3c28d.js 0.48 KiB 0.35 KiB Images and other types of assets omitted. DONE Build complete. The dist directory is ready to be deployed. INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html Done in 16.27s. real 0m16.548s user 0m20.435s sys 0m1.223s ``` 到底多一颗核心和4倍的内存,编译速度快了约30%。 考虑到双方的硬件配置,我主观觉得算两家平手说得上公平。 #### 后端开发 首先也是自[仓库](https://github.com/TatriX/realworld-rust-rocket)下载源码。 接着要做这样几件事情: 1. 后端原来只有一组Restful接口的服务,我们需要让它能直接提供静态文件服务,否则还要另外配置一个静态文件服务来容纳刚才编译好的前端文件。我修改了`src/lib.rs`程序,增加了处理函数,将`./static/`文件夹开放为静态文件路径。 2. 将Vue前端编译的结果,是在Vue项目的`dist/`路径中,完整拷贝到当前项目的`static/`目录。 3. 根据代码仓库网页的说明,配置PostgreSQL服务,和使用Diesel ORM工具初始化realworld数据库。 接下来我们使用Rust的开发模式,来做一个试运行: ```bash $ cargo run ``` 在Intel的服务器上,这个过程一切正常。而在鲲鹏上,不幸的事情发生了,发生了报错,日志过程很长,下面只截取了错误信息的一行: ```bash undefined reference to `rust_crypto_util_fixed_time_eq_asm' ``` 不出乎意料,这是跟汇编有关的东西。 技术发展到今天,在万能的Linux帮助下,大多的异构系统都能蓬勃发展,前提是,如果不涉及到汇编部分。 为了测试能够继续,根据出错信息,检查rust-crypto工具箱源码。 很快发现,在`rust-crypto-0.2.36/src/util_helpers.c`文件中,只有X64/ARM两种架构的汇编语言。鲲鹏虽然也是ARM,但是aarch64架构,对应的汇编语言代码并不存在。 因为我对汇编也不熟悉,所以开始在互联网上各种搜索。功夫不负有心人,经过大概一小时的努力,在网上找到了一段本函数aarch64的实现: ```c #ifdef __aarch64__ uint32_t rust_crypto_util_fixed_time_eq_asm(uint8_t* lhsp, uint8_t* rhsp, size_t count) { if (count == 0) { return 1; } uint8_t result = 0; asm( " \ 1: \ \ ldrb w4, [%1]; \ ldrb w5, [%2]; \ eor w4, w4, w5; \ orr %w0, %w0, w4; \ \ add %w1, %w1, #1; \ add %w2, %w2, #1; \ subs %w3, %w3, #1; \ bne 1b; \ " : "+&r" (result), "+&r" (lhsp), "+&r" (rhsp), "+&r" (count) // all input and output : // input : "w4", "w5", "cc" // clobbers ); return result; } #endif ``` 把这段代码放进`util_helpers.c`,再次执行`cargo run`,realworld运行成功了。 ![](http://files.17study.com.cn/201912/hw/realworld1.png) 随便发一个博文: ![](http://files.17study.com.cn/201912/hw/realworld2.png) 试运行正常,接下来让两家再次展现一下编译的实力吧。 首先请鲲鹏出场: ```bash $ time cargo build --release Compiling libc v0.2.66 Compiling autocfg v0.1.7 Compiling cfg-if v0.1.10 ...(略去)... Compiling rocket_cors v0.4.0 Compiling rocket_contrib v0.4.2 Compiling realworld v0.4.0 (/home/andrew/dev/realworld-rust-rocket) Finished release [optimized] target(s) in 18m 28s real 18m28.666s user 18m8.184s sys 0m10.982s ``` 一共是191个源码包,日志节省篇幅,只列出了其中的6个,编译耗费时间18分28秒,生成的可执行文件8.4M。 ```bash $ ls -lh target/release/ total 15M drwxrwxr-x 64 andrew andrew 4.0K Dec 10 09:27 build drwxrwxr-x 2 andrew andrew 32K Dec 10 09:45 deps drwxrwxr-x 2 andrew andrew 4.0K Dec 10 09:27 examples drwxrwxr-x 2 andrew andrew 4.0K Dec 10 09:27 incremental -rw-rw-r-- 1 andrew andrew 1.2K Dec 10 09:45 librealworld.d -rw-rw-r-- 2 andrew andrew 6.2M Dec 10 09:45 librealworld.rlib -rwxrwxr-x 2 andrew andrew 8.4M Dec 10 09:45 realworld -rw-rw-r-- 1 andrew andrew 1.2K Dec 10 09:45 realworld.d ``` 接着来看Intel的速度: ```bash $ time cargo build --release Compiling libc v0.2.65 Compiling autocfg v0.1.7 Compiling cfg-if v0.1.10 ...(略去)... Compiling rocket_cors v0.4.0 Compiling rocket_contrib v0.4.2 Compiling realworld v0.4.0 (/home/andrew/dev/rust/realworld-rust-rocket) Finished release [optimized] target(s) in 7m 39s real 7m39.088s user 15m1.126s sys 0m13.470s $ ls -lh target/release/ total 16M drwxrwxr-x 64 andrew andrew 4.0K Dec 10 01:38 build drwxrwxr-x 2 andrew andrew 36K Dec 10 01:45 deps drwxrwxr-x 2 andrew andrew 4.0K Dec 10 01:38 examples drwxrwxr-x 2 andrew andrew 4.0K Dec 10 01:38 incremental -rw-rw-r-- 1 andrew andrew 1.3K Dec 10 01:45 librealworld.d -rw-rw-r-- 2 andrew andrew 6.3M Dec 10 01:45 librealworld.rlib -rwxrwxr-x 2 andrew andrew 9.0M Dec 10 01:45 realworld -rw-rw-r-- 1 andrew andrew 1.3K Dec 10 01:45 realworld.d ``` (手动扶额)Intel只花了略超鲲鹏1/3的时间完成编译,生成的可执行文件9M。这一次,鲲鹏大比分落后了。 #### 性能测试工具 互联网应用不同于桌面应用,为了完整对性能进行检测,我们需要一款独立的测试工具。 Ubuntu的软件源中已经集成了一些,不过我选用了Wrk,从源码开始编译一遍,这样,C/C++的编译速度和兼容情况,也就顺便看到了。 以下步骤执行在鲲鹏服务器上: ```bash # 下载源码 $ git clone https://github.com/wg/wrk # 编译 $ cd wrk $ time make Building LuaJIT... make[1]: Entering directory '/home/andrew/dev/wrk/obj/LuaJIT-2.1.0-beta3' ==== Building LuaJIT 2.1.0-beta3 ==== make -C src make[2]: Entering directory '/home/andrew/dev/wrk/obj/LuaJIT-2.1.0-beta3/src' HOSTCC host/minilua.o HOSTLINK host/minilua DYNASM host/buildvm_arch.h HOSTCC host/buildvm.o HOSTCC host/buildvm_asm.o HOSTCC host/buildvm_peobj.o HOSTCC host/buildvm_lib.o HOSTCC host/buildvm_fold.o HOSTLINK host/buildvm BUILDVM lj_vm.S ASM lj_vm.o CC lj_gc.o BUILDVM lj_ffdef.h CC lj_err.o CC lj_char.o BUILDVM lj_bcdef.h CC lj_bc.o ... gcc -I. -Icrypto/include -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF crypto/ec/ec_check.d.tmp -MT crypto/ec/ec_check.o -c -o crypto/ec/ec_check.o crypto/ec/ec_check.c gcc -I. -Icrypto/include -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF crypto/ec/ec_curve.d.tmp -MT crypto/ec/ec_curve.o -c -o crypto/ec/ec_curve.o crypto/ec/ec_curve.c ... gcc -I. -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF ssl/t1_trce.d.tmp -MT ssl/t1_trce.o -c -o ssl/t1_trce.o ssl/t1_trce.c gcc -I. -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF ssl/tls13_enc.d.tmp -MT ssl/tls13_enc.o -c -o ssl/tls13_enc.o ssl/tls13_enc.c gcc -I. -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF ssl/tls_srp.d.tmp -MT ssl/tls_srp.o -c -o ssl/tls_srp.o ssl/tls_srp.c ...(略去)... make depend && make _build_engines make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Nothing to be done for '_build_engines'. make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' created directory `/home/andrew/dev/wrk/obj/lib/engines-1.1' *** Installing engines make depend && make _build_programs make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Nothing to be done for '_build_programs'. make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' *** Installing runtime programs install apps/openssl -> /home/andrew/dev/wrk/obj/bin/openssl install ./tools/c_rehash -> /home/andrew/dev/wrk/obj/bin/c_rehash make[1]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' CC src/wrk.c CC src/net.c CC src/ssl.c CC src/aprintf.c CC src/stats.c CC src/**Script**.c CC src/units.c CC src/ae.c CC src/zmalloc.c CC src/http_parser.c LUAJIT src/wrk.lua LINK wrk real 3m31.575s user 3m6.914s sys 0m22.147s ``` 这个小工具包含了大量的c语言源码和部分汇编代码,少量的lua脚本当做数据文件存在。 鲲鹏的编译过程耗时3分32秒。 接着是Intel至强: ```bash $ time make Building LuaJIT... make[1]: Entering directory '/home/andrew/dev/wrk/obj/LuaJIT-2.1.0-beta3' ==== Building LuaJIT 2.1.0-beta3 ==== make -C src make[2]: Entering directory '/home/andrew/dev/wrk/obj/LuaJIT-2.1.0-beta3/src' HOSTCC host/minilua.o HOSTLINK host/minilua DYNASM host/buildvm_arch.h HOSTCC host/buildvm.o HOSTCC host/buildvm_asm.o HOSTCC host/buildvm_peobj.o HOSTCC host/buildvm_lib.o HOSTCC host/buildvm_fold.o HOSTLINK host/buildvm BUILDVM lj_vm.S ASM lj_vm.o CC lj_gc.o BUILDVM lj_ffdef.h CC lj_err.o CC lj_char.o ...... CC="gcc" /usr/bin/perl crypto/aes/asm/aesni-mb-x86_64.pl elf crypto/aes/aesni-mb-x86_64.s gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -c -o crypto/aes/aesni-mb-x86_64.o crypto/aes/aesni-mb-x86_64.s CC="gcc" /usr/bin/perl crypto/aes/asm/aesni-sha1-x86_64.pl elf crypto/aes/aesni-sha1-x86_64.s gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -c -o crypto/aes/aesni-sha1-x86_64.o crypto/aes/aesni-sha1-x86_64.s ...... gcc -I. -Icrypto/include -Iinclude -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF crypto/asn1/x_pkey.d.tmp -MT crypto/asn1/x_pkey.o -c -o crypto/asn1/x_pkey.o crypto/asn1/x_pkey.c gcc -I. -Icrypto/include -Iinclude -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF crypto/asn1/x_sig.d.tmp -MT crypto/asn1/x_sig.o -c -o crypto/asn1/x_sig.o crypto/asn1/x_sig.c ...(略)... make depend && make _build_programs make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Nothing to be done for '_build_programs'. make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' *** Installing runtime programs install apps/openssl -> /home/andrew/dev/wrk/obj/bin/openssl install ./tools/c_rehash -> /home/andrew/dev/wrk/obj/bin/c_rehash make[1]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' CC src/wrk.c CC src/net.c CC src/ssl.c CC src/aprintf.c CC src/stats.c CC src/**Script**.c CC src/units.c CC src/ae.c CC src/zmalloc.c CC src/http_parser.c LUAJIT src/wrk.lua LINK wrk real 3m48.678s user 3m9.735s sys 0m37.941s andrew@ebs-31389:~/dev/wrk$ ``` 咦?3分48秒,居然略慢于鲲鹏。 其实认真分析一下,我觉得也是正常的。从官方公布的数据来看,鲲鹏的核心性能并不差,如果任务比较小,在内存中就能完成,那鲲鹏的速度显然就应当快。 而如果任务比较大,导致了大量的磁盘交换,我们选用的这台低配鲲鹏就撑不住了,再加上只有一颗核心的配置。最终的结果,任务越大,这台鲲鹏被落下就越多。 好了,测试工具准备完毕,我们分别对两台服务器的Web服务性能做一个测试吧。相信对于云端主机来讲,这个才是硬杠杠啊。 把两边的服务器都启动起来: ![](http://files.17study.com.cn/201912/hw/realworld-server.png) 首先来看鲲鹏的测试数据: ```bash $ wrk -t1 -c50 -d5s --latency --timeout 2s http://localhost:8000/index.html Running 5s test @ http://localhost:8000/index.html 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.97ms 1.04ms 4.58ms 57.80% Req/Sec 8.79k 228.58 9.09k 70.00% Latency Distribution 50% 1.97ms 75% 2.87ms 90% 3.41ms 99% 3.78ms 44400 requests in 5.08s, 120.47MB read Socket errors: connect 0, read 44400, write 0, timeout 0 Requests/sec: 8745.40 Transfer/sec: 23.73MB ``` 两台服务器的配置区别比较大,公平起见,我们在参数上只启用了一个线程。连接数选择50个,我想对于一个小型网站,这可能是比较典型的数量。 鲲鹏服务器在5.08秒的测试中,承受了44400个请求,一共发送数据120.47MB。 接着Intel站上前台: ```bash $ wrk -t1 -c50 -d5s --latency --timeout 2s http://localhost:8000/index.html Running 5s test @ http://localhost:8000/index.html 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 32.32ms 5.00ms 64.20ms 75.23% Req/Sec 1.52k 176.64 1.91k 72.00% Latency Distribution 50% 31.52ms 75% 34.64ms 90% 38.67ms 99% 48.04ms 7552 requests in 5.00s, 21.97MB read Socket errors: connect 0, read 7550, write 0, timeout 0 Requests/sec: 1509.75 Transfer/sec: 4.39MB ``` 哇咔咔...有没有惊掉眼球?真是没有对比就没有伤害。在5秒的测试中,Intel Xeon只承受了7552个请求,发送数据21.97MB。作为一个老牌的CPU大厂,Intel你丢不丢“芯”? `index.html`只是一个静态页面,我们换一个动态链接再来看看,这样数据库的部分也就能一起体现了。 下面测试的就是一个Restful接口,用于列出文章内容的: ```bash $ curl http://127.0.0.1:8000/api/articles {"articles":[{"author":{"bio":null,"email":"andrewwang@sina.com","id":1,"image":null,"username":"andrew"},"body":"苹果公司近日宣布,新的Mac Pro和Pro Display XDR将于12月10日开始订购。新的Mac Pro起价为5,999美元(约合人民币42202元),而Pro Display XDR起价为4,999美元(约合人民币35167元)。\n5,999美元的基本款Mac Pro搭载了8核Intel Xeon处理器,256 GB SSD,32GB RAM等配置。最高配置支持28核Intel Xeon处理器,4块Vega显卡,1.5TB的超大容量内存。而其首次引入的Apple Afterburner加速卡,这使得Mac Pro可实时解码最多达 3 条 8K ProRes RAW 视频流和最多达 12 条 4K ProRes RAW 视频流。\n而新款的 Pro Display XDR则配置了分辨率达到6016 x 3384的32英寸显示屏,这款显示器的参数达到了静态 1000nit / 峰值 1600nits 的亮度,同时还有着1000000:1的对比度。如果用户追求低反射率和低眩光,可以多加1000美元(约合人民币7000元)给显示器添加一个“纳米纹理”哑光涂层。","createdAt":"2019-12-10T02:05:38.758Z","de**Script**ion":"nothing but test","favorited":false,"favoritesCount":0,"id":1,"slug":"test-sqzxyV","tagList":[],"title":"test","updatedAt":"2019-12-10T02:05:38.758Z"}],"articlesCount":1} ``` 同样,先看看鲲鹏的表现: ```bash $ wrk -t1 -c50 -d5s --latency --timeout 2s http://127.0.0.1:8000/api/articles Running 5s test @ http://127.0.0.1:8000/api/articles 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 40.03ms 2.37ms 41.82ms 99.15% Req/Sec 1.25k 11.16 1.27k 66.00% Latency Distribution 50% 40.21ms 75% 40.48ms 90% 40.75ms 99% 41.34ms 6199 requests in 5.00s, 8.92MB read Socket errors: connect 0, read 6198, write 0, timeout 0 Requests/sec: 1239.54 Transfer/sec: 1.78MB ``` Intel登场: ```bash $ wrk -t1 -c50 -d5s --latency --timeout 2s http://127.0.0.1:8000/api/articles Running 5s test @ http://127.0.0.1:8000/api/articles 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 62.63ms 9.18ms 96.45ms 72.66% Req/Sec 787.82 95.11 1.01k 72.00% Latency Distribution 50% 62.32ms 75% 68.07ms 90% 74.42ms 99% 85.25ms 3921 requests in 5.01s, 5.64MB read Socket errors: connect 0, read 3920, write 0, timeout 0 Requests/sec: 783.09 Transfer/sec: 1.13MB ``` 发的帖子太短了,数据流很小,时间全消耗在链接上了,有点体现不出来实力。....不过...鲲鹏再次大比分领先。同时你还别忘了,这台测试的鲲鹏服务器,内存只有Intel竞品的1/4,以及1/2CPU核心。 从这些数据,我想负责任的说,国产芯片和国产服务器的云端实力,稳了。 #### 容器体验 以容器为基础的微服务已经是今天服务器运营的主流模式。在这方面鲲鹏服务器应当说很幸运。毕竟只是在Linux内核就能实现的cgroup和namespace比需要模拟指令集的VM技术容易的多。可说是与生俱来。 但问题也并不这么简单,比如你随便搜索一个应用: ```bash # docker search mariadb NAME DESCRIPTION STARS OFFICIAL AUTOMATED mariadb MariaDB is a community-developed fork of MyS… 3135 [OK] bitnami/mariadb Bitnami MariaDB Docker Image 107 [OK] linuxserver/mariadb A Mariadb container, brought to you by Linux… 95 toughiq/mariadb-cluster Dockerized Automated MariaDB Galera Cluster … 41 [OK] colinmollenhour/mariadb-galera-swarm MariaDb w/ Galera Cluster, DNS-**Base**d service… 26 [OK] panubo/mariadb-galera MariaDB Galera Cluster 23 [OK] lsioarmhf/mariadb ARMHF **Base**d Linuxserver.io image of mariadb 18 mariadb/server MariaDB Server is a modern data**Base** for mode… 18 [OK] webhippie/mariadb Docker images for MariaDB 16 [OK] bianjp/mariadb-alpine Lightweight MariaDB docker image with Alpine… 12 [OK] centos/mariadb-101-centos7 MariaDB 10.1 SQL data**Base** server 10 severalnines/mariadb A homogeneous MariaDB Galera Cluster image t… 7 [OK] centos/mariadb-102-centos7 MariaDB 10.2 SQL data**Base** server 6 tutum/mariadb Base docker image to run a MariaDB data**Base** … 4 wodby/mariadb Alpine-**Base**d MariaDB container image with or… 4 [OK] circleci/mariadb CircleCI images for MariaDB 3 [OK] tiredofit/mariadb-backup MariaDB Backup image to backup MariaDB/MySQL… 2 [OK] kitpages/mariadb-galera MariaDB with Galera 2 [OK] rightctrl/mariadb Mariadb with Galera support 2 [OK] jonbaldie/mariadb Fast, simple, and lightweight MariaDB Docker… 2 [OK] demyx/mariadb Non-root Docker image running Alpine Linux a… 0 ccitest/mariadb CircleCI test images for MariaDB 0 [OK] jelastic/mariadb An image of the MariaDB SQL data**Base** server … 0 ansibleplaybookbundle/mariadb-apb An APB which deploys RHSCL MariaDB 0 [OK] alvistack/mariadb Docker Image Packaging for MariaDB 0 ``` 嗯嗯,看起来跟x86服务器没有什么区别。但是想拉一个下来试试?亲,你还是算了吧。容器映像中打包的可是二进制的执行文件,是要区别CPU的,拉下来你也用不了。 看起来,这个世界还没有为ARM服务器的到来做好准备,至少也应当像APT/YUM之类的工具一样,自动区分架构来准备资源池不是? 所以想要找适合鲲鹏服务器的映像文件,需要手动添加关键字搜索。 当前Docker Hub有两个分类适用64位ARM服务器架构,分别是`aarch64`和`arm64v8`,其中`aarch64`分类已经不再使用,新上架的映像都归类到了`arm64v8`。但因为兼容性考虑,`aarch64`分类原有映像仍然都存在。换句话说,如果两个分类都有你需要的映像,你应当优先选择`arm64v8`分类下面的。 接着,第二个小问题就来了,使用这两个关键字来搜索: ```bash # docker search aarch64 NAME DESCRIPTION STARS OFFICIAL AUTOMATED homeassistant/aarch64-homeassistant 15 aarch64/ubuntu Ubuntu is a Debian-**Base**d Linux operating sys… 14 homeassistant/aarch64-hassio-supervisor 5 balenalib/aarch64-ubuntu-node This image is part of the balena.io **Base** ima… 1 balenalib/aarch64-alpine-python This image is part of the balena.io **Base** ima… 1 resin/aarch64-alpine-python This repository is deprecated. 1 resin/aarch64-python This repository is deprecated. 1 resin/aarch64-alpine-buildpack-deps This repository is deprecated. 0 resin/aarch64-ubuntu-golang This repository is deprecated. 0 resin/aarch64-fedora-buildpack-deps This repository is deprecated. 0 resin/aarch64-fedora-python This repository is deprecated. 0 resin/aarch64-alpine-openjdk This repository is deprecated. 0 balenalib/aarch64-alpine-node This image is part of the balena.io **Base** ima… 0 resin/aarch64-fedora-golang This repository is deprecated. 0 resin/aarch64-golang This repository is deprecated. 0 resin/aarch64-fedora-openjdk This repository is deprecated. 0 resin/aarch64-alpine-golang This repository is deprecated. 0 balenalib/aarch64-node This image is part of the balena.io **Base** ima… 0 balenalib/aarch64-debian-node This image is part of the balena.io **Base** ima… 0 resin/aarch64-fedora-node This repository is deprecated. 0 resin/aarch64-node This repository is deprecated. 0 resin/aarch64-ubuntu-python This repository is deprecated. 0 balenalib/aarch64-ubuntu-golang This image is part of the balena.io **Base** ima… 0 resin/aarch64-alpine-node This repository is deprecated. 0 balenalib/aarch64-debian-python This image is part of the balena.io **Base** ima… 0 # docker search arm64v8 NAME DESCRIPTION STARS OFFICIAL AUTOMATED arm64v8/alpine A minimal Docker image **Base**d on Alpine Linux… 45 arm64v8/ubuntu Ubuntu is a Debian-**Base**d Linux operating sys… 30 arm64v8/debian Debian is a Linux distribution thats compos… 21 arm64v8/nginx Official build of Nginx. 18 arm64v8/python Python is an interpreted, interactive, objec… 18 arm64v8/nextcloud A safe home for all your data 15 arm64v8/node Node.js is a JavaScript-**Base**d platform for s… 12 arm64v8/openjdk OpenJDK is an open-source implementation of … 9 arm64v8/redis Redis is an open source key-value store that… 7 arm64v8/php While designed for web development, the PHP … 7 arm64v8/mongo MongoDB document data**Base**s provide high avai… 6 arm64v8/golang Go (golang) is a general purpose, higher-lev… 6 arm64v8/docker Docker in Docker! 6 arm64v8/ros The Robot Operating System (ROS) is an open … 5 arm64v8/buildpack-deps A collection of common build dependencies us… 3 arm64v8/busybox Busybox **Base** image. 3 arm64v8/ruby Ruby is a dynamic, reflective, object-orient… 2 arm64v8/tomcat Apache Tomcat is an open source implementati… 2 arm64v8/erlang Erlang is a programming language used to bui… 1 arm64v8/wordpress The WordPress rich content management system… 1 arm64v8/joomla Joomla! is an open source content management… 0 arm64v8/haxe Haxe is a modern, high level, static typed p… 0 troyfontaine/arm64v8_min-alpinelinux Minimal 64-bit ARM64v8 Alpine Linux Image 0 arm64v8/hylang Hy is a Lisp dialect that translates express… 0 arm64v8/perl Perl is a high-level, general-purpose, inter… 0 ``` 你会发现,比起来丰饶的x86社区,arm服务器的资源实在是少的可怜,而且大多是基础性的映像。 这恐怕是没有办法的事情了,用户少,资源也就少。好在,有了基础映像,自己添加应用,也没有什么不能接受。想一想,哪一个关键应用你敢直接完整使用社区映像? 同样因为Docker Hub在架构区分上准备不足的问题,现在使用`docker search`命令直接搜索映像已经很不方便了。因为除了映像的关键字,我们又多了一个架构的限定。 所以建议直接到对应网页搜索: /hub.docker.com/u/aarch64>还有 /hub.docker.com/u/arm64v8> 下面我们试验用arm64v8分类的Docker映像,执行一个常见的WordPress应用,来体验一下鲲鹏服务器在容器方面的表现。 WordPress应用需要两个容器,一个部署了Apache/PHP和WordPress本身;另外还需要一个MySQL兼容的数据库,我们使用其社区开源版本MariaDB。 首先把映像拉下来: ```bash # docker pull arm64v8/wordpress Using default tag: latest latest: Pulling from arm64v8/wordpress a4f3dd4087f9: Pull complete e54f8c59bdae: Pull complete 6ae19fe01dd7: Pull complete 939a6e43e07c: Pull complete c7bc60aacdf3: Pull complete c1e1bedfb04e: Pull complete 8332b8441264: Pull complete 012fa89ca2bc: Pull complete c0dfb13372af: Pull complete 3cbeabdc4805: Pull complete 8e492268eedf: Pull complete db2ddafb0478: Pull complete a02565d248c3: Pull complete 7e8259639516: Pull complete 3efb6c94a4c9: Pull complete 77f6d83e6c7a: Pull complete 3601f2116010: Pull complete 4ec7c7d8a180: Pull complete b834909e81a9: Pull complete 72c2b2a88763: Pull complete d77d0ee96a04: Pull complete Digest: sha256:28e7d4a7b3ba0d55f151e718e84de5f186b0c65adaac2da9005a64cb6ad82de8 Status: Downloaded newer image for arm64v8/wordpress:latest # docker pull arm64v8/mariadb Using default tag: latest latest: Pulling from arm64v8/mariadb 6531af355894: Pull complete 82f7942d2fb7: Pull complete fdce94e690d5: Pull complete a96a89ada1c3: Pull complete 9bcef89e3002: Pull complete 06115e3e56a0: Pull complete 5712e955a6d4: Pull complete afd2dc9f5e8f: Pull complete 07ef8ef990de: Pull complete ae55899885f1: Pull complete 9c16c03a30d3: Pull complete 5f1431dbf111: Pull complete 58fecc1c9379: Pull complete 1c94839aac8b: Pull complete Digest: sha256:c67410e8deeb6e165c867131c7669155e43b532d441120df2bbf4f12a3710cd7 Status: Downloaded newer image for arm64v8/mariadb:latest ``` 随后先执行数据库映像,执行的时候在环境参数设定root账号密码、新建普通用户账号、还有为WordPress单独建一个库。我们不会在宿主机操作数据库,所以就不再映射端口出来了: ```bash # docker run -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=wpuserpassword -e MYSQL_DATABASE=wordpressdb --name wordpressdb -d arm64v8/mariadb 51e6d43af860e00c45cce81bed1918ae3c2a5c91bdcfca18203b0486d8f2783d ``` 接着执行WordPress容器,在环境变量中把刚才创建的普通数据库用户账号传递进去,同时把WordPress容器连接到刚才的数据库容器,这是为了让它们之间直接使用Docker内部网络连接起来,不用通过宿主机中转: ```bash # docker run -e WORDPRESS_DB_USER=wpuser -e WORDPRESS_DB_PASSWORD=wpuserpassword -e WORDPRESS_DB_NAME=wordpressdb -p 8080:80 --**Link** wordpressdb:mysql --name wordpress -d arm64v8/wordpress 83cad21cf2a057273440cb919885c061b77711b4baedb64fd7bff683a1a30177 ``` 这样,一个微型博客就搭建好了。开浏览器来看看: ![](http://files.17study.com.cn/201912/hw/wp-setup.png) 先要进行一些必要的基础设置,只是站点信息类的。因为刚才执行容器的时候就把数据库的设置传递了进去,所以数据库设置的Web页面根本就不会出现。 设置完成打开网站首页: ![](http://files.17study.com.cn/201912/hw/wp-home.png) 工作的挺好。 整个搭建的过程,除了两个映像的名字多了arm64v8前缀,其它从配置、到使用,跟X86服务器没有任何不同。 #### 总结 几个体量不大的应用,显然无法代表全部,但自认为比通常的测试软件表现的要更丰满。 说一说自己的体会: * 鲲鹏920表现亮眼,很有惊喜。在常见的云端企业级应用中完全能担当主力。 * 常规的脚本语言、虚机类语言完全不用担心兼容性,上手即用,开机就能跑。 * 常规的C/C++/Rust这些编译到二进制的语言,也不用有压力,我相信99%的企业级应用都能兼容。 * 涉及到汇编的部分,aarch64汇编是个障碍,无论是自己新研发还是社区找资源,都需要慢慢积累。 * 容器社区资源明显不足,对依赖社区资源的小团队稍有打击,对企业应用影响不大。 试用完成,最后祝TaiShan服务器和鲲鹏芯片越来越好。
  • [C/C++] arm64 和 aarch64 指令集是同一回事吗?
    AArch64是Armv8-A架构(https://en.wikipedia.org/wiki/ARM_architecture#ARMv8-A)中引入的64位状态。向后兼容Armv7-A和先前的32位Arm架构的32位状态称为AArch32。因此,用于64位ISA的GNU gcc 是aarch64。Linux内核社区选择将其内核端口称为该体系结构arm64,而不是aarch64,因此这是一些arm64用法的来源。据我所知,用于aarch64的Apple后端称为arm64,而LLVM 编译器社区开发的后端称为aarch64(因为它是64位ISA的规范名称),后来将arm64和 aarch64 两者合并,现在的后端称为aarch64。 。因此aarch64和arm64指的是同一件事。
  • [交流分享] 开源ETL工具Kettle如何在华为泰山ARM服务器运行
    ETL工具Kettle是基于JAVA开发的,可是该工具包含的启动脚本并不包含aarch64架构的版本。请问如果我在CentOS 7.6安装Oracle jdk for ARM64 或者 OpenJDK for ARM后,可否手动修改kettle的启动脚本,让kettle指定java for arm运行吗?如果不行,那有什么替代工具,或者使ARM Linux兼容 x86 Linux?case `uname -s` in  AIX) ARCH=`uname -m` case $ARCH in ppc) LIBPATH=$CURRENTDIR/../libswt/aix/ ;; ppc64) LIBPATH=$CURRENTDIR/../libswt/aix64/ ;; *) echo "I'm sorry, this AIX platform [$ARCH] is not yet supported!" exit ;; esac ;; SunOS)  ARCH=`uname -m` case $ARCH in i[3-6]86) LIBPATH=$CURRENTDIR/../libswt/solaris-x86/ ;; *) LIBPATH=$CURRENTDIR/../libswt/solaris/ ;; esac ;; Darwin)     ARCH=`uname -m` if [ -z "$IS_KITCHEN" ]; then OPT="-XstartOnFirstThread $OPT" fi case $ARCH in x86_64) if $($_PENTAHO_JAVA -version 2>&1 | grep "64-Bit" > /dev/null )                             then   LIBPATH=$CURRENTDIR/../libswt/osx64/                             else   LIBPATH=$CURRENTDIR/../libswt/osx/                             fi ;; i[3-6]86) LIBPATH=$CURRENTDIR/../libswt/osx/ ;; *) echo "I'm sorry, this Mac platform [$ARCH] is not yet supported!" echo "Please try starting using 'Data Integration 32-bit' or" echo "'Data Integration 64-bit' as appropriate." exit ;; esac ;; Linux)             if [ -f /sbin/ldconfig ]; then               LDCONFIG=/sbin/ldconfig             else               LDCONFIG=ldconfig             fi             HASWEBKITGTK=`$LDCONFIG -p | grep webkitgtk-1.0`             export LIBWEBKITGTK="$HASWEBKITGTK"             export JavaScriptCoreUseJIT=0             if [ -z "$HASWEBKITGTK" ] && [ "1" != "$SKIP_WEBKITGTK_CHECK" ]; then               echo "#######################################################################"               echo "WARNING:  no libwebkitgtk-1.0 detected, some features will be unavailable"               echo "    Consider installing the package with apt-get or yum."               echo "    e.g. 'sudo apt-get install libwebkitgtk-1.0-0'"               echo "#######################################################################"             fi     ARCH=`uname -m` case $ARCH in x86_64) if $($_PENTAHO_JAVA -version 2>&1 | grep "64-Bit" > /dev/null )                                 then   LIBPATH=$CURRENTDIR/../libswt/linux/x86_64/                                 else   LIBPATH=$CURRENTDIR/../libswt/linux/x86/                                 fi ;; i[3-6]86) LIBPATH=$CURRENTDIR/../libswt/linux/x86/ ;; ppc) LIBPATH=$CURRENTDIR/../libswt/linux/ppc/ ;; ppc64) LIBPATH=$CURRENTDIR/../libswt/linux/ppc64/ ;; *) echo "I'm sorry, this Linux platform [$ARCH] is not yet supported!" exit ;; esac ;; FreeBSD) # note, the SWT library for linux is used, so FreeBSD should have the # linux compatibility packages installed     ARCH=`uname -m` case $ARCH in x86_64) LIBPATH=$CURRENTDIR/../libswt/linux/x86_64/ echo "I'm sorry, this FreeBSD platform [$ARCH] is not yet supported!" exit ;; i[3-6]86) LIBPATH=$CURRENTDIR/../libswt/linux/x86/ ;; ppc) LIBPATH=$CURRENTDIR/../libswt/linux/ppc/ echo "I'm sorry, this FreeBSD platform [$ARCH] is not yet supported!" exit ;; *) echo "I'm sorry, this FreeBSD platform [$ARCH] is not yet supported!" exit ;; esac ;; HP-UX)  LIBPATH=$CURRENTDIR/../libswt/hpux/ ;; CYGWIN*) ./Spoon.bat exit ;; *)  echo Spoon is not supported on this hosttype : `uname -s` exit ;; esac
  • [问题求助] 求ServiceComb支撑ARM服务器版本。
    1、求助ServiceComb支撑ARM版本,并且切换后对证书的重新签发的处理。谢谢