nftlb बेंचमार्क और प्रदर्शन कुंजी

द्वारा प्रकाशित किया गया था Zevenet | 28 जून, 2018

मानक

लेटैस्ट बेंचमार्क, दिनांकित जून 2018, iptables के बजाय डेटा पथ के रूप में nftables का उपयोग करने में प्रदर्शन का एक महत्वपूर्ण सुधार दिखाते हैं।

2 क्लाइंट के HTTP लोड स्ट्रेस टूल, 1 लोड बैलेंसर और 3 को एक HTTP टर्मिनेटर के साथ 210 बाइट्स के बारे में प्रतिक्रिया देने के लिए एक परीक्षणित वातावरण को देखते हुए, हम निम्नलिखित बेंचमार्क प्राप्त करते हैं HTTP प्रति सेकंड बहती है:

iptables DNAT		256.864,07 RPS / cpu
iptables SNAT		262.088,94 RPS / cpu

nftables DNAT		560.976,44 RPS / cpu
nftables SNAT		608.941,57 RPS / cpu
nftables DSR		7.302.517,31 RPS / cpu

ऊपर दिए गए आंकड़े भौतिक सीपीयू के अनुसार दर्शाए गए हैं, क्योंकि कोर जोड़ने की क्षमता लगभग रेखीय है। हालाँकि इन बेंचमार्क को केवल 3 बैकेंड के साथ ही प्रदर्शित किया गया है, अधिक बैकएंड जोड़ते समय iptables का प्रदर्शन काफी हद तक कम हो जाएगा, क्योंकि वे अधिक अनुक्रमिक नियमों का अर्थ करते हैं।

उन बेंचमार्क को रेटपॉलिन डिसेबल (नो स्पेक्टर / मेल्टडाउन मिटिगेशंस) के साथ प्रदर्शित किया गया था, लेकिन एक बार जब वे NAT मामलों में पाए जाने वाले प्रदर्शन के दंड को सक्षम कर लेते हैं, तो दोनों iptables और nftables मामलों के लिए सक्षम किए गए कन्वर्टर पहले वाले के लिए बहुत खराब होते हैं:

iptables: 40.77% CPU penalty
nftables: 17.27% CPU penalty

प्रदर्शन कुंजी

नेफ्टीबल्स की तुलना में iptables में बहुत अधिक अप्रत्यक्ष कॉल के उपयोग के कारण रेटपॉलिन दंड की व्याख्या की जाती है। लेकिन इसके अलावा, कुछ और प्रदर्शन कुंजियाँ हैं जिन्हें नीचे समझाया जाएगा।

नियम अनुकूलन

मुख्य प्रदर्शन कुंजी नियम अनुकूलन है। यह पहले से ही iptables में जाना जाता था कि ipset का उपयोग प्रदर्शन को बढ़ाता है क्योंकि यह अनुक्रमिक नियमों के प्रसंस्करण को कम करता है।

एनएफटीएलबी में, हालांकि इसे अन्य उद्देश्यों के लिए उपयोग करने के लिए बढ़ाया जा सकता है, हम अभिव्यंजक भाषा का उपयोग करके प्रति आभासी सेवा के लिए एक बुनियादी नियम निर्धारित करते हैं जो मूल रूप से सेट और नक्शे के उपयोग का समर्थन करता है। कृपया नीचे दिए गए नियमों को देखें 01 बैकेंड के साथ vs2 नाम की वर्चुअल tcp सर्विस:

table ip nftlb {
    map tcp-services {
        type ipv4_addr . inet_service : verdict
        elements = { 192.168.0.100 . http : goto vs01 }
    }

    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        ip daddr . tcp dport vmap @tcp-services
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
    }

    chain vs01 {
        dnat to jhash ip saddr mod 2 map { 0 : 192.168.1.10, 1 : 192.168.1.11 }
    }
}

एक बार हमें एक नया बैकएंड जोड़ने की आवश्यकता होती है, बस नए नियमों को शामिल किए बिना और अन्य वर्चुअल सेवाओं के बाकी हिस्सों को प्रभावित किए बिना संबंधित सेवा को वर्चुअल सेवा में पुन: उत्पन्न करें।

    chain vs01 {
        dnat to jhash ip saddr mod 3 map { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 }
    }

फिर, अगर एक नई आभासी सेवा vs02 नए नियमों को जोड़ने या अन्य आभासी सेवाओं को प्रभावित किए बिना, इसके बाद नियम बनाए जाते हैं, जैसा कि नीचे दिखाया गया है।

table ip nftlb {
    map tcp-services {
        type ipv4_addr . inet_service : verdict
        elements = { 192.168.0.100 . http : goto vs01,
                     192.168.0.102 . https : goto vs02 }
    }

    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        ip daddr . tcp dport vmap @tcp-services
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
    }

    chain vs01 {
        dnat to jhash ip saddr mod 3 map { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 }
    }

    chain vs02 {
        dnat to jhash ip saddr mod 2 map { 0 : 192.168.2.10, 1 : 192.168.2.11 }
    }
}

शुरुआती हुक

nftables जल्दी के उपयोग की अनुमति देता है हुक लगाना इसका उपयोग डीएसआर परिदृश्यों के दौरान एनएफटीएलबी में किया जाता है।

इसके अलावा, इस शुरुआती हुक का उपयोग फ़िल्टरिंग उद्देश्यों के लिए किया जा सकता है जो पैकेट छोड़ने के मामलों में प्रदर्शन को बढ़ाता है। यह पैकेट में प्रति सेकंड iptables और nftables मामलों के सबसे शुरुआती चरण के साथ नीचे दिखाया गया है:

iptables prerouting raw drop: 38.949.054,35 PPS
nftables ingress drop: 45.743.628,64 PPS

त्वरण तकनीक

अनुकूलन के लिए अभी भी अधिक जगह है, वास्तव में, के रूप में नेफ्टेबल्स पहले से ही तेज पथ और हल्के तकनीकों का समर्थन करते हैं जो पैकेट मैनबलिंग के लिए उपयोग किए जा सकते हैं। उस के उदाहरण हैं:

Flowtables। पूरे धीमी गति से पथ से गुजरने के बिना पहले से स्थापित कनेक्शन को सौंपने के लिए कॉनट्रैक फास्ट पथ। अधिक जानकारी यहां.

स्टेटलेस नैट। कुछ लोड बैलेंसिंग मामलों के लिए, स्टेटलेस नैट को कनेक्शन ट्रैकिंग के बिना और नैट परिदृश्यों पर लागू किए गए सभी प्रदर्शन को प्राप्त करने के लिए इनग्रेस स्टेज से किया जा सकता है।

पर साझा करें:

GNU फ्री डॉक्यूमेंटेशन लाइसेंस की शर्तों के तहत प्रलेखन।

क्या यह लेख सहायक था?

संबंधित आलेख