Skip to content

Benchmarks

Sam edited this page Sep 11, 2024 · 5 revisions

Comparing against;

Config Files

CrabFetch Config
modules = [
    "hostname",
    "underline:16",
    "cpu",
    "gpu",
    "memory",
    "swap",
    "mounts",
    "host",
    "displays",
    "os",
    "packages",
    "desktop",
    "terminal",
    "shell",
    "editor",
    "uptime",
    "locale",
    "player",
    "initsys",
    "processes",
    "localip",
    "space",
    "colors",
    "bright_colors"
]
unknown_as_text = false
separator = " > "
title_color = "bright_magenta"
title_bold = true
title_italic = false
decimal_places = 2
inline_values = false
underline_character = ''
color_character = "   "
color_margin = 0
color_use_background = true
use_os_color = true
segment_top = "{color-white}[======------{color-brightmagenta} {name} {color-white}------======]"
segment_bottom = "{color-white}[======------{color-brightmagenta} {name_sized_gap} {color-white}------======]"
progress_left_border = '['
progress_right_border = ']'
progress_progress = '='
progress_empty = ' '
progress_target_length = 20
use_ibis = false
use_version_checksums = false
suppress_errors = true
percentage_color_thresholds = [
    "75:brightgreen",
    "85:brightyellow",
    "90:brightred"
]


[ascii]
display = true
colors = ["bright_magenta"]
margin = 4
side = "left"

[hostname]
title = ""
format = "{color-title}{username}{color-white}@{color-title}{hostname}"

[cpu]
title = "CPU"
format = "{name} {arch} ({core_count}c {thread_count}t) @ {max_clock_ghz} GHz"
remove_trailing_processor = true

[gpu]
amd_accuracy = true
ignore_disabled_gpus = true
title = "GPU"
format = "{vendor} {model} ({vram})"

[memory]
title = "Memory"
format = "{used} / {max} ({percent})"

[swap]
title = "Swap"
format = "{used} / {total} ({percent})"


[mounts]
title = "Disk ({mount})"
format = "{space_used} used of {space_total} ({percent}) [{filesystem}]"
ignore = []

[host]
title = "Host"
format = "{host} ({chassis})"
newline_chassis = false
chassis_title = "Chassis"
chassis_format = "{chassis}"

[displays]
title = "Display ({make} {model})"
format = "{width}x{height} @ {refresh_rate}Hz ({name})"
scale_size = false

[os]
title = "Operating System"
format = "{distro} ({kernel})"
newline_kernel = false
kernel_title = "Kernel"
kernel_format = "Linux {kernel}"

[packages]
title = "Packages"
format = "{count} ({manager})"
ignore = []

[desktop]
title = "Desktop"
format = "{desktop} ({display_type})"

[terminal]
title = "Terminal"
format = "{name} {version}"

[shell]
title = "Shell"
format = "{name} {version}"
show_default_shell = false

[uptime]
title = "Uptime"

[editor]
title = "Editor"
format = "{name} {version}"
fancy = true

[locale]
title = "Locale"
format = "{language} ({encoding})"

[player]
title = "Player ({player})"
format = "{track} by {track_artists} ({album}) [{status}]"
ignore = []

[battery]
title = "Battery {index}"
format = "{percentage}%"

[initsys]
title = "Init System"
format = "{name} {version}"

[processes]
title = "Total Processes"

[datetime]
title = "Date Time"
format = "%H:%M:%S on %e %B %G"

[localip]
title = "Local IP ({interface})"
format = "{addr}"
FastFetch Config
{
  "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
  "display": {
    "separator": " > "
  },
  "general": {
    "detectVersion": true
  },
  "modules": [
    "title",
    "separator",

    "cpu",
    "gpu",
    "memory",
    "swap",
    "disk",
    "host",
    "chassis",
    "display",

    "os",
    "kernel",
    "packages",
    "wm",
    "terminal",
    "shell",
    "editor",
    "uptime",
    "locale",
    "media",
    "initsystem",
    "processes",
    "localip",

    "break",
    "colors"
  ]
}
NeoFetch Config
print_info() {
    info title
    info underline
    info "CPU" cpu
    info "GPU" gpu
    info "Memory" memory
    info "Disk" disk
    info "Host" model
    info "Resolution" resolution
    
    info "OS" distro
    info "Kernel" kernel
    info "Packages" packages
    info "DE" de
    info "Terminal" term
    info "Shell" shell
    info "Uptime" uptime
    info "Locale" locale  # This only works on glibc systems.
    info "Song" song
    info cols
}
title_fqdn="off"
kernel_shorthand="on"
distro_shorthand="off"
os_arch="on"
uptime_shorthand="on"
memory_percent="off"
memory_unit="mib"
package_managers="on"
shell_path="off"
shell_version="on"
speed_type="bios_limit"
speed_shorthand="off"
cpu_brand="on"
cpu_speed="on"
cpu_cores="logical"
cpu_temp="off"
gpu_brand="on"
gpu_type="all"
refresh_rate="off"
gtk_shorthand="off"
gtk2="on"
gtk3="on"
public_ip_host="http://ident.me"
public_ip_timeout=2
de_version="on"
disk_show=('/')
disk_subtitle="mount"
disk_percent="on"
music_player="auto"
song_format="%artist% - %album% - %title%"
song_shorthand="off"
mpc_args=()
bold="on"
underline_enabled="on"
underline_char="-"
separator=":"
block_range=(0 15)
color_blocks="on"
block_width=3
block_height=1
col_offset="auto"
bar_char_elapsed="-"
bar_char_total="="
bar_border="on"
bar_length=15
bar_color_elapsed="distro"
bar_color_total="distro"
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
image_backend="ascii"
image_source="auto"
ascii_distro="auto"
ascii_bold="on"
image_loop="off"
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
crop_mode="normal"
crop_offset="center"
image_size="auto"
gap=3
yoffset=0
xoffset=0
background_color=
stdout="off"

