9x7-ড্রাইভ raidz2 (জেডএফএস জোল 0.8.1) এ ধীরে ধীরে ক্রমবর্ধমান গতি


9

আমি 256 কে + অনুরোধ আকারের ক্রমবর্ধমান উবুন্টু 18.04 এ আইএসসিএসআই (ব্যাকআপের জন্য) এর মাধ্যমে তৈরি এবং লেখার জন্য নির্মিত একটি বৃহত জেডএফএস পুল চালাচ্ছি। উচ্চ থ্রুপুট এবং স্থান দক্ষতার প্রয়োজন এবং এলোমেলো ছোট-ব্লক পারফরম্যান্সের প্রয়োজনের তুলনায় আমি স্ট্রাইপড রেডজ 2 দিয়ে স্ট্রাইপড মিররগুলিতে গিয়েছিলাম।

তবে, 256 কে সিক্যুয়ালাল রিডের পারফরম্যান্স আমার প্রত্যাশার চেয়ে অনেক কম (100 - 200 এমবিপিএস, 600 এমবিপিএস পর্যন্ত শীর্ষে রয়েছে)। জেডভোলস যখন আইওসেটে ~ 99% আইওয়েট হিট করছে, তখন ব্যাকিং ডিভাইসগুলি সাধারণত 10 থেকে 40% আইওয়েটের মধ্যে চলে, যা আমার কাছে বোঝায় যে বাধাটি এমন একটি জিনিস যা আমি কনফিগারেশনে হারিয়েছি, যদি এটি ব্যাকপ্লেন বা সিপিইউ না থাকে should এই সিস্টেমটি, এবং ক্রমযুক্ত কাজের চাপগুলি এআরসি খুব বেশি কঠোরভাবে কাজ করা উচিত নয়।

আমি মডিউল প্যারামিটারগুলি (নীচে বর্তমানের কনফিগারেশন) নিয়ে বেশ খানিকটা অভিনয় করেছি, শত শত নিবন্ধ পড়েছি, ওপেনএফএসএফস গিথুব সম্পর্কিত সমস্যা ইত্যাদি, ইত্যাদি উপস্থাপনা উপস্থাপনা এবং সমষ্টি আমাকে এই পারফরম্যান্স স্তরে নিয়ে এসেছিল - ডিফল্টরূপে, আমি প্রায় M 50MBps এ চলেছিলাম ক্রমানুসারে পড়ছে যেহেতু জেডএফএস ডিস্কগুলিতে TINY অনুরোধগুলি পাঠাচ্ছিল (~ 16 কে)। সমষ্টি এবং প্রিফেচ ঠিকঠাক কাজ করার সাথে (আমি মনে করি), ডিস্ক রিডগুলি অনেক বেশি, আইওস্যাটে গড়ে ~ 64K প্রায়।

এনআইসিগুলি সিএক্সজিবিট অফলোড + উইন্ডোজ চেলসিও ইস্কি ইনিশিয়েটর জেডএফএস জেভোলসের বাইরে বেশ ভালভাবে কাজ করে, একটি অপ্টেন সরাসরি এনআইসি-তে প্রায় সম্পূর্ণ লাইন-রেট প্রত্যাবর্তন করে (~ 3.5 গিগাবাইট পড়তে এবং লেখার জন্য) হয়।

আমি কি খুব বেশি আশা করি? আমি জানি যে জেডএফএস পারফরম্যান্সের তুলনায় সুরক্ষাকে প্রাধান্য দেয়, তবে আমি প্রত্যাশা করি যে একটি একক 9-ড্রাইভ এমডিএমএম রেড 6 এর চেয়ে 7x9 রাইডজ 2 আরও ভাল ক্রমিক সরবরাহ করবে।

সিস্টেম স্পেস এবং লগ / কনফিগার ফাইল:

