Tornando stripe_cache_size permanente

15

eu fiz

echo 8192 > /sys/block/md0/md/stripe_cache_size

para melhorar meu desempenho RAID, e isso ajudou muito.

Mas ainda não consigo descobrir como torná-lo permanente.

Eu estava tentando configurá-lo em /etc/rc.local - outros comandos são executados, mas foram sobrescritos para 256 em outros lugares ... Alguma dica?

BarsMonster
fonte
Reposicionando o comentário da minha resposta abaixo; Não tenho certeza se você o viu ou não, pois não tenho certeza de como o StackExchange funciona: Hmmm ... não tenho RAID, portanto é um tiro no escuro, mas você pode tentar 'grep -R 256 / etc / init.d 'e' grep -R stripe_cache_size /etc/init.d '?
Zpletan
1
O pacote sysfsutils ajudaria a corrigir seu problema?
zpletan

Respostas:

16

Adicione uma regra do udev, por exemplo /etc/udev/rules.d/60-md-stripe-cache.rules:

SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/stripe_cache_size", ATTR{md/stripe_cache_size}="8192"

Na verdade, eu não tentei isso, por isso pode não estar 100% correto (pode haver alguns erros de digitação), mas deve estar próximo. Verifique man udevpara entender mais.

Você também pode querer executar os seguintes comandos posteriormente para aplicar imediatamente a nova regra:

udevadm trigger
udevadm control --reload-rules
NeilBrown
fonte
1
Muito obrigado, esta é finalmente a solução perfeita :-) A sintaxe está ok, eu apenas tive que adicionar 60- antes do nome e regenerar ramfs.
BarsMonster
1
Obrigado. Não acredito que este ainda é um problema no Ubuntu 13.10. Apenas passou de <10MB / se as paradas completas para> 100MB / s enquanto copiava de um RAID criptografado para outro, apenas alterando o tamanho do cache de distribuição para um valor muito mais generoso.
frostschutz
Para que fique claro para outras pessoas: em pelo menos sistemas modernos do Ubuntu (17.04 no meu caso), possivelmente em outros, é necessário reconstruir o seu initramfs ("sudo update-initramfs -u") após criar esta nova regra ou não será realmente entra em vigor automaticamente.
Bryan Henry
1

Apenas para expandir no último post; o script abaixo funciona para mim. Apenas troque seus detalhes entre os "<...>". Desfrutar!


#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#################NOTE######################
##  You are limited by CPU and memory too #
##  <Your Name> <Date of Modification>    #
##  stripe cache size and read-ahead      #
###########################################
echo 16384 > /sys/block/<Your RAID5 or 6 Volume>/md/stripe_cache_size
blockdev --setra 16384 /dev/<Your RAID5 or 6 Volume>

exit 0
DanglingPointer
fonte
3
Não diga "Apenas para expandir a última postagem", porque as respostas geralmente são classificadas por votos, portanto é possível que sua resposta possa aparecer acima daquela a que você está se referindo. Consulte a postagem pelo nome dos autores. É muito mais claro.
Warren Hill
0

Eu também estou tentando descobrir isso. Coloquei o meu em rc.local e sem sorte. Eu o inicio manualmente após o login. Suponho que você possa escrever um script para lidar com isso e colocá-lo em "Aplicativos de inicialização", mas isso não ajuda em nada se você não estiver conectado ao gnome.


fonte
É um servidor ubuntu, então não há sorte aqui.
BarsMonster
0

O pacote sysfsutils ajudaria a corrigir seu problema?

RESPOSTA ORIGINAL:

Não consigo descobrir como comentar sua pergunta; Acho que vou editar esta resposta à medida que aprender mais sobre o seu problema.

Você pode postar (ou colar a bin, se for longa) a saída de

grep -R md0 /etc/init.d
zpletan
fonte
Nada foi encontrado lá.
BarsMonster
Hmmm ... Eu não tenho RAID, então é um tiro no escuro, mas você pode tentar 'grep -R 256 /etc/init.d' e 'grep -R stripe_cache_size /etc/init.d'?
Zpletan
ambos não retornaram resultados.
BarsMonster
0

Não tenho uma resposta real para você, mas talvez você possa tentar criar um script de inicialização simples e inicial. Crie um arquivo em / etc / init com a extensão .conf. No arquivo colocado:

start on started tty1

exec echo 8192 > /sys/block/md0/md/stripe_cache_size

Meu pensamento é que isso deve executar o comando na hora em que o terminal foi iniciado, provavelmente na mesma hora em que você executa o comando.

user1974
fonte
Eu já tentei colocar isso no script de inicialização (rc.local) e isso não ajudou. Além disso, como este é o Ubuntu Server, nenhum terminal pode estar lá após a reinicialização, o AFAIK.
BarsMonster
Eu estava propondo isso como uma alternativa ao método rc.local. Talvez isso comece mais tarde. Eu realmente não sei.
user1974
Quanto à falta de terminais, não faço ideia. Por que um servidor não teria ttys após uma inicialização? Queremos dizer a mesma coisa quando dizemos terminal? Independentemente disso, você pode usar um serviço diferente para acionar o comando, basta alterartty1
user1974
0

Total de fotos no escuro, pois não tenho uma configuração RAID 5 para testar: talvez adicione uma linha com

chmod -w /sys/block/md0/md/stripe_cache_size

em rc.local para remover as permissões de gravação depois de configuradas. Talvez isso impeça que seja alterado em outro lugar?

Ramon
fonte
Boa ideia, mas parece que algo está ferrado no processo de inicialização do Ubuntu: -S Vou tentar publicar hoje.
precisa saber é o seguinte
Não ajudou: - |
precisa saber é o seguinte
0

Acrescentar

echo 8192 > /sys/block/mdX/md/stripe_cache_size

para /etc/rc.local.

Thermionix
fonte
Veja a pergunta - esta é a primeira coisa que tentei e não funcionou, aparentemente o md-driver foi reinicializado ou algo após a execução do rc.local.
BarsMonster
-1

Esta página sugere que o tamanho da faixa (ou largura) deveria ter sido configurado quando o fs foi configurado. Talvez tunefs possa ajudar aqui?

TGM
fonte
2
É uma coisa totalmente diferente. O tamanho do cache de distribuição é uma configuração para o driver do kernel MD na memória do cache de distribuição.
precisa saber é o seguinte