Migrate x86 applications to Yitian 710-based ECS instances (g8y, c8y, r8y) for improved compute, storage, and network performance.
Background
What are YiTian ECS instances?
YiTian ECS instances are ECS instances based on the Yitian 710 ARM architecture. They use chip-level fast-path acceleration to enhance compute, storage, and network performance. They suit scenarios such as cloud-native applications, video encoding and decoding, high-performance computing (HPC), CPU-based machine learning, and game services.
Instance families based on the Yitian 710 include g8y, c8y, and r8y. For instance types and performance metrics, see:
Why migrate?
YiTian ECS instances use the ARM architecture, which differs from x86. To deploy x86 source code on a YiTian instance, you must recompile it and apply architecture-specific optimizations.
Migration steps
Migrating an application from x86 to YiTian involves two steps:
-
Pre-migration preparation
Plan the operating system, base software, and hardware resources. Check your code for x86-specific assembly instructions or hardware dependencies. Verify ARM versions of third-party libraries and run compatibility tests.
-
Software compilation and migration
Install the appropriate compiler and software versions for your programming language, then recompile.
Migration scenarios
Software migration typically involves two scenarios:
-
Source code software: Software you developed or enhanced based on open source projects. The languages fall into two categories:
-
Compiled languages: Languages such as C++ and Go compile into architecture-specific binaries and require recompilation after migration. See Make/CMake build files and C/C++ language migration.
-
Interpreted languages: Languages such as Java and Python produce architecture-independent bytecode and can theoretically run cross-architecture. However, if a native library is involved—for example, a Java application calling a C dynamic-link library through JNI—the application becomes architecture-dependent and must be recompiled. See Java language migration and Python language migration.
-
-
Open source software: Software downloaded from open source communities without modifications, or software included in your OS ecosystem. Most open source software already supports the YiTian ARM platform and can be installed directly from your OS package manager. See Open source software migration.
Migration procedure
Prepare the required environment resources, including the ECS instance, operating system, and base software, then follow this procedure:
Step 1: Create a YiTian ECS instance
See Create a custom instance. Note the following parameters:
|
Parameter |
Description |
|
Instance type |
|
|
Image |
|
Step 2: Migrate software
The following table lists recommended versions for compilers, runtime libraries, and applications. Install as needed.
|
Category |
Software |
Recommended version |
Description |
|
Compiler |
GCC |
gcc 10.2.1 |
Use GCC 10 or later for significant performance improvements. |
|
LLVM |
LLVM 13/clang 13 |
|
|
|
Glibc |
glibc 2.32 |
None |
|
|
JDK |
Dragonwell 11 or OpenJDK 11 |
Dragonwell is preferred for better performance and support. |
|
|
Golang |
go 1.18+ |
The Go SDK is continuously optimized for ARM. Use the latest version:
|
|
|
Python |
3.8 |
Python 2.7 reached EOL on January 1, 2020. Python 3.6 reached EOL on December 23, 2022. Use Python 3.7 or later. |
|
|
PHP |
7.4+ |
Community-supported |
|
|
Container |
K8s |
K8s 1.22 Containerd 1.5.0+ |
Community-supported |
|
Web application |
Nginx |
Use the version included with the OS. |
Maintained by the OS distributor |
|
httpd |
Use the version included with the OS. |
Maintained by the OS distributor |
|
|
NodeJS |
Use the version included with the OS. |
Maintained by the OS distributor |
|
|
Database |
MySQL |
Use the version included with the OS. |
Maintained by the OS distributor |
|
Redis |
Use the version included with the OS. |
Maintained by the OS distributor |
|
|
Big data |
Hadoop |
Hadoop 3.3.1 |
Community-supported |
|
Spark |
Spark 3.2 |
Community-supported |
|
|
Hive |
Hive 3.1 |
Community-supported |
|
|
ElasticSearch |
ES 7.12 |
Community-supported |
|
|
Others |
Gromacs |
Latest version |
Community-supported |
|
BWA |
Latest version |
Community-supported |
|
|
Gatk |
4.3.0.0 |
Community-supported |
Step 3: Compile and build
Compile and build your software based on the following guides:
-
Source code migration
-
Open source software migration
Use open source software such as Nginx, MySQL, Redis, TensorFlow, and PyTorch on YiTian ECS instances.
References
Check the CPU architecture
Run uname -m or arch to check the CPU architecture. The output varies by architecture:
-
ARM: `aarch64`
[ t@iUf682 xxx ~]# uname -m aarch64 [ t@iUf682 xxx ~]# arch aarch64 -
x86: `x86_64`
[root@iZbp144worxxx : ~]# uname -m x86_64 [root@iZbp144worxxx : ~]# arch x86_64
Check detailed CPU information
Run lscpu to view detailed CPU information. The output varies by architecture:
-
ARM:
[root@iZuf682t1xxx ~]# lscpu Architecture: aarch64 Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per cluster: 4 Socket(s): 1 Cluster(s): 1 NUMA node(s): 1 Vendor ID: ARM BIOS Vendor ID: Alibaba Cloud Model: 1 Model name: Neoverse-N1 BIOS Model name: virt-rhel7.6.0 Stepping: r3p1 BogoMIPS: 50.00 NUMA node0 CPU(s): 0-3 Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs -
x86:
[ @iZbp14x ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 16 On-line CPU(s) list: 0-15 Thread(s) per core: 2 Core(s) per socket: 8 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 106 Model name: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.90GHz Stepping: 6 CPU MHz: 2899.998 BogoMIPS: 5799.99 Hypervisor vendor: KVM Virtualization type: full L1d cache: 48K L1i cache: 32K L2 cache: 1280K L3 cache: 49152K NUMA node0 CPU(s): 0-15 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves wbnoinvd arat avx512vbmi avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid fsrm arch_capabilities
Check OS information
Run cat /proc/version to check the OS and compiler version. The output varies by architecture:
-
x86:
[root@iZbp144worxxx ~]# cat /proc/version Linux version 4.19.91-26.1.al7.x86_64 (mockbuild@x86-003.build.alibaba.cm10) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)) #1 SMP Tue Jul 26 17:52:28 CST 2022 -
ARM:
[root@iZuf682t ~]# cat /proc/version Linux version 5.10.134-12.al8.aarch64 (mockbuild@r75e11320.cm10.tbsite.net) (gcc (GCC) 10.2.1 20200825 (Alibaba 10.2.1-3 2.32), GNU ld version 2.35-12.2.al8) #1 SMP Tue Sep 6 07:11:41 UTC 2022