使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 2011年

1
sysfsutils软件包会帮助您解决问题吗?
zpletan 2011年

Answers:


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 2011年

1
谢谢。我不敢相信这在Ubuntu 13.10中仍然是一个问题。只需将条带缓存的大小更改为更大的值,从一个加密的RAID复制到另一个RAID磁盘时,它就从<10MB / s并完全挂起到> 100MB / s。
弗罗斯特斯

就是这样,对其他人来说很明显:在至少现代的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 2011年

0

sysfsutils软件包会帮助您解决问题吗?

原始答案:

我不知道该如何评论您的问题;我想我会在进一步了解您的问题时编辑此答案。

您能否发布(或粘贴,如果很长的话)

grep -R md0 /etc/init.d

在那没找到。
BarsMonster 2011年

嗯...我没有RAID,所以有点远,但是您可以试试'grep -R 256 /etc/init.d'和'grep -R stripe_cache_size /etc/init.d'吗?
zpletan 2011年

均未返回任何结果。
BarsMonster 2011年

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 2011年

至于缺乏终端,我不知道。为什么服务器在启动后没有ttys?说终端时,我们指的是同一件事吗?无论如何,您都可以使用其他服务来触发命令,只需更改即可tty1
user1974 2011年

0

由于我没有要测试的RAID 5设置,因此黑暗中的总拍摄次数:也许添加一行

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

在rc.local中删除设置后的写许可权。也许这会阻止它在其他地方进行更改?


好主意,但似乎在Ubuntu启动过程中搞砸了:-S,我今天尝试发布。
BarsMonster 2011年

没有帮助:-|
BarsMonster 2011年

0

附加

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

/etc/rc.local


看到问题-这是我尝试过的第一件事,但是没有成功,显然是md-driver重新初始化了,或者在执行rc.local之后发生了什么。
BarsMonster 2011年

-1

该页面建议应在设置fs时设置条带大小(或宽度)。也许tunefs可以帮上忙吗?


2
这是完全不同的事情。条带缓存大小是条带缓存的内存中MD内核驱动程序的设置。
BarsMonster 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.