Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Speed is too slow. Is there any way to speed up? #4

Open
yjcn opened this issue Jan 18, 2020 · 5 comments
Open

Speed is too slow. Is there any way to speed up? #4

yjcn opened this issue Jan 18, 2020 · 5 comments
Labels
enhancement New feature or request

Comments

@yjcn
Copy link

yjcn commented Jan 18, 2020

I try to build qBittorrent. It works well, but speed is very slow. Travis CI only uses 9 min, github action uses 1h18m
Github Action arm64
图片
Travis CI arm64
图片

@uraimo uraimo added the enhancement New feature or request label Jan 18, 2020
@uraimo
Copy link
Owner

uraimo commented Jan 18, 2020

Thanks for pointing this out with real numbers @yjcn , since the general slowness is a problem for me too in other projects.
Right now github provides only x86_64 vms to run CI jobs and this projects can only encapsulate your jobs in an aarch64 emulated environment (via QEmu) to provide something similar to a real arm64 system.

On the other hand, Travis CI runs the jobs on real arm64 hardware (servers with a 32 cores X-Gene 3 APM883832-X3 cpu) and that's the reason for the difference you see right now.

It could be interesting to see if they have dedicated machines for ppc64le and s390x too, and if not to compare the numbers and see if, on similar underlying hosts, there is space for improvements tweaking some parameters/options in QEmu.

Refs:
https://travis-ci.community/t/apt-addon-does-not-work-for-armhf-on-arm64/6374
https://travis-ci.community/c/environments/multi-cpu-arch
https://docs.travis-ci.com/user/multi-cpu-architectures/

@uraimo
Copy link
Owner

uraimo commented Jan 19, 2020

Just for future reference, the 18.04 distro is using 2.11+dfsg-1ubuntu7.20 that should include a performance fix for 1740219 (should be included in 2.11+dfsg-1ubuntu6, included for sure in 2.12 onwards), that affects every release of qemu after 2.10.

References:
multiarch/qemu-user-static#35
https://forums.gentoo.org/viewtopic-t-1077144-start-0-postdays-0-postorder-asc-highlight-.html
https://bugs.launchpad.net/qemu/+bug/1740219
https://gist.github.com/Liryna/10710751
https://wiki.ubuntu.com/ARM/RootfsFromScratch/QemuDebootstrap
https://wiki.gentoo.org/wiki/Crossdev_qemu-static-user-chroot

@elijahr
Copy link
Collaborator

elijahr commented Sep 12, 2020

@yjcn we recently released some changes that speed up builds. The architectures are still emulated, but if some of your build time is spent installing dependencies you can look into using the new install and githubToken input parameters.

As for faster compilation, you could try installing ccache in the container and persisting ccache's outputs between builds using actions/cache@v2, something like this:

name: Build

on:
  push:
    branches: [ '*' ]
    tags: [ '*' ]
  pull_request:
    branches: [ '*' ]

jobs:
  # Build for Linux aarch64, ppc64le, etc
  build_linux_other_archs:
    name: Build ubuntu-18.04
    runs-on: ubuntu-latest

    strategy:
      matrix:
        include:
          - arch: aarch64
          - arch: ppc64le

    steps:
      - name: Setup cache
        uses: actions/cache@v2
        with:
          path: |
            ~/.ccache
          key: build_ubuntu-18.04_${{ matrix.arch }}

      - uses: actions/checkout@v2.1.0

      - name: Build
        id: build
        uses: uraimo/run-on-arch-action@v2.0.4
        with:
          arch: ${{ matrix.arch }}
          distro: ubuntu18.04

          # Upload docker image to your project's public package registry
          githubToken: ${{ github.token }}

          # Create cached/volume directories on host
          setup: |
            mkdir -p ~/.ccache

          # Mount cached directories in the container for faster builds
          dockerRunArgs: |
            --volume "${HOME}/.ccache:/root/.ccache"

          # Install ccache and gcc/g++ symlinks in the container
          install: |
            apt-get update -q -y
            apt-get install build-essential ccache -q -y
            /usr/sbin/update-ccache-symlinks
            echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc

          # compile things in the container
          run: |
            ...

I can't guarantee this will give a performance gain, but maybe.

@bradbell
Copy link

bradbell commented Jan 25, 2022

I am trying to run on ppc64le using this package; see
https://github.com/coin-or/CppAD/blob/master/.github/workflows/uraimo_arch_linux.yml

The current state of the job is

 Build on alpine_latest ppc64le
Started 46m 46s ago
Waiting for a runner to pick up this job...

It this just slow, or is there some other problem ?

I cancelled the job with it got to the following state:

 Build on alpine_latest ppc64le
Started 9h 23m 5s ago
Waiting for a runner to pick up this job...

@uraimo
Copy link
Owner

uraimo commented Feb 7, 2022

@bradbell github issue, thanks for reporting, I'll keep an eye out to understand if it's becoming more frequent for other projects too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants