[Tarantool-patches] [PATCH v1] test: add ARM at gitlab-ci

Alexander V. Tikhonov avtikhon at tarantool.org
Fri Dec 20 11:32:00 MSK 2019


Added ARM architecture for testing release and
debug Tarantool builds on Gitlab-CI.

Close #4270
---

Github: https://github.com/tarantool/tarantool/tree/avtikhon/gh-4270-travis-ci-arm
Issue: https://github.com/tarantool/tarantool/issues/4270

 .gitlab-ci.yml       | 13 +++++++++++++
 .travis.mk           | 12 ++++++++++++
 src/lib/core/fiber.c | 17 ++++++++++++++++-
 3 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3af5a3c8a..497f4e14c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,6 +3,8 @@ stages:
 
 variables:
   GITLAB_MAKE: "make -f .gitlab.mk"
+  DOCKER_ARM_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/testing/arm64v8-debian-buster:latest"
+  DOCKER_NETWORK: "--network=host"
 
 # Jobs templates
 
@@ -90,6 +92,17 @@ release_asan_clang8:
   script:
     - ${GITLAB_MAKE} test_asan_debian_no_deps
 
+release_arm:
+  stage: test
+  tags:
+    - test
+  variables:
+    DOCKER_IMAGE: "${DOCKER_ARM_IMAGE}"
+    DOCKER_OPTIONS: "${DOCKER_NETWORK}"
+    CMAKE_EXTRA_PARAMS: -DENABLE_BACKTRACE=OFF
+  script:
+    - ${GITLAB_MAKE} test_arm_debian_no_deps
+
 osx_13_release:
   <<: *release_only_definition
   <<: *vbox_definition
diff --git a/.travis.mk b/.travis.mk
index 42969ff56..1427d5b2f 100644
--- a/.travis.mk
+++ b/.travis.mk
@@ -24,6 +24,7 @@ asan: docker_test_asan_debian
 docker_%:
 	mkdir -p ~/.cache/ccache
 	docker run \
+		${DOCKER_OPTIONS} \
 		--rm=true --tty=true \
 		--volume "${PWD}:/tarantool" \
 		--volume "${HOME}/.cache:/cache" \
@@ -123,6 +124,17 @@ test_asan_debian_no_deps: build_asan_debian
 
 test_asan_debian: deps_debian deps_buster_clang_8 test_asan_debian_no_deps
 
+#######
+# ARM #
+#######
+
+qemu_arm_debian:
+	docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
+
+build_arm_debian: qemu_arm_debian docker_build_debian
+
+test_arm_debian_no_deps: qemu_arm_debian docker_test_debian_no_deps
+
 #######
 # OSX #
 #######
diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c
index 00ae8cded..6ef3c22db 100644
--- a/src/lib/core/fiber.c
+++ b/src/lib/core/fiber.c
@@ -43,7 +43,22 @@
 #include "trigger.h"
 
 #if ENABLE_FIBER_TOP
+#if !defined(__arm__) && !defined(__aarch64__) && !defined(__powerpc64__) && !defined(__PPC64__) && \
+    !defined(__powerpc__)
 #include <x86intrin.h> /* __rdtscp() */
+#elif defined(__aarch64__)
+static __inline__ unsigned long long __rdtscp(uint32_t *cpu_id)
+{
+       // System timer of ARMv8 runs at a different frequency than the CPU's.
+       // The frequency is fixed, typically in the range 1-50MHz.  It can be
+       // read at CNTFRQ special register.  We assume the OS has set up
+       // the virtual timer properly.
+       if (!cpu_id) { cpu_id = 0; }
+       int64_t virtual_timer_value;
+       __asm__ volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
+       return virtual_timer_value;
+}
+#endif
 
 static inline void
 clock_stat_add_delta(struct clock_stat *stat, uint64_t clock_delta)
@@ -109,7 +124,7 @@ cpu_stat_reset(struct cpu_stat *stat)
 static uint64_t
 cpu_stat_on_csw(struct cpu_stat *stat)
 {
-	uint32_t cpu_id;
+	uint32_t cpu_id = 0;
 	uint64_t delta, clock = __rdtscp(&cpu_id);
 
 	if (cpu_id == stat->prev_cpu_id) {
-- 
2.17.1



More information about the Tarantool-patches mailing list