Chassis: Supermicro 6047R-E1R72L
HBAs: 3x 2308 IT mode (24x 6Gbps SAS channels to backplanes)
CPU: 2x E5-2667v2 (8 cores @ 3.3Ghz base each)
RAM: 128GB, 104GB dedicated to ARC
HDDs: 65x HGST 10TB HC510 SAS (9x 7-wide raidz2 + 2 spares)
SSDs: 2x Intel Optane 900P (partitioned for mirrored special and log vdevs)
NIC: Chelsio 40GBps (same as on initiator, both using hw offloaded iSCSI)
OS: Ubuntu 18.04 LTS (using latest non-HWE kernel that allows ZFS SIMD)
ZFS: 0.8.1 via PPA
Initiator: Chelsio iSCSI initiator on Windows Server 2019

পুল কনফিগারেশন:

ashift=12
recordsize=128K (blocks on zvols are 64K, below)
compression=lz4
xattr=sa
redundant_metadata=most
atime=off
primarycache=all

জেডভিল কনফিগারেশন:

sparse
volblocksize=64K (matches OS allocation unit on top of iSCSI)

পুল লেআউট:

7x 9-wide raidz2
mirrored 200GB optane special vdev (SPA metadata allocation classes)
mirrored 50GB optane log vdev

/etc/modprobe.d/zfs.conf:

# 52 - 104GB ARC, this system does nothing else
options zfs zfs_arc_min=55834574848
options zfs zfs_arc_max=111669149696

# allow for more dirty async data
options zfs zfs_dirty_data_max_percent=25
options zfs zfs_dirty_data_max=34359738368

# txg timeout given we have plenty of Optane ZIL
options zfs zfs_txg_timeout=5

# tune prefetch (have played with this 1000x different ways, no major improvement except max_streams to 2048, which helped, I think)
options zfs zfs_prefetch_disable=0
options zfs zfetch_max_distance=134217728
options zfs zfetch_max_streams=2048
options zfs zfetch_min_sec_reap=3
options zfs zfs_arc_min_prefetch_ms=250
options zfs zfs_arc_min_prescient_prefetch_ms=250
options zfs zfetch_array_rd_sz=16777216

# tune coalescing (same-ish, increasing the read gap limit helped throughput in conjunction with low async read max_active, as it caused much bigger reads to be sent to the backing devices)
options zfs zfs_vdev_aggregation_limit=16777216
options zfs zfs_vdev_read_gap_limit=1048576
options zfs zfs_vdev_write_gap_limit=262144

# ZIO scheduler in priority order 
options zfs zfs_vdev_sync_read_min_active=1
options zfs zfs_vdev_sync_read_max_active=10
options zfs zfs_vdev_sync_write_min_active=1
options zfs zfs_vdev_sync_write_max_active=10
options zfs zfs_vdev_async_read_min_active=1
options zfs zfs_vdev_async_read_max_active=2
options zfs zfs_vdev_async_write_min_active=1
options zfs zfs_vdev_async_write_max_active=4

# zvol threads
options zfs zvol_threads=32

আমি এই আমার চুল ছিঁড়ে আছি। স্টোরেজ স্পেস সহ অল-উইন্ডোতে যাওয়ার জন্য ব্যবহারকারীদের কাছ থেকে চাপ রয়েছে, তবে আমি প্যারিটি স্টোরেজ স্পেস ব্যবহার করেছি (এমনকি স্টোরেজ স্পেসস ডাইরেক্ট ডাইরেক্ট ডাইরারের সাথে শীর্ষেও), এবং এটি খুব সুন্দরও নয়। আমি আইএসসিএসআইয়ের আওতায় সোজা এমডিএডএম রেইড 60 এ যাওয়ার প্রলোভন করছি, তবে কেউ যদি হাড়ছাড়া মাথার কিছু দেখায় যে আমি মিস করছি যা জেডএফএসের বিট্রোট সুরক্ষার মাধ্যমে পারফরম্যান্সকে আনলক করতে পারে তবে তা পছন্দ করবে :)

উত্তর:


7

