আমার RAID1 পড়ার অ্যাক্সেস লেখার অ্যাক্সেসের চেয়ে ধীর কেন?


10

আমি কিছু সাধারণ পারফরম্যান্স পরীক্ষা করেছি এবং দেখে মনে হচ্ছে আমার RAID1 থেকে পড়া লেখার চেয়ে ধীর:

root@dss0:~# for i in 1 2 3; do dd if=/dev/zero of=/dev/sda bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 192.349 s, 715 MB/s
137438953472 bytes (137 GB) copied, 192.851 s, 713 MB/s
137438953472 bytes (137 GB) copied, 193.026 s, 712 MB/s
root@dss0:~# for i in 1 2 3; do dd if=/dev/sda of=/dev/null bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 257.201 s, 534 MB/s
137438953472 bytes (137 GB) copied, 255.522 s, 538 MB/s
137438953472 bytes (137 GB) copied, 259.945 s, 529 MB/s

আমি বুঝতে পেরেছি যে ডিডি কোনও পারফরম্যান্স পরীক্ষার সরঞ্জাম নয়, তবে এই ফলাফলটি এখনও অবাক করা।

সিস্টেমটি বিক্রেতার দ্বারা নির্মিত হয়েছিল এবং 16 গিগাবাইট র‌্যাম সহ একটি সুপার মাইক্রো মেইন বোর্ড রয়েছে। RAID কন্ট্রোলারটি 1 গিগাবাইট ক্যাশে সহ একটি মেগ্রেইড 9271-8i। একটি SAS-933EL1 ব্যাকপ্ল্যানেতে 8 টি টিবাইট এসএএস ডিস্ক রয়েছে। আমি ক্যাবলিং সম্পর্কে অনিশ্চিত, নিয়ামকের এক সংযোজক এসএএস ব্যাকপ্লেনে যায়, অন্যটি দুটি এসটিএ ডিস্কে যায় যা ওএসকে ধারণ করে।

RAID1 এই আদেশ দ্বারা সেট আপ করা হয়েছিল:

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r1 [8:0,8:1,8:2,8:3,8:4,8:5,8:6,8:7] WB NORA Direct -a0
Adapter 0: Created VD 0
Adapter 0: Configured the Adapter!!
Exit Code: 0x00

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aALL
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 7.275 TB
Sector Size         : 512
Is VD emulated      : No
Mirror Data         : 7.275 TB
State               : Optimal
Strip Size          : 256 KB
Number Of Drives    : 8
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
PI type: No PI
Is VD Cached: No
Exit Code: 0x00

আমি আশা করব যে পড়ার অ্যাক্সেস কমপক্ষে লেখার অ্যাক্সেসের চেয়ে দ্রুত, সম্ভবত আরও দ্রুত। 715 এমবিাইট / সেকেন্ড লেখার গতিটি একক এসএএস / এসএটিএ সংযোগকারীর 6 গিগাবাইট সীমাটির কাছাকাছি বলে মনে হচ্ছে। এটি কি এসএএস ব্যাকপ্লেনের সাথে কনফিগারেশন বা ক্যাবলিংয়ের সমস্যা হতে পারে? এসএএস ব্যাকপ্লেন কনফিগারেশনটি কোনও মেগাআরআইডি কমান্ডের সাহায্যে অনুসন্ধান করা যেতে পারে? দয়া করে উপদেশ দাও.

হালনাগাদ

পোয়েজ এবং পিটারের দ্বারা নির্ধারিত হিসাবে, ধীর-প্রত্যাশিত পড়ার পারফরম্যান্স সম্ভবত লিনাক্স আই / ও-সাবসিস্টেমের ক্যাচিংয়ের কারণে ঘটে।

ডিডি কমান্ডে সরাসরি পতাকা ব্যবহার করার সময় আমি পাই

root@dss0:~# dd if=/dev/sda of=/dev/null bs=1048576 count=131072 iflag=direct
137438953472 bytes (137 GB) copied, 199.862 s, 688 MB/s

যা অনেক ভাল তবে 10% ধীরে ধীরে লেখার গতি। অফলাগ = ডাইরেক্ট ব্যবহার লেখার গতিতে প্রভাব ফেলেনি।