Methodology & Scripts

All benchmarks we're done using the "hyperfine" tool, version 1.18.0

All benchmarks were done on the same system running the following specs;

  • CPU: Ryzen 7 5800HS
  • GPU: Built-in APU
  • Memory: 22.88 GiB
  • Form-Factor: Laptop

Some benchmarks were performed in live-boot environments, these benchmarks are noted as such.

To transfer exact binaries and config files between systems, everything was put on a singular USB stick with a script used to place in config files into their default positions. From there the binaries on those USB sticks were ran, meaning the same version and builds were running at the same time. Another script simply runs the binaries to ensure that they work and have correct configs, and a finals script was used to run the hyperfine benchmark.

create-configs.sh
#!/bin/sh
ROOT_DIR=$(dirname `realpath $0`)

mkdir ~/.config/CrabFetch
mkdir ~/.config/fastfetch
mkdir ~/.config/neofetch

cp c-crabfetch ~/.config/CrabFetch/config.toml
cp c-fastfetch ~/.config/fastfetch/config.jsonc
cp c-neofetch ~/.config/neofetch/config.conf
verify.sh
#!/bin/sh

chmod +x ./crabfetch
chmod +x ./fastfetch
chmod +x ./neofetch

echo CrabFetch:
./crabfetch
echo FastFetch:
./fastfetch
echo NeoFetch:
./neofetch
bench.sh
#!/bin/sh
./hyperfine "./crabfetch" "./fastfetch" "./neofetch" -N --warmup 50

Results

Arch Linux
songbird% ./bench.sh          
Benchmark 1: ./crabfetch
  Time (mean ± σ):       5.7 ms ±   0.8 ms    [User: 2.1 ms, System: 3.2 ms]
  Range (min … max):     4.2 ms …   9.4 ms    579 runs
 
Benchmark 2: ./fastfetch
  Time (mean ± σ):       7.7 ms ±   0.9 ms    [User: 1.1 ms, System: 5.9 ms]
  Range (min … max):     5.8 ms …  10.7 ms    444 runs
 
Benchmark 3: ./neofetch
  Time (mean ± σ):     254.1 ms ±   4.4 ms    [User: 164.5 ms, System: 93.4 ms]
  Range (min … max):   247.0 ms … 261.3 ms    11 runs
 
Summary
  ./crabfetch ran
    1.35 ± 0.23 times faster than ./fastfetch
   44.62 ± 5.94 times faster than ./neofetch
songbird% crabfetch 
             ~!                 sam@songbird
            ^YY^                ――――――――――――――――
           :JYYY^               CPU > AMD Ryzen 7 5800HS with Radeon Graphics x86_64 (8c 16t) @ 4.46 GHz
          :JYYYYY^              GPU > Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (512 MB)
         :JYYYYYYY^             Memory > 1.03 GB / 24.57 GB (4.2%)
        ^JYYYYYYYYY^            Swap > 0.00 KB / 32.21 GB (0%)
       ~YYYYYYYYYYYY~           Disk (/) > 5.53 GB used of 469.10 GB (1.18%) [ext4]
      ~YYYYY?!!?YYYYY!          Disk (/boot) > 161.29 MB used of 1.07 GB (15.05%) [vfat]
     !YYYYY!    ~YYYYY7.        Disk (/efi) > 242.00 KB used of 1.07 GB (0.02%) [vfat]
   .7YYYYYJ      ?YYYYY?.       Host > VivoBook_ASUSLaptop M1603QA_M1603QA (Notebook)
  .?YYYYYJ7      7JJYYYYJ:      Display (AUO AUO459D) > 1920x1200 @ 60Hz (eDP-1)
 ^JY?7~^..        ..^~7?YY^     Operating System > Arch Linux (6.10.9-arch1-1)
^7~:                    :~7^    Packages > 468 (pacman)
                                Desktop > Hyprland (wayland)
                                Terminal > kitty 0.36.2
                                Shell > zsh 5.9
                                Editor > Unknown
                                Uptime > 14m 37s
                                Locale > en_GB (UTF-8)
                                Unknown module: player
                                Init System > systemd 256.5
                                Total Processes > 262
                                Local IP (wlan0) > 192.168.1.248
                                
                                                        
                                                        
songbird% 

Clone this wiki locally