ZFS पूल धीमा अनुक्रमिक पढ़ा


10

मेरे पास इस समस्या के बारे में एक संबंधित प्रश्न है, लेकिन यह बहुत जटिल और बहुत बड़ा है, इसलिए मैंने फैसला किया कि मुझे इस मुद्दे को एनएफएस और स्थानीय मुद्दों में विभाजित करना चाहिए। मैंने बहुत सफलता के बिना मेलिंग सूची पर zfs- चर्चा मेल पर इस बारे में पूछने की कोशिश की है।

उसी सर्वर पर NFS / CIFS निर्देशिकाओं के बीच धीमी प्रतिलिपि

रूपरेखा: मैं कैसे सेटअप कर रहा हूँ और मुझे क्या उम्मीद है

  1. मेरे पास 4 डिस्क के साथ एक ZFS पूल है। 2TB RED को 2 दर्पणों के रूप में कॉन्फ़िगर किया गया है जो धारीदार (RAID 10) हैं। लिनक्स पर, zfsonlinux। कोई कैश या लॉग डिवाइस नहीं हैं।
  2. डेटा दर्पण के पार संतुलित है (ZFS के लिए महत्वपूर्ण)
  3. प्रत्येक डिस्क 588 एमबी / सेकंड के एक संयुक्त थ्रूपुट देते हुए, समानांतर में 147 एमबी / सेकंड में (कच्ची डब्ल्यू / डीडी) पढ़ सकती है।
  4. मैं एक समान 4TB RED डिस्क के मानदंड के आधार पर 115MB / sec लिखने, 138MB / sec read और प्रत्येक डिस्क से अनुक्रमिक डेटा के 50MB / sec पुनः लिखने की उम्मीद करता हूं। मुझे उम्मीद है कि 100 एमबी / सेकंड पढ़ने या लिखने में कोई कमी नहीं होगी, क्योंकि इन दिनों कोई भी डिस्क ऐसा कर सकती है।
  5. मैंने सोचा कि जब लोड रीडिंग या लेखन अनुक्रमिक डेटा के तहत सभी 4 डिस्क पर मैं 100% IO उपयोग देखूंगा। और यह कि 100% से अधिक उपयोग होने पर डिस्क 100MB / सेकंड से अधिक की हो जाएगी।
  6. मुझे लगा कि पूल मुझे 2x लिखने, 2x फिर से लिखने, और 4x एक डिस्क पर प्रदर्शन पढ़ने के लिए देगा - क्या मैं गलत हूं?
  7. नई मैंने सोचा था कि एक ही पूल पर एक ext4 zvol ZFS रूप में एक ही गति के बारे में होगा

जो मुझे वास्तव में मिलता है

मुझे लगता है कि पूल का पढ़ा हुआ प्रदर्शन लगभग उतना नहीं है जितना मुझे उम्मीद थी

कुछ दिनों पहले पूल पर बोनी ++ बेंचमार्क

संस्करण 1.97 ------ अनुक्रमिक आउटपुट ------ - पर्याप्त इनपुट- - आयामी-
कंसीडर 1 -पेर Chr- --Block-- -Rrrite- -er Chr- --Block-- --Seeks--
मशीन का आकार K / सेकंड% CP K / सेकंड% CP K / सेकंड% CP K / सेकंड% CP K / सेकंड% CP / सेकंड% CP
igor 63G 99 99 232132 47 118787 27 336 97 257072 22 92.7 6

एक 4TB लाल ड्राइव पर bonnie ++ एक झूले में खुद पर है

संस्करण 1.97 ------ अनुक्रमिक आउटपुट ------ - पर्याप्त इनपुट- - आयामी-
कंसीडर 1 -पेर Chr- --Block-- -Rrrite- -er Chr- --Block-- --Seeks--
मशीन का आकार K / सेकंड% CP K / सेकंड% CP K / सेकंड% CP K / सेकंड% CP K / सेकंड% CP / सेकंड% CP
igor 63G 101 99 115288 30 49781 14 326 97 138250 13 111.6 8

