Featured image of post BTRFS checksum benchmark

BTRFS checksum benchmark

Выбираем алгоритм хеширования BTRFS

Введение

Переезжаю на новое железо и на чистый SSD. Встал перед выбором алгоритма хеширования для свежей файловой системы BTRFS. Здесь представлен скрипт, которым я определил что на моём конкретном процессоре бытсрее.

Тело

Искал в начале утилиту для проведения замеров производительности разных алгоритмов хеширования. Зачем? Дело в том, что, каким бы быстрым не был алгоритм на бумаге, если у меня нет аппаратной его поддержки на процессоре - он будет медленным. А как понять что у меня есть на процессоре? В спецификации в сети не нашёл информацию.

Попал на утилиту rhash, у которой есть ключ --speed ним то я и попробовал замерять производительность, но результаты у blake2b и crc32c были практически идентичны, что показалось странным. В итоге пришёл к вот такому скрипту.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/env bash
set -eo pipefail

TMPFS="$(mktemp -d)"
SIZE="5G"

mount -t tmpfs -o size="${SIZE}" tmpfs "${TMPFS}"
cd "${TMPFS}"
fallocate -l 4GiB btrfs

for CSUM in crc32c xxhash sha256 blake2; do
  mkfs.btrfs -f -d single -m single --csum "${CSUM}" btrfs
  mount btrfs /mnt
  echo "
  cd /mnt
  echo "info: ${CSUM}"
  dd if=/dev/urandom of=test bs=4M count=1024 2>/dev/null
  rm -f test
  for i in {1..1000}; do
    dd if=/dev/urandom of="\$i" bs=4M count=1 2>/dev/null
  done
  rm -f /mnt/*
  " | /usr/bin/time bash
  umount /mnt
done

umount "${TMPFS}"
rm -rf "${TMPFS}"

Что здесь происходит?

  1. Создаётся tmpfs временная точка монтирования на 5 ГБ (прямо в оперативной памяти, чтобы не зависет от SSD/HDD)
  2. Создаётся внутри файл на 4 ГБ и по очереди форматируется в BTRFS с разными алгоритмами хеширования
  3. Для каждого алгоритма выполняется запись файлов в двух режимах
    1. Один большой файл на 4 ГБ
    2. 1000 файлов по 4 МБ
  4. По итогу команда time выводит время выполнения скрипта

Так вот на моём 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz лучший результат показал старый, добрый crc32c (~35 секунд), а остальные были по ~52 секунды.

Licensed under Apache License, Version 2.0
Обновлено Dec 01, 2023 14:46 +0200
All rights reserved
Создано при помощи Hugo
Тема Stack, дизайн Jimmy