"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावा xvs आर्म के साथ AWS लैम्ब्डा प्रदर्शन- भाग प्रारंभिक माप

जावा xvs आर्म के साथ AWS लैम्ब्डा प्रदर्शन- भाग प्रारंभिक माप

2024-08-02 को प्रकाशित
ब्राउज़ करें:371

AWS Lambda performance with Java  xvs arm- Part nitial measurements

परिचय

अब तक मैंने आर्म64 आर्किटेक्चर के लिए कुछ उपयोग मामलों (जैसे डायनेमोडीबी अनुरोध करना) के लिए जावा 21 रनटाइम का उपयोग करके लैम्ब्डा फ़ंक्शन के प्रदर्शन (गर्म और ठंडे प्रारंभ समय) को नहीं मापा है क्योंकि यह स्नैपस्टार्ट का समर्थन नहीं करता है। स्नैपस्टार्ट सक्षम के साथ x86_64 आर्किटेक्चर के साथ जावा 21 रनटाइम के साथ लैम्ब्डा आर्म64 आर्किटेक्चर के साथ लैम्ब्डा से बेहतर प्रदर्शन करेगा (अतिरिक्त प्राइमिंग ऑप्टिमाइज़ेशन के साथ और भी अधिक)। लेकिन 18 जुलाई, 2024 को, AWS ने घोषणा की कि AWS लैम्ब्डा अब ARM64 आर्किटेक्चर का उपयोग करने वाले जावा फ़ंक्शंस के लिए स्नैपस्टार्ट का समर्थन करता है। तो अब मेरे लिए लैम्ब्डा फ़ंक्शन की वास्तुकला की पसंद पर विचार करते हुए ठंड और गर्म शुरुआत के समय को मापना शुरू करना समझ में आया। यह ज्ञात है कि वर्तमान AWS लैम्ब्डा मूल्य निर्धारण मेमोरी सेटिंग और निष्पादन अवधि के साथ, Arm64 आर्किटेक्चर के साथ लैम्ब्डा लगभग होगा। x86_64 आर्किटेक्चर के साथ लैम्ब्डा से 25% सस्ता।

मैंने इसके लिए अलग लेख श्रृंखला बनाने का निर्णय लिया और इस विषय को अपनी लगातार बढ़ती AWS लैम्ब्डा स्नैपस्टार्ट श्रृंखला में नहीं जोड़ने का निर्णय लिया।

उदाहरण के अनुप्रयोग के लिए ठंड और गर्मी को मापना शुरू होता है

अपने प्रयोग में हम लेख एडब्ल्यूएस लैम्ब्डा स्नैपस्टार्ट - जावा 21 लैम्ब्डा कोल्ड स्टार्ट को मापने में प्रस्तुत एप्लिकेशन का पुन: उपयोग करेंगे। नमूना आवेदन के लिए कोड यहां दिया गया है। मूल रूप से 2 मुख्य लैम्ब्डा फ़ंक्शन हैं जो दिए गए आईडी के साथ उत्पाद बनाने के लिए एपीआई गेटवे अनुरोधों का जवाब देते हैं (PutProductFunction लैम्ब्डा फ़ंक्शन देखें) और दिए गए आईडी द्वारा उत्पाद को पुनर्प्राप्त करते हैं (GetProductByIdFunction लैम्ब्डा फ़ंक्शन देखें)। आप स्नैपस्टार्ट सक्षम होने के साथ और उसके बिना दोनों लैम्ब्डा फ़ंक्शन का उपयोग कर सकते हैं। एक अतिरिक्त लैम्ब्डा फ़ंक्शन GetProductByIdWithPrimingFunction है जिसे मैंने स्नैपस्टार्ट सक्षम लैम्ब्डा फ़ंक्शन के लिए डायनेमोडीबी अनुरोध प्राइमिंग के प्रभाव को स्वतंत्र रूप से मापने के लिए लिखा था। आप मेरे लेख एडब्ल्यूएस लैम्ब्डा स्नैपस्टार्ट - प्राइमिंग, एंड टू एंड विलंबता और परिनियोजन समय को मापने में प्राइमिंग के प्रभाव के बारे में अधिक पढ़ सकते हैं।

