| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| |
| name: Tune Runner VM performance |
| description: tunes the GitHub Runner VM operation system |
| runs: |
| using: composite |
| steps: |
| - run: | |
| if [[ "$OSTYPE" == "linux-gnu"* ]]; then |
| # Ensure that reverse lookups for current hostname are handled properly |
| # Add the current IP address, long hostname and short hostname record to /etc/hosts file |
| echo -e "$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)\t$(hostname -f) $(hostname -s)" | sudo tee -a /etc/hosts |
| |
| # The default vm.swappiness setting is 60 which has a tendency to start swapping when memory |
| # consumption is high. |
| # Set vm.swappiness=1 to avoid swapping and allow high RAM usage |
| echo 1 | sudo tee /proc/sys/vm/swappiness |
| |
| # use "madvise" Linux Transparent HugePages (THP) setting |
| # https://www.kernel.org/doc/html/latest/admin-guide/mm/transhuge.html |
| # "madvise" is generally a better option than the default "always" setting |
| echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled |
| |
| # tune filesystem mount options, https://www.kernel.org/doc/Documentation/filesystems/ext4.txt |
| # commit=999999, effectively disables automatic syncing to disk (default is every 5 seconds) |
| # nobarrier/barrier=0, loosen data consistency on system crash (no negative impact to empheral CI nodes) |
| sudo mount -o remount,nodiscard,commit=999999,barrier=0 / |
| sudo mount -o remount,nodiscard,commit=999999,barrier=0 /mnt |
| # disable discard/trim at device level since remount with nodiscard doesn't seem to be effective |
| # https://www.spinics.net/lists/linux-ide/msg52562.html |
| for i in /sys/block/sd*/queue/discard_max_bytes; do |
| echo 0 | sudo tee $i |
| done |
| # disable any background jobs that run SSD discard/trim |
| sudo systemctl disable fstrim.timer || true |
| sudo systemctl stop fstrim.timer || true |
| sudo systemctl disable fstrim.service || true |
| sudo systemctl stop fstrim.service || true |
| fi |
| shell: bash |