מבחני ביצועים
אמות מידה של 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.