ভাল প্রশ্ন.

  • আমি মনে করি আপনার বিচ্ছিন্ন zvol ব্লকের আকার 128k হওয়া উচিত।
  • আপনার ZIO সময়সূচক সেটিংস সবই ন্যূনতম 10 এবং সর্বোচ্চ 64 এর মতো হওয়া উচিত।
  • zfs_txg_টাইমআউটটি আরও দীর্ঘ হওয়া উচিত। আমি আমার সিস্টেমে 15 বা 30s করি।
  • আমি মনে করি একাধিক RAIDZ3 এর (বা এটি ছিল যে একটি টাইপো) ওভারকিল এবং পারফরম্যান্সে একটি বড় ভূমিকা পালন করে। আপনি কি RAIDZ2 এর সাথে মাপদণ্ড করতে পারেন?

সম্পাদনা করুন: সিস্টেমে নেটডাটা ইনস্টল করুন এবং ব্যবহার এবং জেডএফএসের পরিসংখ্যানগুলি পর্যবেক্ষণ করুন।

সম্পাদনা 2: এটি কোনও ভীম সংগ্রহস্থলের জন্য। ভীম লিনাক্সকে লক্ষ্য হিসাবে সমর্থন করে এবং জেডএফএসের সাথে দুর্দান্তভাবে কাজ করে। আপনি কি আপনার ডেটা দিয়ে বেঞ্চমার্কিং বিবেচনা করবেন? আপনি যা করছেন তার জন্য zvols আদর্শ ব্যবহারের মামলা নয়, যদি না এনআইসির অফলোড সমাধানের সমালোচনা না করে।


ধন্যবাদ! জেড 3 বাদে ফলো-আপ মন্তব্যে পয়েন্ট বাই পয়েন্ট যা প্রকৃতপক্ষে টাইপ :) ছিল। ভলব্লকসাইজে, আমি 128 কে এবং 64 কে উভয়ই দিয়ে পরীক্ষা করেছি এবং ক্রমানুসারে পড়ার জন্য পারফরম্যান্স খুব বেশি পরিবর্তন হয়নি। 128 কে সম্ভবত আরও কিছুটা স্থান-দক্ষ হবে, তবে 64k ইনিশিয়েটর ক্লায়েন্ট ওএস বরাদ্দকরণ ইউনিটের আকারের সাথে মেলে, এবং র‌্যান্ডম i / o পরিস্থিতিতে (যা বিরল) এর ক্ষেত্রে উল্লেখযোগ্যভাবে আরও ভাল করবে বলে মনে হচ্ছে, যখন ক্রমগত / i / o দৃশ্যে খুব বেশি গুরুত্ব দেওয়া যায় না ।
obrienmd

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

1
আপনার জন্য আমার কাছে সবচেয়ে আকর্ষণীয় প্রতিক্রিয়া (আমি মনে করি) জাইও সিডিউলারের জন্য। আমি যখন অ্যাসিঙ্ক মিনিট এবং ম্যাক্সগুলিতে সুইটি স্থানান্তর করি তখন এটি আইও একত্রিকরণটি ধ্বংস করে দেয় এবং এর ফলাফলটি খুব খারাপ। পাঠকদের জন্য, যা আমি লেখার জন্য এখানে দুর্দান্ত হিসাবে যত্ন করি, 10/64 এ গিয়ে আইওএসট-এ ডিস্কের গড় আইও তৈরি করে এবং সেই ডিস্কগুলি দিয়ে গড় পড়ার গতি 75% (~ 30 - 60MBps) কেটে দেয় 'আইওপিএস। আমি সিঙ্ককে # টি পড়ার বিষয়টিও টুইট করেছি এবং খুব বেশি প্রভাব ফেলতে দেখিনি, তবে আমি নির্বিশেষে আরও একটি শট দেব :)
ওব্রেনমড

zfs zfs_dirty_data_max_percent = 25 - আমি সাধারণত সেখানে 40% বা তার বেশি।
ew white

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