সহজ উত্তর: পড়ার জন্য ফলাফলের জন্য অপেক্ষা করা দরকার, লেখার দরকার নেই।
ডেভিড শোয়ার্টজ

উত্তর:


8

পোয়েজ লেখার ক্যাশে সম্পর্কে ঠিক ঠিক, তবে এখানে আরও বিশদ রয়েছে।

জিরোসের সাথে ডিডি করা এবং লেখার ক্যাশে ব্যবহার করা বেঞ্চমার্কের সঠিক উপায় নয় (যদি না আপনি অবশ্যই লেখার ক্যাশে পরীক্ষা করতে চান না, যা সম্ভবত কোনও ফাইল সিস্টেমের জন্য দরকারী, এটি কতটা মেটাডেটা সিঙ্ক করে তা দেখতে, নতুন ফাইল তৈরি করে ইত্যাদি etc. ) (এবং সম্ভবত ডিডি সর্বদা ভুল ধরণের বেঞ্চমার্ক, তবে এটি খুব প্রাথমিক পরীক্ষার জন্য কাজ করে)

আমি আপনাকে নিম্নোক্ত বিকল্পগুলির সাথে ডিডি ব্যবহার করার পরামর্শ দিচ্ছি:

conv=fdatasync -> this will make it flush to disk before finishing and calculating speed
oflag=direct   -> this will make it skip the OS cache but not the disk cache
conv=sync      -> more like skipping the disk cache too, but not really ... just flushing it every block or something like that.

এবং হয় না শূন্য ব্যবহার। কিছু স্মার্ট হার্ডওয়্যার / সফ্টওয়্যার / ফার্মওয়্যার কিছু শর্টকাট ব্যবহার করতে পারে যদি ডেটাটি শূন্যের মতো অনুমানযোগ্য হয়। এটি বিশেষত সত্য যদি কোনও সংক্ষেপণ রয়েছে যা আমি অনুমান করছি যে আপনি ব্যবহার করছেন না। পরিবর্তে, মেমোরিতে একটি এলোমেলো ফাইল ব্যবহার করুন (যেমন / dev / shm)। ইউরেনডম ধীর গতির, তাই এটি আবার পড়তে আপনাকে অস্থায়ীভাবে এটি কোথাও লিখতে হবে। একটি 50MB র্যান্ডম ফাইল তৈরি করুন:

dd if=/dev/urandom of=/dev/shm/randfile bs=1M count=50

ফাইলটি লেখার জন্য বহুবার পড়ুন (এখানে আমি এটি পড়ার জন্য বিড়ালটি 6 বার ব্যবহার করি):

dd if=<(cat /dev/shm/randfile{,,,,,}) of= ... conv=fdatasync

rm /dev/shm/randfile

এছাড়াও মনে রাখবেন যে রেইড 1 রিডগুলি সমান্তরাল ক্রিয়াকলাপগুলির সাথে দ্রুত হয়, তাই ডিস্কগুলি স্বাধীনভাবে ব্যবহার করা যায়। বিভিন্ন ডিস্কের সাথে একই ক্রিয়াকলাপের বিভিন্ন অংশগুলি পড়ার জন্য ডিস্কগুলিকে সমন্বিত করার পক্ষে এটি সম্ভবত যথেষ্ট স্মার্ট নয়।


10

আপনার প্রশ্নের উত্তর চাবিকাঠি পঠিত সম্মতি । একসময় আমারও সমস্যাটি ঘটেছিল

আইওডাব্লু, অনুকূল ক্রমবর্ধমান পঠন পারফরম্যান্সের জন্য সমস্ত ডিস্ক স্থায়ীভাবে ইনপুটে যুক্ত করা উচিত।

আপনি যখন ddডাব্লু / ও directio(দেখুন man dd) ব্যবহার করেন তখন লিখন অপারেশনটি তাত্ক্ষণিকভাবে সঞ্চালিত হচ্ছে না, তবে ওএস ক্যাশে চলছে, সুতরাং এতে সমস্ত ডিস্ককে ক্রমবর্ধমানভাবে যুক্ত করার এবং সর্বাধিক সম্ভাব্য পারফরম্যান্স অর্জনের আরও সম্ভাবনা রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.