ایجاد، تایید و بازسازی RAID های نرمافزاری برای درایوهایی که سایز کوچکی دارند مشکلی ندارد، اما برای مواقعی که اطلاعات شما زیاد هستند و یا از دیسکهای حجیم برای این کار استفاده میکنید، این عمل ممکن است تا روزها نیز ادامه داشته باشد، همیشه به یاد داشته باشید که شما میتوانید سرعت انجام این کار برای درایوهای RAID 0/1/5/6 را افزایش دهید.
اخیرا یک NAS با ۵ هارد ۴ ترابایتی را در یک محیط RAID 6 برای یک مشتری پیادهسازی کردم، با زدن دستور cat /proc/mdstat وضعیت درایو md0 در حالت فعال و بازیابی اطلاعات بود، سرعت این بازیابی حدود ۴۰۰۰K/sec بود که حدود ۲۲ ساعت دیگر به پایان میرسید و من زمان کافی برای این کار نداشتم و نیازمند پایان یافتن آن به سریعتر حالت ممکن بودم.
روش اول:
فایل /proc/sys/dev/raid/speed_limit_min حاوی تنظیماتی است که مشخص میکند در زمانهایی که درایو فعالیتی در حال انجام دارد با چه سرعتی عملیات بازسازی را انجام دهد. سرعت بر مبنای کیلوبایت بر ثانیه و به ازای هر دستگاه محاسبه میشود و نه درایو RAID. مقدار پیشفرض ۱۰۰۰ است.
فایل /proc/sys/dev/raid/speed_limit_max حاوی تنظیماتی است که مشخحص میکند در زمانهایی که درایر فعالیتی ندارد با سرعت درج شده در این فایل عملیات بازسازی را انجام میدهد.
برای مشاهده مقادیر مندرج در این فایلها از دستور زیر استفاده کنید:
# sysctl dev.raid.speed_limit_min
# sysctl dev.raid.speed_limit_max
نمونههای خروجی:
dev.raid.speed_limit_min = 10000
dev.raid.speed_limit_max = 20000
نکته: این روشها صرفا برای بازیابی درایوهای RAID نرمافزاری لینوکس و افزایش سرعت آنها کاربرد دارد، هر چند تنظیمات این موارد مشکلی برای سیستم ایجاد نمیکند اما میزان فشار بر سرور و مصرف منابع CPU و RAM را به میزان چشمگیری افزایش میدهد.
برای افزایش سرعت:
echo value > /proc/sys/dev/raid/speed_limit_min
یا
sysctl -w dev.raid.speed_limit_min=value
در این مثال مقدار را ما بر روی ۵۰۰۰۰K/Sec قرار میدهیم:
# echo 50000 > /proc/sys/dev/raid/speed_limit_min
یا
# sysctl -w dev.raid.speed_limit_min=50000
اگر میخواهید تنظیمات پیشفرض را تغییر دهید، این دو مقدار را در فایل /etc/sysctl.conf وارد نمائید.
#################NOTE ################
## You are limited by CPU and memory too #
###########################################
dev.raid.speed_limit_min = 50000
## good for 4-5 disks based array ##
dev.raid.speed_limit_max = 2000000
## good for large 6-12 disks based array ###
dev.raid.speed_limit_max = 5000000
روش دوم:
تنظیمات readahead (پیش خوان در سکتورهای ۵۱۲ بایتی) را به ازای هر درایو افزایش دهید:
# blockdev --setra 65536 /dev/mdX
## Set read-ahead to 32 MiB ##
# blockdev --setra 65536 /dev/md0
# blockdev --setra 65536 /dev/md1
روش سوم:
مقدار stripe_cache_size را برای RAID5 یا RAID6 تنظیم کنید.
این تنظیم فقط برای RAID 5/6 امکانپذیر است و بهرهوری این درایوها را بین ۳ تا ۶ برابر افزایش میدهد. مقدار مندرج بلاکهای سایز کش را برای ذخیره اطلاعات و خواندن اطلاعات در حافظه رم ذخیره میکند، مقدار پیشفرض ۲۵۶ است و مقادیر ۱۷ تا ۳۲۷۶۸ قابل تنظیم است. هر چند افزایش این مقدار تاثیر بسزایی در سرعت این درایوها دارد اما میزان بسزایی از RAM سرور را اشغال میکند، تنظیم این مقدار به عدد بسیار زیاد باعث به وجود آمدن مشکل “out of memory” میشود.
فرمول محاسبه:
memory_consumed = system_page_size * nr_disks * stripe_cache_size
مقدار رم مصرف شده = حجم system page * تعداد دیسک * stripe_cache_size
برای تنظیم این مقدار بر روی ۱۶MiB برای درایو md0:
# echo 16384 > /sys/block/md0/md/stripe_cache_size
برای تنظیم این مقدار بر روی ۳۲MiB برای درایو md3:
# echo 32768 > /sys/block/md3/md/stripe_cache_size
روش چهارم:
غیر فعال کردن NCQ برای تمامی دیسک ها
دستور زیر NCQ را برای تمامی دیسک ها /dev/sda, /dev/sdb و .. غیر فعال میکند:
for i in sd[abcde]
do
echo 1 > /sys/block/$i/device/queue_depth
done
روش پنجم:
مقدار Bitmap زمان بازسازی دیسک ها را در صورت خراب شدن و یا در صورت جابجایی دییک ها بهینه میکنند.
با استفاده از دستور زیر آن را فعال کنید:
# mdadm --grow --bitmap=internal /dev/md0
پس از اتمام rebuild آن را با دستور زیر غیرفعال کنید:
# mdadm --grow --bitmap=none /dev/md0
نتیجه:
سرعت من از ۴k به ۵۱k افزایش یافت:
cat /proc/mdstat
نمونه خروجی:
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md5 : active raid1 sde2[2](S) sdd2[3](S) sdc2[4](S) sdb2[1] sda2[0]
۵۳۰۰۴۸ blocks [2/2] [UU]
md0 : active raid6 sde3[4] sdd3[3] sdc3[2] sdb3[1] sda3[0]
۵۸۵۵۸۳۶۸۰۰ blocks level 6, 64k chunk, algorithm 2 [5/5] [UUUUU]
[============>........] resync = 61.7% (1205475036/1951945600) finish=242.9min speed=51204K/sec
برای مشاهده real-time مانند یک حرفه ای با دستور زیر آن را بررسی کنید:
# watch -n1 cat /proc/mdstat
نمونه خروجی:
تصویر۱: وضعیت بهرهوری و بهینهسازی درایو raid6 برای /dev/md2
دستور زیر گزارش درایو /dev/md2 را از نظر وضعیت و سلامتی به شما میدهد:
# mdadm --detail /dev/md2
تصویر دوم: دریافت اطلاعات در خصوص درایو md2 raid array
همچنین با دستور iostat نیز میتوانید وضعیت فعلی دیسکها را مشاهده کنید:
watch iostat -k 1 2
watch -n1 iostat -k 1 2
تصویر سوم: میزان مصرف منابع CPU و اطلاعات I/O برای درایو ها و پارتیشنها
بدون دیدگاه