আমি জেডএফএসে সম্পূর্ণ নতুন, তাই এটির শুরু করার জন্য আমি ভেবেছিলাম যে এটি কীভাবে আচরণ করে তার অনুভূতি পেতে আমি এটিতে কিছু সাধারণ মাপদণ্ড করব। আমি এর পারফরম্যান্সের সীমাটি ঠেলে দিতে চেয়েছিলাম তাই আমি একটি অ্যামাজন ইসি 2 i2.8xlarge
উদাহরণ সরবরাহ করেছি (প্রায় $ 7 / ঘন্টা, সময় সত্যিই অর্থ!)। এই উদাহরণটিতে 8 800 জিবি এসএসডি রয়েছে।
আমি fio
এসএসডিগুলিতে নিজেই একটি পরীক্ষা করেছি এবং নিম্নলিখিত আউটপুট পেয়েছি (ছাঁটা):
$ sudo fio --name randwrite --ioengine=libaio --iodepth=2 --rw=randwrite --bs=4k --size=400G --numjobs=8 --runtime=300 --group_reporting --direct=1 --filename=/dev/xvdb
[trimmed]
write: io=67178MB, bw=229299KB/s, iops=57324, runt=300004msec
[trimmed]
4K র্যান্ডম লেখার জন্য 57K আইওপিএস। শ্রদ্ধেয়।
আমি তারপরে সমস্ত 8 টি বিস্তৃত একটি জেডএফএস ভলিউম তৈরি করেছি 8 প্রথমে এতে raidz1
8 টি এসএসডি সহ আমার একটি ভিডেভ ছিল , তবে এটি পারফরম্যান্সের জন্য খারাপ হওয়ার কারণগুলি নিয়ে পড়েছিলাম, তাই আমি এই জাতীয় চারটি mirror
দেবদেবীর সাথে শেষ করেছি:
$ sudo zpool create testpool mirror xvdb xvdc mirror xvdd xvde mirror xvdf xvdg mirror xvdh xvdi
$ sudo zpool list -v
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
testpool 2.91T 284K 2.91T - 0% 0% 1.00x ONLINE -
mirror 744G 112K 744G - 0% 0%
xvdb - - - - - -
xvdc - - - - - -
mirror 744G 60K 744G - 0% 0%
xvdd - - - - - -
xvde - - - - - -
mirror 744G 0 744G - 0% 0%
xvdf - - - - - -
xvdg - - - - - -
mirror 744G 112K 744G - 0% 0%
xvdh - - - - - -
xvdi - - - - - -
আমি রেকর্ডসটি 4K এ সেট করেছিলাম এবং আমার পরীক্ষা চালিয়েছি:
$ sudo zfs set recordsize=4k testpool
$ sudo fio --name randwrite --ioengine=libaio --iodepth=2 --rw=randwrite --bs=4k --size=400G --numjobs=8 --runtime=300 --group_reporting --filename=/testpool/testfile --fallocate=none
[trimmed]
write: io=61500MB, bw=209919KB/s, iops=52479, runt=300001msec
slat (usec): min=13, max=155081, avg=145.24, stdev=901.21
clat (usec): min=3, max=155089, avg=154.37, stdev=930.54
lat (usec): min=35, max=155149, avg=300.91, stdev=1333.81
[trimmed]
আমি এই জেডএফএস পুলে কেবল 52K আইওপিএস পাই। এটি আসলে একটি এসএসডি থেকে কিছুটা খারাপ।
আমি বুঝতে পারি না আমি এখানে কী ভুল করছি। আমি কি ভুলভাবে জেডএফএস কনফিগার করেছি, বা এটি জেডএফএসের পারফরম্যান্সের একটি খারাপ পরীক্ষা?
দ্রষ্টব্য আমি অফিসিয়াল -৪-বিট CentOS 7 এইচভিএম চিত্র ব্যবহার করছি, যদিও আমি 4.4.5 এলেরপো কার্নেলটিতে আপগ্রেড করেছি:
$ uname -a
Linux ip-172-31-43-196.ec2.internal 4.4.5-1.el7.elrepo.x86_64 #1 SMP Thu Mar 10 11:45:51 EST 2016 x86_64 x86_64 x86_64 GNU/Linux
আমি এখানে তালিকাভুক্ত zfs রেপো থেকে জেডএফএস ইনস্টল করেছি । আমার কাছে zfs
প্যাকেজের 0.6.5.5 সংস্করণ রয়েছে ।
আপডেট : প্রতি @ ইয়েওয়াইটের পরামর্শটি আমি চেষ্টা করেছি ashift=12
এবং ashift=13
:
$ sudo zpool create testpool mirror xvdb xvdc mirror xvdd xvde mirror xvdf xvdg mirror xvdh xvdi -o ashift=12 -f
এবং
$ sudo zpool create testpool mirror xvdb xvdc mirror xvdd xvde mirror xvdf xvdg mirror xvdh xvdi -o ashift=13 -f
এগুলির কোনওটিতেই কোনও পার্থক্য হয়নি। আমি যা বুঝি তা থেকে সর্বশেষতম জেডএফএস বিটগুলি 4K এসএসডি সনাক্ত করতে এবং যুক্তিসঙ্গত ডিফল্ট ব্যবহার করে যথেষ্ট স্মার্ট।
আমি খেয়াল করেছিলাম যে সিপিইউ ব্যবহার স্পাইক করছে। @ টিম এটি প্রস্তাব করেছিল তবে আমি এটিকে প্রত্যাখ্যান করেছি তবে আমি মনে করি আমি সিপিইউ দেখার জন্য যথেষ্ট সময় দেখছি না। এই উদাহরণে 30 টি সিপিইউ কোরের মতো কিছু রয়েছে এবং সিপিইউ ব্যবহার 80% পর্যন্ত বাড়ছে sp ক্ষুধার প্রক্রিয়া? z_wr_iss
এটির প্রচুর দৃষ্টান্ত।
আমি নিশ্চিত করেছি যে সংক্ষেপণ বন্ধ রয়েছে, সুতরাং এটি সংক্ষেপণ ইঞ্জিন নয়।
আমি রাইড ব্যবহার করছি না, সুতরাং এটি প্যারিটি গণনা হওয়া উচিত নয়।
আমি একটি করেছিলাম perf top
এবং এটি বেশিরভাগ কার্নেল সময়টি _raw_spin_unlock_irqrestore
ভিতরে z_wr_int_4
এবং osq_lock
ভিতরে ব্যয় করে z_wr_iss
।
আমি এখন বিশ্বাস করি যে এই পারফরম্যান্সের বাধাটির একটি সিপিইউ উপাদান রয়েছে, যদিও এটি কী হতে পারে তা নির্ধারণের আমি কাছে নেই।
আপডেট 2 : প্রতি @Weite এবং অন্যদের পরামর্শ যে এটি এই পরিবেশের ভার্চুয়ালাইজড প্রকৃতি যা কার্যকারিতা অনিশ্চয়তা তৈরি করে, আমি fio
পরিবেশগতভাবে এসএসডি চারটি জুড়ে ছড়িয়ে ছিটিয়ে র্যান্ডম 4K রাইট লিখতাম bench প্রতিটি এসএসডি নিজেই ~ 55K আইওপিএস দেয়, তাই আমি চারটি জুড়ে প্রায় 240K আইও আশা করেছিলাম। আমি যা পেয়েছি তা কম-বেশি:
$ sudo fio --name randwrite --ioengine=libaio --iodepth=8 --rw=randwrite --bs=4k --size=398G --numjobs=8 --runtime=300 --group_reporting --filename=/dev/xvdb:/dev/xvdc:/dev/xvdd:/dev/xvde
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=8
...
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=8
fio-2.1.5
Starting 8 processes
[trimmed]
write: io=288550MB, bw=984860KB/s, iops=246215, runt=300017msec
slat (usec): min=1, max=24609, avg=30.27, stdev=566.55
clat (usec): min=3, max=2443.8K, avg=227.05, stdev=1834.40
lat (usec): min=27, max=2443.8K, avg=257.62, stdev=1917.54
[trimmed]
এটি পরিস্কারভাবে পরিবেশটি দেখায়, ভার্চুয়ালাইজড হওয়া সত্ত্বেও, আমি যা দেখছি তার থেকে অনেক বেশি আইওপিএস বজায় রাখতে পারে। জেডএফএস বাস্তবায়নের কিছু বিষয় এটিকে শীর্ষ গতিতে আঘাত করা থেকে বিরত রাখছে। আমি ঠিক বুঝতে পারি না যে এটি কি।