Docker 中的 GitLab runner - tmpfs/ramdisk 非常慢(与 HDD 相比没有加速)

问题描述 投票:0回答:0

我需要为特定类型的作业大幅加速 I/O,并想为此使用

tmpfs
。我发现了另一个SO问题和接受的答案,在CI配置中手动安装
tmpfs
(通过
before_script
)需要在特权模式下运行GitLab一点也不快。

我还发现了海登少校的另一篇博文使用 ramdisk 获得更快的 GitLab runners 在运行器配置中使用

[runners.docker.tmpfs]
选项,但我也没有看到这种方法有任何加速。

我尝试过的另一件事是在主机上创建一个 tmpfs 挂载点并将其挂载到 GitLab 运行器的容器,然后将其配置为在运行器实例容器中使用,但同样,根本没有加速。 我无法获得超过 60 MB/s 的写入速度。

基于 Hayden 的方法,我通过 Docker 运行的 GitLab runner 的配置是:

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "Pre-calibration"
  output_limit = 16384
  url = "https://..."
  id = 39
  token = "..."
  token_obtained_at = 2023-02-27T10:21:22Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
# The goal is to have the builds and cache dir also in RAM, once it's working
#  builds_dir = "/ramdisk"
#  cache_dir = "/ramdisk/cache"
  environment = ["DOCKER_DRIVER=overlay2"]
  [runners.custom_build_dir]
    enabled = true
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    memory = "128m"
    cpus = "120"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock"]
    shm_size = 0
    [runners.docker.tmpfs]
        "/ramdisk" = "rw,exec"

这是

.gitlab-ci.yml

variables:
  DOCKER_DRIVER: overlay2

pre-calibration:
  script:
    - pwd
    - df -h
    - ls -al /ramdisk
    - time dd if=/dev/zero of=/ramdisk/1G.dat bs=1G count=1 oflag=dsync
    - time cp /ramdisk/1G.dat /ramdisk/1G_copy.dat
  tags:
    - pre-calibration

在下面你可以看到从

/dev/zero
/ramdisk
的写入速度,也显示为
tmpfs
挂载以及从
/ramdisk
/ramdisk
通过
cp
的写入速度约为 60MB/s,这是更多或更低的硬盘驱动器速度,与 RAM 的性能相去甚远。

$ pwd
/builds/tgal/pre-calibration-runner

$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
overlay                            394G  301G   76G  80% /
tmpfs                               64M     0   64M   0% /dev
tmpfs                              252G     0  252G   0% /sys/fs/cgroup
shm                                 64M     0   64M   0% /dev/shm
/dev/mapper/ubuntu--vg-ubuntu--lv  394G  301G   76G  80% /builds
tmpfs                              252G     0  252G   0% /ramdisk
tmpfs                               51G  3.5M   51G   1% /run/docker.sock

$ ls -al /ramdisk
total 4
drwxrwxrwt 2 root root   40 Feb 27 12:41 .
drwxr-xr-x 1 root root 4096 Feb 27 12:41 ..

$ time dd if=/dev/zero of=/ramdisk/1G.dat bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 17.512 s, 61.3 MB/s
real    0m17.559s
user    0m0.000s
sys 0m8.726s

$ time cp /ramdisk/1G.dat /ramdisk/1G_copy.dat
real    0m16.593s
user    0m0.021s
sys 0m7.147s


Cleaning up project directory and file based variables
00:01
Job succeeded
docker gitlab gitlab-ci gitlab-ci-runner
© www.soinside.com 2019 - 2024. All rights reserved.