डॉकटर कंटेनर की रनटाइम प्रदर्शन लागत क्या है?


511

मैं एक डॉक कंटेनर के रन-टाइम प्रदर्शन लागत को व्यापक रूप से समझना चाहता हूं। मैं नेटवर्किंग के संदर्भ में पाया गया है anecdotally ~ 100 धीमी है

मैंने रन-टाइम लागत को "नगण्य" और "शून्य के करीब" होने के संदर्भ में भी पाया है, लेकिन मैं अधिक सटीक रूप से जानना चाहता हूं कि इसकी लागत क्या है। आदर्श रूप से मैं जानना चाहूंगा कि प्रदर्शन लागत के साथ क्या डॉकटर सार कर रहा है और प्रदर्शन लागत के बिना सार की गई चीजें। नेटवर्किंग, सीपीयू, मेमोरी आदि।

इसके अलावा, अगर वहाँ अमूर्त लागत कर रहे हैं, वहाँ अमूर्त लागत के आसपास पाने के लिए तरीके हैं। उदाहरण के लिए, शायद मैं सीधे डॉकर में डिस्क बनाम माउंट कर सकता हूं।



1
@GoloRoden यह प्रश्न समान है लेकिन बिल्कुल समान नहीं है। मैं "एक अतिरिक्त परत के माध्यम से नेटवर्किंग पारित किया जा रहा है" जैसे कारणों के साथ विलंबता लागतों की तलाश कर रहा हूं, जबकि उस प्रश्न का स्वीकृत उत्तर कंटेनर + ऐप की लागतों को मापने के बारे में अधिक है।
ल्यूक होर्स्टन

1
ठीक है, यह सही है। मैंने अपना करीबी वोट वापस ले लिया।
गोलो रोडेन

8
मुझे खुशी है कि आपने इसे पोस्ट किया है। यह प्रश्न मेरी खोज में नहीं आया। माप / मैट्रिक्स लेख सुपर उपयोगी है: blog.docker.io/2013/10/gathering-lxc-docker-containers-metrics
ल्यूक होर्स्टन

1
यह एक अच्छा सत्र है, जिसका शीर्षक "लिनक्स कंटेनर - क्लाउड के लिए नेक्स्टजेन वर्चुअलाइजेशन" है जिसमें
डॉकटर

जवाबों:


449

फेल्टर एट अल द्वारा एक उत्कृष्ट 2014 आईबीएम शोध पत्र " वर्चुअल मशीनों और लिनक्स कंटेनरों की एक प्रदर्शन कार्यक्षमता की तुलना "। नंगे धातु, केवीएम और डॉकटर कंटेनरों के बीच तुलना प्रदान करता है। सामान्य परिणाम यह है: डॉकर मूल प्रदर्शन के समान है और हर वर्ग में केवीएम से तेज है।

इसका अपवाद डॉकर का NAT है - यदि आप पोर्ट मैपिंग (जैसे docker run -p 8080:8080) का उपयोग करते हैं , तो आप विलंबता में मामूली हिट की उम्मीद कर सकते हैं, जैसा कि नीचे दिखाया गया है। हालाँकि, अब आप होस्ट नेटवर्क स्टैक का उपयोग कर सकते हैं (जैसे, docker run --net=host) डॉकटर कंटेनर को लॉन्च करते समय, जो मूल रूप से नेटिव कॉलम में प्रदर्शित होगा (जैसा कि रेडिस लेटेंसी के परिणाम नीचे दिखाया गया है)।

डॉकर नेट ओवरहेड

उन्होंने रेडिस जैसी कुछ विशिष्ट सेवाओं पर विलंबता परीक्षण भी चलाया। आप देख सकते हैं कि 20 से ऊपर क्लाइंट थ्रेड्स में, सबसे अधिक विलंबता ओवरहेड डॉकटर NAT, फिर KVM, फिर डॉक होस्ट / देशी के बीच एक मोटा टाई होता है।

डॉकर रेडिस लेटेंसी ओवरहेड

सिर्फ इसलिए कि यह वास्तव में उपयोगी कागज है, यहां कुछ अन्य आंकड़े हैं। कृपया इसे पूर्ण एक्सेस के लिए डाउनलोड करें।

डिस्क I / O पर एक नज़र रखना:

डॉकर बनाम केवीएम बनाम मूल I / O प्रदर्शन

अब सीपीयू ओवरहेड को देख रहे हैं:

डॉकर सीपीयू ओवरहेड

अब स्मृति के कुछ उदाहरण (विवरण के लिए कागज पढ़ें, स्मृति अतिरिक्त मुश्किल हो सकती है):

डॉकर मेमोरी तुलना


20
कागज में दिए गए लिनपैक नंबरों के लिए ... स्पष्ट रूप से, मुझे लगता है कि उन्हें विश्वास करना मुश्किल है (ऐसा नहीं है कि मुझे विश्वास है कि वे क्या लिनपैक उत्सर्जित होते हैं, लेकिन मुझे विश्वास है कि परीक्षण वास्तव में कुछ भी नहीं बल्कि अस्थायी बिंदु को माप रहा था प्रदर्शन किया)। केवीएम से प्रमुख ओवरहेड यूजरस्पेस हार्डवेयर इम्यूलेशन घटकों (जो केवल गैर-सीपीयू हार्डवेयर पर लागू होता है ) में है; मेमोरी पेजिंग के आसपास महत्वपूर्ण ओवरहेड है ... लेकिन कच्चे फ़्लोटिंग पॉइंट? मैं देखना चाहता हूं कि वास्तव में वहां क्या चल रहा था - शायद अत्यधिक संदर्भ स्विच।
चार्ल्स डफी

2
वर्तमान डॉकर सीएलआई सिंटैक्स के लिए सुधार: --net=host(दो डैश) और -p 8080:8080(एनएटी के लिए निचला मामला 'पी')।
bk0

6
उद्धृत आईबीएम पेपर नेटवर्क IO पर भी केंद्रित है। यह कभी भी संदर्भ स्विच को संबोधित नहीं करता है। हमने LXC को देखा और गैर-स्वैच्छिक संदर्भ स्विच के बढ़ने के कारण इसे जल्दी से छोड़ देना पड़ा, जिसके परिणामस्वरूप अपमानजनक अनुप्रयोग प्रसंस्करण हुआ।
एरिक

3
मैं फाइलसिस्टम ऑपरेशन्स के बारे में भी उत्सुक हूँ - उदाहरण के लिए डायरेक्टरी लुक्स, एक ऐसी जगह हैं जहाँ मैं ओवरहेड देखने की उम्मीद करूँगा; ब्लॉक-लेवल पढ़ता है, लिखता है और तलाश करता है (जो दिए गए चार्ट पर बहुत ध्यान केंद्रित करते हैं) नहीं हैं
चार्ल्स डफी

12
मुझे एक ही शेड के रंग से प्यार है। भेद करना इतना आसान है
विक्टर जोरास

104

डॉकर वर्चुअलाइजेशन नहीं है, जैसे - इसके बजाय, यह विभिन्न प्रक्रिया नामस्थान, उपकरण नामस्थान, आदि के लिए कर्नेल के समर्थन के शीर्ष पर एक अमूर्त है; एक नाम स्थान दूसरे की तुलना में स्वाभाविक रूप से अधिक महंगा या अक्षम नहीं है, इसलिए डॉकर का प्रदर्शन प्रभाव वास्तव में क्या है यह उन नामस्थानों में वास्तव में क्या है, का मामला है ।


