Делаем stripe_cache_size постоянным


15

я сделал

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

улучшить мою производительность RAID, и это очень помогло.

Но я все еще не могу понять, как сделать его постоянным.

Я пытался установить его в /etc/rc.local - другие команды выполняются, но в других местах он был перезаписан на 256 ... Есть подсказки?


Повторное размещение комментария из моего ответа ниже; Я не уверен, видели ли вы это или нет, так как я не уверен, как работает StackExchange: Хммм ... У меня нет RAID, так что это довольно далеко, но вы можете попробовать 'grep -R 256 / etc / init.d 'и' grep -R stripe_cache_size /etc/init.d '?
zpletan

1
Поможет ли пакет sysfsutils решить вашу проблему?
zpletan

Ответы:


16

Добавьте правило udev, например /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"

Я на самом деле не пробовал это, так что это может быть не на 100% правильно (может быть, некоторые опечатки), но это должно быть близко. Проверьте, man udevчтобы понять больше.

Вы также можете выполнить следующие команды впоследствии, чтобы немедленно применить новое правило:

udevadm trigger
udevadm control --reload-rules

1
Огромное спасибо, это, наконец, идеальное решение :-) Синтаксис в порядке, мне просто нужно добавить 60- перед именем и восстановить ramfs.
BarsMonster

1
Благодарю. Я не могу поверить, что это все еще проблема в Ubuntu 13.10. Просто перешел с <10MB / s и завершил зависания до> 100MB / s при копировании с одного зашифрованного RAID на другой, просто изменив размер чередующегося кэша на гораздо более щедрое значение.
frostschutz

Просто для других это понятно: по крайней мере, на современных системах Ubuntu (17.04 в моем случае), возможно, на других, вам нужно перестроить ваши initramfs ("sudo update-initramfs -u") после создания этого нового правила, иначе оно не будет на самом деле вступают в силу автоматически.
Брайан Генри

1

Просто чтобы расширить на последний пост; сценарий внизу работает для меня. Просто поменяйте свои данные между "<...>". Наслаждайтесь!


#!/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

3
Не говорите «просто чтобы остановиться на последнем посте», потому что ответы обычно ранжируются по голосам, поэтому ваш ответ может оказаться выше того, на который вы ссылаетесь. Обратитесь к посту по имени автора. Это намного понятнее.
Уоррен Хилл

0

Я также пытаюсь понять это. Я положил свой в rc.local и не повезло. Я запускаю его вручную после входа в систему. Я полагаю, что вы могли бы написать скрипт для этого и поместить его в свои «Приложения для запуска», но это совсем не поможет, если вы не вошли в gnome.


Это сервер Ubuntu, так что не повезло здесь.
BarsMonster

0

Поможет ли пакет sysfsutils решить вашу проблему?

ОРИГИНАЛЬНЫЙ ОТВЕТ:

Я не могу понять, как прокомментировать ваш вопрос; Думаю, я отредактирую этот ответ, когда узнаю больше о вашей проблеме.

Можете ли вы опубликовать (или вставить, если он длинный) вывод

grep -R md0 /etc/init.d

Там ничего не найдено.
BarsMonster

Хммм ... У меня нет RAID, так что это довольно долго, но вы можете попробовать 'grep -R 256 /etc/init.d' и 'grep -R stripe_cache_size /etc/init.d'?
zpletan

оба не дали результатов.
BarsMonster

0

У меня нет реального ответа для вас, но, возможно, вы могли бы попытаться создать простой стартовый скрипт запуска. Создайте файл в / etc / init с расширением .conf. В файле положить:

start on started tty1

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

Я думаю, что он должен запускать команду примерно во время запуска терминала, что, вероятно, примерно в то же время, когда вы запускаете команду.


Я уже пытался поместить это в сценарий запуска (rc.local), и это не помогло. Кроме того, поскольку это Ubuntu Server, после перезагрузки терминалы могут отсутствовать, AFAIK.
BarsMonster

Я предлагал это как альтернативу методу rc.local. Может быть, это начнется позже. Я действительно не знаю, хотя.
user1974

Что касается отсутствия терминалов, я понятия не имею. Почему на сервере не должно быть ttys после запуска? Мы имеем в виду то же самое, когда говорим «терминал»? Несмотря на это, вы можете использовать другой сервис для запуска команды, просто изменитеtty1
user1974

0

Всего в темноте, поскольку у меня нет настройки RAID 5 для тестирования: возможно, добавьте строку с

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

в rc.local, чтобы удалить права на запись после того, как он установлен. Может быть, это остановит его от изменения в другом месте?


Хорошая идея, но похоже, что-то облажалось в процессе загрузки Ubuntu: -S Я постараюсь опубликовать сегодня.
BarsMonster

Не помогло: - |
BarsMonster

0

Append

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

к /etc/rc.local.


Посмотрите на вопрос - это первое, что я попробовал, и это не сработало, очевидно, md-драйвер был повторно инициализирован или что-то после выполнения rc.local.
BarsMonster

-1

Эта страница предполагает , что размер полосы (или ширина) должны были созданы , когда фс была создана. Может быть, тюнифы могли бы помочь здесь?


2
Это совершенно другая вещь. Размер кеша чередования - это настройка драйвера ядра MD в памяти для кеша чередования.
BarsMonster
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.