इसके अनुसार एकल 4TB RED ड्राइव से परिणाम के आधार पर रीड एंड रीराइट स्पीड उपयुक्त है (वे डबल हैं)। हालाँकि, मैं जिस रीड स्पीड की उम्मीद कर रहा था वह लगभग 550MB / sec (4xB ड्राइव की स्पीड 4x) होगी और मैं कम से कम 400MB / सेकंड की उम्मीद करूँगा। इसके बजाय मैं 260MB / सेकंड के आसपास देख रहा हूं

नीचे की जानकारी एकत्र करते हुए, अभी से पूल पर bonnie ++ । पहले जैसा नहीं, और कुछ भी नहीं बदला है।

संस्करण 1.97 ------ अनुक्रमिक आउटपुट ------ - पर्याप्त इनपुट- - आयामी-
कंसीडर 1 -पेर Chr- --Block-- -Rrrite- -er Chr- --Block-- --Seeks--
मशीन का आकार K / सेकंड% CP K / सेकंड% CP K / सेकंड% CP K / सेकंड% CP K / सेकंड% CP / सेकंड% CP
igor 63G 103 99 207518 43 108810 24 342 98 302350 26 256.4 18

लिखने के दौरान zost iostat । मुझे ठीक लगता है।

                                                 क्षमता संचालन बैंडविड्थ
पूल आबंटित मुक्त पठन लेखन लेखन
-------------------------------------------- ----- - ---- ----- ----- ----- -----
पूल 2 1.23T 2.39T 0 1.89K 1.60K 238M
  दर्पण 631G 1.20T 0 979 1.60K 120M
    ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469 - - 0 1007 1.60K 124M
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX - - 0 975 0 120M
  दर्पण 631G 1.20T 0 953 0 117M
    ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536 - - 0 1.01K 0 128M
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE - - 0 953 0 117M

iostat zpool पुनर्लेखन के दौरान। मुझे ठीक लगता है, मुझे लगता है

                                                 क्षमता संचालन बैंडविड्थ
पूल आबंटित मुक्त पठन लेखन लेखन
-------------------------------------------- ----- - ---- ----- ----- ----- -----
पूल 2 1.27 टी 2.35 टी 1015 923 125 एम 101 एम
  दर्पण 651G 1.18T 505 465 62.2M 51.8M
    ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469 - - 198 438 24.4M 51.7M
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX - - 306 384 37.8M 45.1M
  दर्पण 651G 1.18T 510 457 63.2M 49.6M
    ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536 - - 304 371 37.8M 43.3M
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE - - 206 423 25.5M 49.6M

यह वह जगह है जहां मुझे आश्चर्य है कि क्या हो रहा है

पढ़ने के दौरान zpol iostat

                                                 क्षमता संचालन बैंडविड्थ
पूल आबंटित मुक्त पठन लेखन लेखन
-------------------------------------------- ----- - ---- ----- ----- ----- -----
पूल 2 1.27T 2.35T 2.68K 32 339M 141K
  दर्पण 651G 1.18T 1.34K 20 169M 90.0K
    ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469 - - 748 9 92.5M 96.8K
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX - - 623 10 76.8M 96.8K
  दर्पण 651G 1.18T 1.34K 11 170M 50.8K
    ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536 - - 774 5 95.7M 56.0K
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE - - 599 6 74.0M 56.0K

iostat -x उसी रीड ऑपरेशन के दौरान। ध्यान दें कि IO% 100% पर नहीं है।

डिवाइस: rrqm / s wrqm / sr / sw / s rkB / s wkB / s avgrq-sz avgqu-sz इंतजार r_await w_await svctm% उपयोग
एसडीबी 0.60 0.00 661.30 6.00 83652.80 49.20 250.87 2.32 3.47 3.46 4.87 1. 79% 796
sdd 0.80 0.00 735.40 5.30 93273.20 49.20 251.98 2.60 3.51 3.51 4.15 4.15: 20.04
sdf 0.50 0.00 656.70 3.80 83196.80 31.20 252.02 2.23 3.38 3.36 6.63 1.17.3.12
एसडीए 0.70 0.00 738.30 3.30 93572.00 31.20 252.44 2.45 3.33 3.31 7.03 1.14 84.24

