מדדי nftlb ומפתחות ביצועים

פורסם ב-28 ביוני, 2018

מבחני ביצועים

אמות מידה של Latests, מיום יוני 2018, מראות שיפור חשוב בביצועים בשימוש בטבלאות כנתיב נתונים במקום iptables.

בהתחשב בסביבת בדיקת בדיקה של 2 לקוחות המפעילים כלי מתח עומס HTTP, איזון עומס אחד ו -1 גבנים עם מסוף HTTP המספק תגובה של כ -3 בתים, אנו מקבלים את המדדים הבאים ב 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 מאשר ב- nftables. אך בנוסף, ישנם מקשי ביצועים נוספים שיוסברו בהמשך.

אופטימיזציה של כללים

מפתח הביצועים העיקרי הוא מיטוב הכללים. היה ידוע כבר ב- iptables שהשימוש ב- ipset מגביר את הביצועים מכיוון שהוא מקטין את עיבוד הכללים הרציפים.

ב- nftlb, למרות שניתן להרחיב אותו לשימוש למטרות אחרות, קבענו כללים בסיסיים לכל שירות וירטואלי תוך שימוש בשפה האקספרסיבית התומכת באופן מקורי בשימוש בערכות ומפות. אנא ראה להלן את הכללים שנוצרו עבור a שירות tcp וירטואלי בשם vs01 עם 2 backends:

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 }
    }
}

ברגע שעלינו להוסיף backend חדש, פשוט התחדש את השרשרת המשויכת לשירות הווירטואלי ללא הכללת כללים חדשים ומבלי להשפיע על שאר השירותים הווירטואליים האחרים.

    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 מאפשר שימוש מוקדם וו כניסה המשמש ב- nftlb בתרחישים של DSR.

כמו כן, ניתן להשתמש בוו מוקדם זה למטרות סינון המגבירות את הביצועים במקרים של זריקת מנות. זה מופיע להלן עם השלב המוקדם ביותר של מקרי iptables ו- nftables במנות בשנייה:

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

טכניקות האצה

עדיין יש יותר מקום לאופטימיזציה, מכיוון ש- nftables כבר תומכים בנתיבים מהירים ובטכניקות קלות המשמשות להתעסק במנה. כדוגמאות לכך הן:

שולחנות זרימה. התחבר דרך מהירה להאציל קשרים שכבר הוקמו לשלב הכניסה מבלי לעבור את כל הנתיב האיטי. מידע נוסף כאן.

NAT חסר מדינה. במקרים מסוימים של איזון עומסים, ניתן לבצע נט חסר מדינה ללא מעקב אחר חיבור ומשלב הכניסה כדי להשיג את כל הביצועים המופעלים על תרחישי NAT.

תשתף:

תיעוד על פי תנאי הרישיון לשימוש חופשי במסמכים של גנו.

האם המאמר הזה היה מועיל?

מאמרים נוספים