सभी लैम्ब्डा फ़ंक्शंस पर स्नैपस्टार्ट सक्षम करने के लिए कृपया एसएएम टेम्पलेट में निम्नलिखित को अनटिप्पणी करें:

Globals:
  Function:
    CodeUri: target/aws-pure-lambda-snap-start-21-1.0.0-SNAPSHOT.jar
    ...
    SnapStart:
     ApplyOn: PublishedVersions  
   ...

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

सभी लैम्ब्डा फ़ंक्शन में शुरुआती बिंदु के रूप में निम्नलिखित सेटिंग्स होती हैं:

  • 1024 एमबी मेमोरी सेटिंग
  • डिफ़ॉल्ट HTTP Apache क्लाइंट का उपयोग DynamoDB डेटाबेस से बात करने के लिए किया जाता है
  • जावा संकलन विकल्प "-XX: TieredCompilation -XX:TieredStopAtLevel=1" जो ठंडे और गर्म शुरुआत समय के बीच बहुत अच्छा व्यापार प्रदान करने वाला साबित हुआ।

एसएएम टेम्पलेट में मैंने वैश्विक लैम्ब्डा फ़ंक्शन अनुभाग में लैम्ब्डा आर्किटेक्चर को परिभाषित करने की संभावना जोड़ी है:

Globals:
  Function:
    CodeUri: target/aws-pure-lambda-snap-start-21-1.0.0-SNAPSHOT.jar
    ...
    Architectures:
      #- arm64
      - x86_64   

बस उस आर्किटेक्चर को अनकम्मेंट करें जिसे आप अपने लैम्ब्डा फ़ंक्शंस के लिए उपयोग करना चाहते हैं।

भले ही जावा "एक बार लिखें, हर जगह चलाएं", फिर भी मैंने पहले से इंस्टॉल करके ग्रेविटॉन प्रोसेसर (जो आर्म64/आर्च64 आर्किटेक्चर पर आधारित है) के साथ टी4जी एडब्ल्यूएस ईसी2 इंस्टेंस पर अपने आर्म64 माप के लिए एप्लिकेशन जार फ़ाइल को संकलित और निर्मित किया है। Linux aarch64 के लिए Amazon Corretto 21। आप यह जार यहां पा सकते हैं।

मैंने उसी कोरेटो जावा 21 नवीनतम रनटाइम संस्करण का उपयोग करके तुलनीय परिणाम प्राप्त करने के लिए एक बार फिर से x86_64 आर्किटेक्चर के लिए सब कुछ फिर से मापा है, जो मेरे माप के समय जावा 21.v17 था। &&&]

नीचे दिए गए प्रयोग के परिणाम 100 से अधिक ठंडी और लगभग 100,000 गर्म शुरुआतों के पुनरुत्पादन पर आधारित थे। इसके लिए (और मेरे पिछले लेख के प्रयोगों से) मैंने लोड टेस्ट टूल का उपयोग किया, लेकिन आप जो भी टूल चाहें, उसका उपयोग कर सकते हैं, जैसे सर्वरलेस-आर्टिलरी या पोस्टमैन। यह जानना भी महत्वपूर्ण है कि मैंने एप्लिकेशन के ताज़ा स्रोत कोड (पुनः) परिनियोजन के ठीक बाद माप शुरू किया। कृपया ध्यान दें कि कोल्ड स्टार्ट पर स्नैपशॉट टियर कैश का भी प्रभाव पड़ता है, जहां पहले इनवोकेशन आम तौर पर धीमे होते हैं, और बाद वाले इनवोकेशन की निश्चित संख्या तक पहुंचने तक तेज हो जाते हैं।

अब "मौजूदा आईडी द्वारा उत्पाद प्राप्त करें" (स्नैपस्टार्ट सक्षम और प्राइमिंग माप के लिए लैम्ब्डा फ़ंक्शन GetProductByIdFunction और GetProductByIdWithPrimingFunction) मामले के लिए सभी माप एक साथ रखते हैं।

ठंडा (सी) और गर्म (एम) प्रारंभ समय एमएस में:

दृष्टिकोणसी पी50सी पी75सी पी90सी पी99c p99.9सी अधिकतमw p50w p75w p90w p99w p99.9अधिकतमx86_64, कोई स्नैपस्टार्ट सक्षम नहीं है3554.303615.213666.153800.474108.614111.785.426.016.8814.0940.981654.59arm64, कोई स्नैपस्टार्ट सक्षम नहीं है3834.813904.423983.264047.474332.134335.745.966.667.6916.0143.681844.54x86_64, स्नैपस्टार्ट बिना प्राइमिंग के सक्षम1794.091846.862090.542204.272239.802240.085.375.966.9315.8851.641578.34arm64, स्नैपस्टार्ट बिना प्राइमिंग के सक्षम1845.011953.182591.702762.912793.452795.85.916.567.6316.7563.521779.14x86_64, डायनेमोडीबी अनुरोध प्राइमिंग के साथ स्नैपस्टार्ट सक्षम803.18870.181103.781258.191439.951440.675.556.257.4515.5063.52448.85arm64, स्नैपस्टार्ट DynamoDB अनुरोध प्राइमिंग के साथ सक्षम है910.141001.791376.621623.441684.601686.196.056.727.8116.6674.68550.59
निष्कर्ष

इस लेख में हमने 3 उपयोग मामलों के लिए डायनेमोडीबी डेटाबेस से कनेक्ट होने वाले लैम्ब्डा फ़ंक्शन के ठंडे और गर्म प्रारंभ समय के माप की तुलना की:

    लैम्ब्डा फ़ंक्शन पर स्नैपस्टार्ट सक्षम किए बिना
  • लैम्ब्डा फ़ंक्शन पर स्नैपस्टार्ट सक्षम होने के साथ लेकिन प्राइमिंग ऑप्टिमाइज़ेशन के बिना
  • लैम्ब्डा फ़ंक्शन पर स्नैपस्टार्ट सक्षम होने के साथ और डायनेमोडीबी अनुरोध की प्राइमिंग के साथ
हमने देखा कि x86_64 आर्किटेक्चर का उपयोग करके सभी ठंडे और गर्म प्रारंभ समय आर्म64 आर्किटेक्चर की तुलना में कम थे। लेकिन चूंकि

arm64 आर्किटेक्चर लैम्ब्डा मूल्य निर्धारण x86_64 आर्किटेक्चर से 25% सस्ता है, यह बहुत दिलचस्प लागत-प्रदर्शन व्यापार बंद का परिचय देता है।

हमारे माप के लिए, सभी 3 उपयोग मामलों के लिए:

    आर्म64 आर्किटेक्चर के साथ लैम्ब्डा कोल्ड स्टार्ट टाइम कई प्रतिशत के लिए x86_64 आर्किटेक्चर की तुलना में केवल 10-20% (और केवल बहुत ही दुर्लभ मामलों में 25-27%) धीमा था।
  • Arm64 आर्किटेक्चर के साथ लैम्ब्डा वार्म स्टार्ट टाइम कई प्रतिशत के लिए x86_64 आर्किटेक्चर की तुलना में केवल 5-10% धीमा था।
इसलिए, इस नमूना अनुप्रयोग के लिए आर्म64 आर्किटेक्चर का चुनाव काफी उचित है। चूंकि आर्म64 आर्किटेक्चर के लिए स्नैपस्टार्ट समर्थन हाल ही में पेश किया गया है, इसलिए मुझे भविष्य में कुछ प्रदर्शन सुधारों की भी उम्मीद है। कृपया अपने उपयोग के मामले के लिए अपना माप स्वयं करें!

लेख के अगले भाग में हम समान प्रदर्शन माप करेंगे लेकिन लैम्ब्डा मेमोरी को 256 और 2048 एमबी के बीच विभिन्न मानों पर सेट करेंगे और परिणामों की तुलना करेंगे।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/aws-builders/aws-lambda-performance-with-java-21-x86-vs-arm64-part-1-initial-measurements-506?1यदि कोई है उल्लंघन, हटाने के लिए कृपया [email protected] से संपर्क करें
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3