ज़िप और परीक्षण डेटासेट सेटिंग्स:

  • atime बंद है
  • संपीड़न बंद है
  • ashift 0 है (ऑटोडेट - मेरी समझ यह थी कि यह ठीक था)
  • zdb का कहना है कि डिस्क सभी राख = 12 हैं
  • मॉड्यूल - विकल्प zfs zvol_threads = 32 zfs_arc_max = 17179869184
  • सिंक = मानक

संपादित करें - अक्टूबर, 30, 2015

मैंने कुछ और परीक्षण किया

  • डेटासेट bonnie ++ w / recordize = 1M = 226MB लिखना, 392MB ज्यादा बेहतर पढ़ा
  • डेटासेट dd w / रिकॉर्ड साइज = 1M = 260MB लिखना, 392MB ज्यादा बेहतर पढ़ना
  • zvol w / ext4 dd bs = 1M = 128MB लिखना, 107MB पढ़ना इतना धीमा क्यों है?
  • डेटासेट 2 प्रक्रिया समानांतर में = 227MB लिखना, 396MB पढ़ना
  • dd Direct io डेटासेट और zvol पर अलग नहीं है

मैं बढ़े हुए रिकॉर्ड आकार के साथ प्रदर्शन से बहुत खुश हूं। पूल पर लगभग हर फाइल 1 एमबी से अधिक की है। तो मैं इसे ऐसे ही छोड़ दूंगा। डिस्क को अभी भी 100% उपयोग नहीं मिल रहा है, जो मुझे आश्चर्यचकित करता है कि क्या यह अभी भी बहुत तेज हो सकता है। और अब मैं सोच रहा हूं कि zvol का प्रदर्शन इतना घटिया क्यों है, क्योंकि यह कुछ ऐसा है जो मैं (हल्का) उपयोग करता हूं।

मुझे टिप्पणियों / उत्तरों में मांगी गई कोई भी जानकारी प्रदान करने में खुशी हो रही है। मेरे अन्य प्रश्न में भी बहुत सारी जानकारी पोस्ट की गई है: एक ही सर्वर पर NFS / CIFS निर्देशिकाओं के बीच धीमी प्रतिलिपि

मैं पूरी तरह से जानता हूँ कि मैं शायद कुछ समझ नहीं पा रहा हूँ और यह समस्या नहीं हो सकती है। अग्रिम में धन्यवाद।

यह स्पष्ट करने के लिए, सवाल यह है कि मैं जितनी जल्दी हो सके ZFS पूल क्यों नहीं? और शायद कुछ और गलत है?


1
कोई ट्यूनिंग नहीं, मुझे संदेह होगा ... क्या आपने अपने डिस्क के लिए राख को समायोजित किया था? किसी भी zfs.conf सेटिंग्स? क्या atime चालू / बंद है? कोई अजीब सिंक सेटिंग्स?
ewwhite

@ जब मैंने सवाल के कुछ विवरण जोड़े हैं, धन्यवाद
रायन बाबशिन

इसे देखें: tomshardware.com/reviews/red-wd20efrx-wd30efrx-nas,3248-5.html WD लाल ड्राइव में बार-बार अपशगुन है। वे ठीक स्ट्रीम करते हैं, लेकिन वास्तविक दुनिया के उपयोग के तहत उन्हें तलाश करना पड़ता है, और आपके IO आँकड़े पर्याप्त IO संचालन / सेकंड दिखाते हैं कि समय निश्चित रूप से आपके प्रदर्शन को प्रभावित कर रहा है। एक zvol बनाएं और ddदेखें कि आपको किस तरह का प्रदर्शन मिलता है। आप प्रत्यक्ष IO को भी आज़माना चाह सकते हैं क्योंकि आप स्ट्रीमिंग गति में आ रहे हैं जहाँ कैशिंग से डबल बफरिंग प्रदर्शन को प्रभावित कर सकता है। FWIW, 3/4 सैद्धांतिक कुल कच्चे 4-डिस्क रीड प्रदर्शन अच्छा है।
एंड्रयू हेनले

(अंतरिक्ष से बाहर भाग गए) आपके पास पर्याप्त डिस्क भी हैं जो आपके थ्रेड को पूरी तरह से व्यस्त रखने के लिए एकल-थ्रेडेड IO ऑपरेशन के लिए पर्याप्त नहीं हो सकती हैं। जो आपकी %utilसंख्या समझा सकता है ।
एंड्रयू हेनले

@AndrewHenle धन्यवाद। यह सब बहुत उचित लगता है। मैं अब उस पर गौर करूंगा।
रयान बाबशिन

जवाबों:


10

मैं उन संख्याओं के बहुत करीब पहुंचने में कामयाब रहा, जिनकी मुझे उम्मीद थी।

मैं 400MB / सेकंड की तलाश कर रहा था और 392MB / सेकंड प्रबंधित कर रहा था । तो मैं कहता हूं कि समस्या हल है। कैश डिवाइस के बाद के जोड़ के साथ, मैंने 458MB / सेकंड रीड (कैश्ड मेरा मानना ​​है) का प्रबंधन किया।

1. यह पहली बार में ZFS डेटासेट recordsizeमान बढ़ाकर प्राप्त किया गया था1M

zfs set recordsize=1M pool2/test

मेरा मानना ​​है कि इस परिवर्तन के परिणामस्वरूप कम डिस्क गतिविधि होती है, इस प्रकार अधिक कुशल बड़े सिंक्रोनस रीड और लिखते हैं। बिल्कुल वही जो मैं पूछ रहा था।

परिवर्तन के बाद परिणाम

  • bonnie ++ = 226MB लिखना, 392MB पढ़ना
  • dd = 260MB लिखना, 392MB पढ़ना
  • 2 प्रक्रियाओं में समानांतर = 227MB लिखना, 396MB पढ़ना

2. जब मैंने कैश डिवाइस (120GB SSD) जोड़ा तो मैं और भी बेहतर तरीके से प्रबंधित हुआ। यह लेख काफी धीमा है, मुझे यकीन नहीं है कि क्यों।

Version  1.97       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
igor            63G           208325  48 129343  28           458513  35 326.8  16

कैश डिवाइस के साथ चाल /etc/modprobe.d/zfs.confl2arc_noprefetch=0 में सेट करना था । यह ZFS को स्ट्रीमिंग / अनुक्रमिक डेटा को कैश करने की अनुमति देता है। ऐसा तभी करें जब आपका कैश डिवाइस आपके ऐरे से ज्यादा तेज हो, जैसे मेरा।

मेरे डेटासेट में रिकॉर्ड परिवर्तन से लाभान्वित होने के बाद, मैंने सोचा कि यह खराब zvol प्रदर्शन से निपटने का एक समान तरीका हो सकता है।

मैं गंभीर लोगों का उल्लेख करते हुए आया कि उन्होंने एक का उपयोग करके अच्छा प्रदर्शन प्राप्त किया है volblocksize=64k, इसलिए मैंने इसकी कोशिश की। कोई भाग्य नहीं।

zfs create -b 64k -V 120G pool/volume

लेकिन फिर मैंने पढ़ा कि ext4 (मैं जिस फाइलसिस्टम के साथ परीक्षण कर रहा था) RAID जैसे strideऔर के लिए विकल्पों का समर्थन करता है stripe-width, जिनका मैंने पहले कभी उपयोग नहीं किया है। इसलिए मैंने इस साइट का उपयोग आवश्यक सेटिंग्स की गणना करने के लिए किया: https://busybox.net/~aldot/mkfs_stride.html और zvol को फिर से स्वरूपित किया।

mkfs.ext3 -b 4096 -E stride=16,stripe-width=32 /dev/zvol/pool/volume

मैं bonnie++एक साधारण बेंचमार्क करने के लिए दौड़ा और परिणाम बहुत अच्छे थे। मेरे दुर्भाग्य से मेरे पास परिणाम नहीं हैं, लेकिन वे कम से कम 5-6x तेजी से लिखते हैं क्योंकि मुझे याद है। यदि मैं फिर से बेंचमार्क करता हूं तो मैं इस उत्तर को फिर से अपडेट करूंगा।


1
अगर मैं आपको लगभग एक साल बाद वापस आने के लिए एक अतिरिक्त +1 दे सकता हूं और इस तरह का विस्तृत उत्तर लिख सकता हूं, तो मैं करूंगा। धन्यवाद!
जेड डेनियल्स

0

आपके परिणाम पूरी तरह से उचित हैं, जबकि आपकी उम्मीद नहीं है: आप RAID1 द्वारा दिए गए रीड परफॉर्मेंस सुधार (और, विस्तार से, RAID10 द्वारा) को ओवरस्टेट करते हैं। मुद्दा यह है कि एक 2-तरफा मिररिंग 2x पर अधिकांश एकल डिस्क की रीड गति / IOP देता है, लेकिन वास्तविक दुनिया का प्रदर्शन 1x-2x के बीच कहीं भी हो सकता है।

एक उदाहरण से स्पष्ट करते हैं। 2-मिरर मिरर वाले सिस्टम की कल्पना करें, जिसमें प्रत्येक डिस्क 100 एमबी / एस (अनुक्रमिक) और 200 आईओपीएस में सक्षम हो। 1 की कतार की गहराई के साथ (अधिकतम एक एकल, बकाया अनुरोध) इस सरणी का एकल डिस्क पर कोई लाभ नहीं होगा : RAID1 दो डिस्क की कतार पर IO अनुरोधों को विभाजित करता है, लेकिन यह दो डिस्क (कम से कम) पर एक भी अनुरोध को विभाजित नहीं करता है ; किसी भी कार्यान्वयन मैं इस तरीके से व्यवहार देखा)। दूसरी तरफ, यदि आपकी IO कतार बड़ी है (जैसे: आपके पास 4/8 बकाया अनुरोध हैं), कुल डिस्क थ्रूपुट एकल डिस्क की तुलना में काफी अधिक होगा।

एक समान बिंदु RAID0 के लिए किया जा सकता है, लेकिन इस मामले में जो औसत सुधार निर्धारित करता है वह न केवल कतार आकार का एक कार्य है, बल्कि आईओ अनुरोध आकार भी है : यदि आपका औसत आईओ आकार चंक आकार से कम है, तो यह धारीदार नहीं होगा। दो (या अधिक) डिस्क पर, लेकिन इसे एक ही द्वारा परोसा जाएगा। बढ़े हुए बोनी ++ रिकॉर्ड के साथ आपके परिणाम इस सटीक व्यवहार को दर्शाते हैं: स्ट्रिपिंग से बड़े IO आकार में बहुत लाभ होता है।

अब यह स्पष्ट होना चाहिए कि एक RAID10 सरणी में दो RAID स्तर के संयोजन से रैखिक प्रदर्शन स्केलिंग नहीं होगी , लेकिन यह इसके लिए एक ऊपरी सीमा निर्धारित करता है। मुझे पूरा यकीन है कि यदि आप एकाधिक dd / bonnie ++ इंस्टेंस चलाते हैं (या fioसीधे IO कतार में हेरफेर करने के लिए उपयोग करते हैं) तो आपके पास अपनी मूल अपेक्षा के साथ अधिक इन-लाइन परिणाम होंगे, बस इसलिए कि आप अपने IO सरणी को अधिक पूर्ण तरीके से कर देंगे ( एकाधिक oustanding अनुक्रमिक / यादृच्छिक IO अनुरोध), इसे एकल लोड करने के बजाय, क्रमिक IO अनुरोध अकेले।


मेरी उम्मीदें लगभग वही थीं जो मुझे मिलीं - 400MB / सेकंड। मुझे 392MB / सेकंड मिलता है। उचित लगता है। बहुत ही उचित। मैंने समानांतर में कई dd और bonnie ++ प्रक्रियाएं भी चलाईं और किसी भी प्रदर्शन में सुधार नहीं देखा। आपने यह नहीं बताया है कि zvol का प्रदर्शन इतना खराब क्यों है।
रयान बबचिशिन

आपको 392 एमबी / एस केवल एक बड़े रिकॉर्ड (> = 1 एमबी / एस) के साथ बोनी ++ का उपयोग करके मिलता है, और मैंने आपको बताया कि क्यों। ZVOL पर EXT4 एक कॉन्फ़िगरेशन है जिसे मैंने कभी भी परीक्षण नहीं किया, इसलिए मैंने इसे अन्य लोगों को टिप्पणी करने के लिए छोड़ दिया।
शोदांशोक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.