अपने कंटेनरों के लिए नाम स्थान को कैसे कॉन्फ़िगर करता है, इसके संदर्भ में डॉकर की पसंद, लेकिन वे लागतें सभी सीधे लाभ से जुड़ी हैं - आप उन्हें छोड़ सकते हैं, लेकिन ऐसा करने में आप संबंधित लाभ भी छोड़ देते हैं:

  • स्तरित फाइलसिस्टम महंगे हैं - वास्तव में हर एक के साथ लागत अलग-अलग होती है (और डॉकर कई बैकएंड का समर्थन करता है), और आपके उपयोग के पैटर्न (कई बड़ी निर्देशिकाओं का विलय, या फाइलसिस्टम के बहुत गहरे सेट को मर्ज करना विशेष रूप से महंगा होगा), लेकिन वे 'आजाद नहीं। दूसरी ओर, डॉकर्स की कार्यक्षमता का एक बड़ा सौदा - एक कॉपी-ऑन-राइट तरीके से मेहमानों को अन्य मेहमानों से दूर करने में सक्षम होना, और इस लागत का भुगतान करने पर स्टोरेज फायदे एक ही सवारी में प्राप्त करना।
  • DNAT पैमाने पर महंगा हो जाता है - लेकिन आपको अपने मेजबान के स्वतंत्र रूप से अपने मेहमान की नेटवर्किंग को कॉन्फ़िगर करने में सक्षम होने का लाभ देता है और आपके बीच केवल उन बंदरगाहों को अग्रेषित करने के लिए एक सुविधाजनक इंटरफ़ेस है। आप इसे एक पुल के साथ एक भौतिक इंटरफ़ेस में बदल सकते हैं, लेकिन फिर से, लाभ खो देते हैं।
  • प्रत्येक सॉफ्टवेयर स्टैक को सबसे सुविधाजनक तरीके से स्थापित निर्भरता के साथ चलाने में सक्षम होने के नाते - मेजबान के डिस्ट्रो, लिबक और अन्य पुस्तकालय संस्करणों से स्वतंत्र - एक महान लाभ है, लेकिन साझा पुस्तकालयों को एक से अधिक बार लोड करने की आवश्यकता है (जब उनके संस्करण भिन्न) की वह लागत है जिसकी आपको अपेक्षा थी।

इत्यादि। ये लागत वास्तव में आपके वातावरण में आपको कितना प्रभावित करती है - आपके नेटवर्क एक्सेस पैटर्न, आपकी मेमोरी की कमी आदि के साथ - एक ऐसा आइटम है जिसके लिए एक सामान्य उत्तर देना मुश्किल है।


2
यह एक अच्छा जवाब है, लेकिन मैं अधिक विशिष्ट संख्या और बेंचमार्क की तलाश कर रहा हूं। मैं cgroups की लागत से परिचित हूं, लेकिन Docker इससे अधिक है जैसा आपने बताया है। उत्तर के लिए बहुत बहुत धन्यवाद।
ल्यूक होर्स्टन

6
ज़रूर। मेरा कहना है कि आपके द्वारा पाया जाने वाला कोई भी सामान्यीकृत मानदंड किसी भी विशिष्ट अनुप्रयोग के लिए बहुत सीमित प्रयोज्यता का होगा - लेकिन यह कहना नहीं है कि मैं उन्हें प्रदान करने की कोशिश कर रहे लोगों से असहमत हूं, लेकिन केवल यह कि उन्हें नमक के एक बड़े चम्मच के साथ लिया जाना चाहिए।
चार्ल्स डफी

1
उस तरीके से आप कह सकते हैं कि KVM "वर्चुअलाइजेशन नहीं है। यह x86 वर्चुअल टेक्नोलॉजी कॉल के शीर्ष पर एक अमूर्तता है"।
वड

10
@Vad, वहाँ आम सहमति है, वापस दशकों (आईबीएम के प्रारंभिक गैर- x86 हार्डवेयर कार्यान्वयनों के लिए!), कि हार्डवेयर परत पर सीधे अमूर्तता प्रदान करना स्पष्ट रूप से वर्चुअलाइजेशन है। कर्नेल-स्तरीय नेमस्पेसिंग के चारों ओर शब्दावली के लिए सहमति काफी अधिक खंडित है - हम अपने व्यक्तिगत विचारों के पक्ष में प्रत्येक बिंदु पर सूत्रों को बता सकते हैं - लेकिन स्पष्ट रूप से, उपयोगी तकनीकी अंतर (सुरक्षा और प्रदर्शन विशेषताओं दोनों के आसपास) हैं जो एक ही शब्द के लिए आगे बढ़ेंगे। , इसलिए मैं अपनी स्थिति को तब तक धारण कर रहा हूं जब तक कि इसके विपरीत उद्योग सहमति नहीं बन जाती।
चार्ल्स डफी

@LukeHersten, ... सही है, यह महत्वपूर्ण लागत वाले cgroups नहीं है, यह नेटवर्क और फाइल सिस्टम नेमस्पेस की सामग्री अधिक है। लेकिन उन लागतों पर लगभग पूरी तरह से निर्भर करता है कि कैसे डॉकर कॉन्फ़िगर किया गया है - जो विशिष्ट बैकएंड आप उपयोग कर रहे हैं। उदाहरण के लिए, डॉकर की डिफ़ॉल्ट NAT की तुलना में ब्रिजिंग बहुत सस्ता है; और विभिन्न फाइल सिस्टम का प्रदर्शन ओवरहेड भी बेतहाशा भिन्न होता है (और कुछ मामलों में, ओवरहेड की मात्रा उपयोग के पैटर्न पर निर्भर करती है; ओवरलेफ़्स वेरिएंट कई परतों एफ / ई के माध्यम से संशोधित बड़ी निर्देशिकाओं के साथ अधिक महंगा हो सकता है)।
चार्ल्स डफी

20

यहाँ कुछ और भी है मानक के लिए Docker based memcached serverबनाम host native memcached serverTwemperf बेंचमार्क उपकरण का उपयोग कर https://github.com/twitter/twemperf 5000 कनेक्शन और 20k कनेक्शन की दर के साथ

डॉक बेस्ड मेमकेड के लिए ओवरहेड कनेक्ट करें लगता है कि लगभग दो बार मूल गति से ऊपर व्हाइटपैपर से सहमत हैं।

Twemperf Docker Memcached

Connection rate: 9817.9 conn/s
Connection time [ms]: avg 341.1 min 73.7 max 396.2 stddev 52.11
Connect time [ms]: avg 55.0 min 1.1 max 103.1 stddev 28.14
Request rate: 83942.7 req/s (0.0 ms/req)
Request size [B]: avg 129.0 min 129.0 max 129.0 stddev 0.00
Response rate: 83942.7 rsp/s (0.0 ms/rsp)
Response size [B]: avg 8.0 min 8.0 max 8.0 stddev 0.00
Response time [ms]: avg 28.6 min 1.2 max 65.0 stddev 0.01
Response time [ms]: p25 24.0 p50 27.0 p75 29.0
Response time [ms]: p95 58.0 p99 62.0 p999 65.0

Twemperf Centmin Mod Memcached

Connection rate: 11419.3 conn/s
Connection time [ms]: avg 200.5 min 0.6 max 263.2 stddev 73.85
Connect time [ms]: avg 26.2 min 0.0 max 53.5 stddev 14.59
Request rate: 114192.6 req/s (0.0 ms/req)
Request size [B]: avg 129.0 min 129.0 max 129.0 stddev 0.00
Response rate: 114192.6 rsp/s (0.0 ms/rsp)
Response size [B]: avg 8.0 min 8.0 max 8.0 stddev 0.00
Response time [ms]: avg 17.4 min 0.0 max 28.8 stddev 0.01
Response time [ms]: p25 12.0 p50 20.0 p75 23.0
Response time [ms]: p95 28.0 p99 28.0 p999 29.0

यहां मेमोरियर बेंचमार्क टूल का उपयोग करते हुए बानमार्क बनाए गए हैं

memtier_benchmark docker Memcached

4         Threads
50        Connections per thread
10000     Requests per thread
Type        Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
------------------------------------------------------------------------
Sets       16821.99          ---          ---      1.12600      2271.79
Gets      168035.07    159636.00      8399.07      1.12000     23884.00
Totals    184857.06    159636.00      8399.07      1.12100     26155.79

memtier_benchmark Centmin Mod Memcached

4         Threads
50        Connections per thread
10000     Requests per thread
Type        Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
------------------------------------------------------------------------
Sets       28468.13          ---          ---      0.62300      3844.59
Gets      284368.51    266547.14     17821.36      0.62200     39964.31
Totals    312836.64    266547.14     17821.36      0.62200     43808.90

1
वे मेम्केड के दो अलग-अलग बिल्ड की तुलना करते हैं, और डॉकटर में भी उनमें से एक, डॉकटर के बाहर, वे नहीं हैं?
san

4
क्या ये परिणाम होस्ट नेटवर्किंग या docker में ब्रिज नेटवर्किंग के साथ हैं?
उर्फ़हन

13
इस तरह के बड़े stddevs के साथ ये माप कोई प्रतिनिधित्व योग्य डेटा नहीं दिखाते हैंavg 200.5 min 0.6 max 263.2 stddev 73.85
सर्गेई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.