Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian

Neste artigo vou fazer uma comparação entre os escalonadores BFQ e MQ-Deadline para acesso ao disco nas distribuições Arch Linux e Debian 13 para mostrar a diferença de desempenho de acordo com o hardware de disco usado.

[ Hits: 1.917 ]

Por: Sidnei Serra em 07/09/2025 | Blog: https://www.youtube.com/channel/UCRgokKtNlttdmg2RJEa2VYw


Teste no Arch Linux - kernel 6.16.0-arch2-1



Para saber o schedule em uso no seu sistema (o ativo estará entre colchetes):

cat /sys/block/sda/queue/scheduler
none mq-deadline kyber [bfq]

Teste no Arch:
Teste no Arch Linux - kernel 6.16.0-arch2-1
Sequenciais (grandes arquivos): o BFQ venceu, tanto em leitura (+19 MB/s) quanto em escrita (+4 MB/s). Aleatórios (arquivos pequenos e multitarefa): o BFQ também ficou na frente, tanto em throughput quanto em IOPS e ainda com redução da latência. O ganho não é gigante mas consistente em todos os testes. Com isso, NESSE disco o BFQ se saiu melhor que o mq-deadline em todas as métricas:
  • Mais rápido em sequenciais (bom para vídeos).
  • Mais eficiente em aleatórios (bom para multitarefa/interatividade).

Ou seja: nesse HDD de 5900 rpm o BFQ parece ser a melhor escolha para o uso cotidiano, incluindo edição leve de vídeos e tarefas de desktop.
Página anterior     Próxima página

Páginas do artigo
   1. O que são escalonadores e o hardware usado nos testes
   2. Teste no Arch Linux - kernel 6.16.0-arch2-1
   3. Teste no Debian 13 - kernel 6.12.41+deb13-amd64
   4. O script de teste e como escolher o escalonador a ser usado
Outros artigos deste autor

Mitigação - O que é e quando é "seguro" desabilitar

O que é o THP na configuração de RAM do Linux e quando desabilitá-lo

Conciliando o uso da ZRAM e SWAP em disco na sua máquina

Máquina perereca - até onde é possível o uso de Linux?

Leitura recomendada

Modem no Notebook Toshiba 1135-S1553

Super Desktop com Ubuntu Linux 9.10

Traceroute com ICMP e TCP

Instalação KickStart

Instalando e configurando um dock igual ao Mac Leopard no KDE

  
Comentários
[1] Comentário enviado por Zoiudo em 14/09/2025 - 18:43h

Uma correção para o script desse artigo:

#!/bin/bash
# Script para comparar mq-deadline vs bfq automaticamente
# Requer: sudo, fio

DISK="/dev/sda" # ajuste se necessário
WORKDIR="$HOME/teste-scheduler"
RESULTS="$WORKDIR/resultados.txt"
SUMMARY="$WORKDIR/resumo.txt"

mkdir -p "$WORKDIR"
rm -f "$RESULTS" "$SUMMARY"
echo "== Teste iniciado em $(date) ==" > "$SUMMARY"


rodar_teste() {
local sched="$1"

# Ajusta o scheduler
sudo tee /sys/block/sda/queue/scheduler <<< "$sched" >/dev/null
echo ">> Scheduler: $sched" | tee -a "$RESULTS" >&2

local total_bw=0

for test in \
"seqread:--rw=read --bs=1M --size=2G --runtime=30s --time_based" \
"seqwrite:--rw=write --bs=1M --size=2G --runtime=30s --time_based" \
"randread:--rw=randread --bs=4k --size=1G --runtime=30s --time_based" \
"randwrite:--rw=randwrite --bs=4k --size=1G --runtime=30s --time_based"
do
local name=${test%%:*}
local opts=${test#*:}

# Apaga arquivo anterior para garantir teste limpo
rm -f "$WORKDIR/testfile"

# Limpa cache antes de leituras seq
if [[ "$name" == "seqread" ]]; then
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
fi

echo "Executando $name..." | tee -a "$RESULTS" >&2

local bw=$(fio --name=$name $opts --numjobs=1 --filename="$WORKDIR/testfile" 2>&1 \
| grep "BW=" | awk -F'BW=' '{print $2}' | awk '{print $1}')

echo "$name: $bw" | tee -a "$RESULTS" >&2

# Converter para KB/s
local unit=$(echo "$bw" | grep -o '[KMG]iB/s')
local value=$(echo "$bw" | grep -o '^[0-9.]*')

local kb=0
case $unit in
KiB/s) kb=$(awk "BEGIN{printf \"%d\", $value}") ;;
MiB/s) kb=$(awk "BEGIN{printf \"%d\", $value*1024}") ;;
GiB/s) kb=$(awk "BEGIN{printf \"%d\", $value*1024*1024}") ;;
esac

total_bw=$((total_bw + kb))
done

echo "$sched total score (KB/s): $total_bw" >> "$SUMMARY"

# Somente o número vai para stdout
echo "$total_bw"
}


# Rodar para os dois schedulers
score_deadline=$(rodar_teste mq-deadline)
score_bfq=$(rodar_teste bfq)

echo "" >> "$SUMMARY"
if [ "$score_deadline" -gt "$score_bfq" ]; then
echo "Melhor scheduler para este sistema: mq-deadline" | tee -a "$SUMMARY"
else
echo "Melhor scheduler para este sistema: bfq" | tee -a "$SUMMARY"
fi

echo "== Teste concluído em $(date) ==" >> "$SUMMARY"
cat "$SUMMARY"


#
##
###
#### Conhecimento não vem de graça, valorize o aprendizado e a ajuda recebida! ####


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts