TL;ดร การเจรจาอัตโนมัติถูกปิดบนสวิตช์ของฉัน และมีการตั้งค่าที่แนะนำโดยผู้ผลิตสำหรับการเชื่อมต่อ 40G การเปิดใช้การเจรจาอัตโนมัติช่วยแก้ปัญหาได้
ฉันต้องการตอบคำถามของฉันพร้อมรายละเอียดจากการผจญภัยในเส้นทางนี้เพื่อตั้งค่าเครือข่าย 40 กิกะบิต ด้วยวิธีนี้ใครก็ตามที่ลองทำสิ่งนี้ในอนาคตจะมีจุดอ้างอิง
ฉันคิดว่าสิ่งสำคัญคือต้องทราบว่าฉันใช้ 40G NIC ในโหมดอีเทอร์เน็ต ไม่ใช่ Infiniband ไดรเวอร์อีเธอร์เน็ตดูเหมือนจะใช้งานได้ แต่ฉันลงเอยด้วยไดรเวอร์ OFED เพราะมันใช้งานได้ ฉันไม่ต้องการยุ่งกับมันอีกต่อไป หากคุณวางแผนที่จะติดตั้งแบบนี้ ตรวจสอบให้แน่ใจ การ์ดของคุณรองรับโหมดอีเธอร์เน็ต!
สิ่งที่ฉันพยายาม
เมื่อฉันได้รับสวิตช์ NIC และสายเคเบิล ฉันติดตั้งไดรเวอร์/ซอฟต์แวร์ OFED (OpenFabrics Enterprise Distribution) ที่ Mellanox/Nvidia จัดหาให้ เมื่อสิ่งเหล่านั้นสร้างลิงก์ไม่สำเร็จ ฉันใช้เครื่องมือที่มีอยู่ในซอฟต์แวร์เพื่ออัปเดตเฟิร์มแวร์ มันค่อนข้างง่าย ปัญหาเดียวที่ฉันมีคือการหาไฟล์ .bin ของเฟิร์มแวร์ล่าสุดสำหรับการ์ดเฉพาะของฉัน เฟิร์มแวร์ที่ฉันใช้คือ 2.33.5000 ซึ่งค่อนข้างเก่าแต่ใหม่กว่าที่อยู่ในการ์ด
หลังจากนั้นก็ล้มเหลว ฉันคิดว่าสายเคเบิล/ตัวรับส่งสัญญาณ (หนึ่งหน่วย) เป็นตัวการ ฉันเปลี่ยนสายเคเบิลที่ฉันได้รับในตอนแรกเป็นคู่ (56G 10m AOC + 56G 2m DAC > 40G 11m AOC + 40G 1m DAC) ของสายเคเบิลแบบกำหนดเองที่ออกแบบมาสำหรับสวิตช์ Mikrotik โดยเฉพาะที่ฉันซื้อมา เนื่องจากสิ่งเหล่านี้ได้รับการปรับแต่งจึงใช้เวลาหนึ่งเดือนกว่าจะมาถึง เมื่อสิ่งเหล่านี้มาถึงและใช้งานไม่ได้ ฉันก็นิ่งงันและดำเนินการขอความช่วยเหลือในฟอรัมต่างๆ ไม่นานก็แนะนำฉัน ซื้อเครื่องมือ จาก FS.com ที่อนุญาตให้ฉันรีโค้ดผู้ขายบนตัวรับส่งสัญญาณเพื่อหวังว่าจะหลอกให้ NIC ทำงาน
เนื่องจากสายเคเบิลได้รับการปรับแต่งสำหรับสวิตช์ ฉันจึงคิดว่าเป็น NIC ที่ไม่ให้ความร่วมมือ การตั้งค่าตัวรับส่งสัญญาณเป็น IBM หรือ Mellanox ไม่ทำงานหลังจากขอความช่วยเหลือเพิ่มเติม มีคนสองคนแนะนำให้ฉันหาเอกสารเกี่ยวกับ NIC และค้นหาสายเคเบิล/ตัวรับส่งสัญญาณที่เข้ากันได้ ฉันพบ PDF (แม้ว่าจะไม่ได้จัดทำหรือจัดทำโดย IBM/Mellanox) ซึ่งระบุหมายเลขชิ้นส่วนที่เข้ากันได้บางส่วนที่ FS.com ให้มา ดังนั้นฉันจึงซื้อ IBM 49Y7890 1m DAC จาก FS.com
เมื่อมาถึงฉันก็พบว่านี่ไม่ใช่วิธีแก้ปัญหาเช่นกัน ด้วยความสิ้นหวัง ฉันพบผู้คนไม่กี่คนที่แฟลชการ์ดของพวกเขาเป็นเฟิร์มแวร์ Mellanox ที่แท้จริง ฉันตัดสินใจที่จะลองใช้มัน หลังจากแก้ไขปัญหาบางอย่างในการทำให้ตัวอัปเดตทำงาน ฉันแฟลชเฟิร์มแวร์เวอร์ชัน 2.42.5000 ที่มี PSID ใหม่ของ MT_1100120019 สำเร็จแล้ว (ดูที่ 'นี่ไม่ใช่จุดสิ้นสุดของมัน' ย่อหน้าที่ 4 สำหรับรายละเอียดว่าสิ่งนี้อาจทำให้สิ่งต่างๆ ยุ่งเหยิงได้อย่างไร ดูที่นี่สำหรับวิธีการข้ามแฟลช). หลังจากความพยายามนี้ล้มเหลว มีการอภิปรายเพิ่มเติมในประเด็นนี้ และในที่สุดก็ได้ข้อสรุปว่าฉันควรทดสอบ NIC ที่เชื่อมต่อกันโดยตรง เมื่อฉันเชื่อมต่อ NIC เข้าด้วยกันและตั้งค่าซับเน็ต ฉันเห็นความเร็ว 36.5GBit/s โดยใช้การทดสอบ iperf หลายครั้ง (เนื่องจาก iperf และ iperf3 เป็นเธรดเดี่ยว คุณจะต้องตั้งค่าหลายชุดสำหรับความเร็วเหล่านี้ ฉันตั้งค่า 16 ชุดเพื่อใช้ 10 กระทู้). เมื่อฉันกำจัด NIC ออกจากรายชื่อผู้กระทำผิดแล้ว ฉันเริ่มสงสัยว่าการตั้งค่าการเจรจาอัตโนมัติบนสวิตช์จะเป็นปัญหาหรือไม่ เมื่อเปิดใช้งานอีกครั้งฉันเห็น 'ลิงก์ตกลง' ทันที
นี่ไม่ใช่จุดสิ้นสุดของมัน
ฉันตั้งค่าให้ใช้งานได้แล้ว ปรากฎว่าไม่มีปัญหาความเข้ากันได้ และฉันไม่จำเป็นต้องเปลี่ยนสายเคเบิลหรือซื้อ IBM เลย ฉันรู้สึกปลาบปลื้มใจ แต่นี่ยังไม่จบสิ้น ฉันตั้งใจจะใช้การตั้งค่านี้กับ Proxmox บนเซิร์ฟเวอร์และ Windows ของฉันในฐานะเครื่องไคลเอนต์ ทั้งสองระบบนี้จะติดตั้ง 40G
เนื่องจากฉันรู้ว่าฉันจะทำให้การติดตั้ง Proxmox ยุ่งเหยิงหลายครั้ง ฉันจึงสำรองข้อมูลทุกอย่างไว้ในไดรฟ์อื่นก่อน เมื่อเสร็จแล้ว ฉันดำเนินการติดตั้งไดรเวอร์ Mellanox OFED บน Proxmoxมีปัญหาสองสามข้อในการลองทำสิ่งนี้ ไดรเวอร์ OFED พยายามลบแพ็คเกจที่สำคัญมากออกจาก Proxmox เนื่องจากพวกมัน 'รบกวน' ไดรเวอร์ (ไม่เป็นเช่นนั้น) ดังนั้นฉันจึงแก้ไขสคริปต์ mlnxofedinstaller และแสดงความคิดเห็นเกี่ยวกับการเรียกใช้ฟังก์ชัน 'remove_old_packages' ทั้งหมด สิ่งนี้ทำให้โปรแกรมติดตั้งไม่ให้ Proxmox lobotomy
ณ จุดนี้ การทำงานส่วนใหญ่ ปัญหาเดียวที่ฉันมีคือการส่งข้อมูลไปยังเซิร์ฟเวอร์ มันไม่ยอมรับมากกว่าสองสามเมกะไบต์ต่อวินาที ซึ่งน้อยกว่าที่ฉันควรจะได้รับมาก ฉันลองใช้ซอฟต์แวร์หลายเวอร์ชัน การลองใช้ Ubuntu 20.04, 19.XX ไม่ได้ผลเนื่องจากการพึ่งพาที่ Proxmox ไม่มี แต่การติดตั้งทั้งสองนั้นทำได้ ฉันถูกบังคับให้ติดตั้งไดรเวอร์ Ubuntu 18.04 เนื่องจากเป็นไดรเวอร์ล่าสุดที่ไม่มีปัญหาการพึ่งพา การติดตั้งไดรเวอร์โดยทั่วไปไม่สามารถแก้ปัญหาความเร็วได้ ดังนั้นฉันจึงพยายามติดตั้งแพ็คเกจเคอร์เนลโดยใช้ไฟล์ --เคอร์เนลเท่านั้น
ตั้งค่าสถานะบนตัวติดตั้ง เมื่อถึงจุดหนึ่งฉันได้ความเร็วที่ต้องการแล้ว แต่นี่เป็นความบังเอิญเพราะฉันไม่สามารถทำซ้ำได้ในภายหลัง ฉันตัดสินใจลองใช้ไดรเวอร์ Debian 10 ในรูปแบบต่างๆ ซึ่งมีความเร็วดีขึ้นเล็กน้อยที่ 20MB/วินาที หลังจากตีกรอบความคิดของคนอื่นได้สักพัก ฉันลองตั้งค่าเครือข่าย 40G เป็น 9000 MTU สิ่งนี้นำไปสู่ผลลัพธ์ที่แปลกประหลาดบางอย่าง ความเร็วเพียง 1 กิกะบิตแม้ว่าการตั้งค่าทั้งหมดจะมี MTU ที่ 9000 ฉันเปลี่ยนกลับเป็น 1500 เพื่อทำการทดสอบเพิ่มเติมบน Ubuntu แทน Proxmox เนื่องจากฉันมีความเร็วที่ดีใน Ubuntu สิ่งนี้ล้มเหลว การทดสอบความเร็วที่ฉันทำในตอนแรกต้องเป็นเรื่องบังเอิญ
ฉันตัดสินใจเปลี่ยน NIC ในระบบ โดยติดป้ายกำกับเป็น 1 และ 2 หลังจากที่ฉันนำออก เพื่อไม่ให้สับสน หลังจากทำการทดสอบความเร็วเพิ่มเติม ปรากฎว่าการ์ดในระบบ Proxmox เป็นปัญหา ฉันสามารถส่งด้วยความเร็วสูงสุด แต่ไม่สามารถรับได้เต็มความเร็ว ฉันนึกถึงไดรเวอร์ที่อัปเดตเฟิร์มแวร์บน NIC นั้นและไม่ได้คิดอะไรมากเพราะฉันใช้เวอร์ชันล่าสุดดังนั้นฉันจึงแฟลชเวอร์ชันข้ามแฟลชที่ฉันติดตั้งไว้ในตอนแรกอีกครั้ง หลังจากการทดสอบเพิ่มเติม เราสรุปได้ว่าความเร็วที่จำกัดที่ 22GBit/s เพิ่มขึ้นและ 11GBit/s ลดลงเป็นผลมาจากคอขวดต่างๆ ระหว่างระบบ การทดสอบโดยเฉพาะบนดิสก์ RAM ด้วยไฟล์ขนาด 30 กิกะไบต์ เราสรุปได้ว่าเซิร์ฟเวอร์ที่มี DIMM สองเท่าที่บรรจุอยู่นั้นสามารถเขียนด้วยความเร็วสองเท่า การพยายามใช้ NVMe กับระบบไฟล์ NTFS ในระบบทดสอบทำได้ไม่ดีเนื่องจากเลเยอร์ที่เข้ากันได้เป็นแบบเธรดเดียว หลังจากทำการทดสอบ iperf อีกหลายสิบครั้ง ทุกอย่างก็ทำงานได้อย่างราบรื่น แม้ว่าเซิร์ฟเวอร์จะรัน Proxmox ก็ตาม
ข้อแม้เมื่อใช้ไดรเวอร์ OFED คุณจะสูญเสียความสามารถในการเชื่อมต่อกับเครือข่าย CIFS ที่ใช้ร่วมกัน ไดรเวอร์ OFED จะยกเลิกการโหลดโมดูลนี้จนกว่าไดรเวอร์จะไม่ทำงานอีกต่อไป ไดรเวอร์อีเธอร์เน็ตใช้งานได้ แต่อาจจำเป็นต้องข้ามแฟลชไปยังเฟิร์มแวร์ Mellanox
เส้นทางข้างหน้า
เนื่องจากฉันมีงบประมาณประมาณ 1,500 ดอลลาร์ ฉันจึงต้องใช้อุปกรณ์ที่ถูกที่สุดเท่าที่หาได้ ดังนั้นการ์ดเครือข่าย $ 60 เมื่อฉันพบสวิตช์ Mikrotik ใหม่ในราคา $500 ฉันรู้สึกตื่นเต้นมาก มีทุกอย่างที่ฉันต้องการในราคาที่ดีที่สุดเท่าที่จะหาได้ แม้ว่าจะถูกกว่าสินค้ามือสองบางตัวก็ตาม ไม่มีใบอนุญาตพอร์ตและมาพร้อมกับหนึ่งในใบอนุญาตซอฟต์แวร์ระดับสูงสุด มันเป็นเรื่องยากที่จะเอาชนะ แน่นอนว่าทุกอย่างมาพร้อมกับการประนีประนอม
แม้ว่าฉันจะไม่ได้ตั้งใจใช้พอร์ต 10G SFP+ แต่ฉันก็ยังต้องการพอร์ตเหล่านี้สำหรับการขยายในอนาคต ฉันได้รับอะแดปเตอร์ SFP+ เป็น RJ45 และ 10G NIC ดังนั้นฉันจึงมีบางอย่างที่จะทดสอบในขณะที่อุปกรณ์ 40G อยู่ระหว่างการจัดส่ง ฉันสามารถรับทั้งหมด 2 กิกะบิตต่อวินาทีบน 10G NIC นี่คือข้อมูลทั้งหมดที่ฉันสามารถป้อนระหว่างการเชื่อมต่ออินเทอร์เน็ต 1 กิกะบิตกับเซิร์ฟเวอร์ที่ติดตั้ง 1 กิกะบิต แต่การพยายามเรียกใช้การอัปโหลดระดับกิกะบิตไปยังอินเทอร์เน็ตจากการ์ด 10G ทำให้ความเร็วต่ำกว่าที่ฉันคาดไว้มาก ฉันได้รับเพียงประมาณ 300Mbps แม้ว่าจะสามารถไปถึง 900Mbps ได้อย่างน่าเชื่อถือฉันถามไปทั่วและทฤษฎีของสวิตช์ที่ไม่มีขนาดบัฟเฟอร์ลดลง 10G เป็น 1G ก็ได้ข้อสรุป ทฤษฎีนี้มีเพิ่มเติมโดยการเปลี่ยนอัปลิงค์ 1G ของเราเตอร์ของฉันเป็นพอร์ต 10G และพยายามอัปโหลดที่ระดับกิกะบิตจากระบบ 40G (ลดลงเพียง 4x แทนที่จะเป็น 10x) ลดความเร็วลงเหลือ ~ 1mbps ซึ่งแสดงว่าพอร์ต 1G 48 พอร์ตมีบัฟเฟอร์ที่ใช้ร่วมกัน
นี่ไม่ใช่ปัญหาสำหรับเครื่อง Windows ของฉัน เนื่องจากฉันไม่เคยอัปโหลดด้วยความเร็วเหล่านั้นเลย แต่สำหรับเซิร์ฟเวอร์ของฉันนี่เป็นเรื่องใหญ่ทีเดียว การตัดแบนด์วิดท์การอัพโหลดให้เหลือเพียงหนึ่งในสามอาจเป็นปัญหาที่แท้จริง หลังจากขุดค้นไปรอบๆ ฉันพบว่าฉันสามารถใช้เมตริกการกำหนดเส้นทางเพื่อบังคับทราฟฟิกผ่าน 40G NIC หรือ 1G NIC ขึ้นอยู่กับว่ามันจะไปที่ใด แม้ว่าโซลูชันนี้จะไม่สมบูรณ์แบบ 100% แต่ก็ยังใช้งานได้ค่อนข้างดี
ใช้ เส้นทาง -n
คำสั่ง ฉันสามารถดูเส้นทางปัจจุบันของฉัน เป้าหมายคือการปรับเปลี่ยนเส้นทางเพื่อให้ 40G เป็นที่ต้องการสำหรับการเชื่อมต่อในพื้นที่ และ 1G เป็นที่ต้องการสำหรับการเชื่อมต่ออินเทอร์เน็ต เมตริกบนเส้นทางยิ่งสูง ยิ่งต้องใช้มาก ดังนั้นระบบจะใช้เส้นทางที่แพงน้อยที่สุด
Proxmox มาพร้อมกับ ifupdown โดยค่าเริ่มต้น มันเสถียรกว่าและมีคุณสมบัติมากกว่า Netplan สามารถเพิ่มเส้นทางได้ แต่ไม่สามารถลบหรือแก้ไขได้ นอกจากนี้ยังไม่อนุญาตให้คุณเรียกใช้คำสั่งก่อน เปิด หรือหลังการเริ่มต้นอินเทอร์เฟซ คุณ สามารถ ใช้ netplan แต่คุณจะต้องตั้งค่าบริการแยกต่างหากเพื่อลบ/แก้ไขเส้นทางเพิ่มเติม
นี่คือปัจจุบันของฉัน /etc/network/interfaces
config ฉันต้องเพิ่มคำสั่ง post-up ให้กับ NIC ของฉันเพื่อเพิ่มเส้นทางเข้าไป
อัตโนมัติ ens18 # 1 Gigabit NIC
iface ens18 inet แบบคงที่
...
โพสต์อัพ /usr/sbin/route เพิ่ม -net 192.168.0.0/24 เมตริก 1,000 ens18
อัตโนมัติ ens19 # 40 Gigabit NIC
iface ens19 inet แบบคงที่
...
โพสต์อัพ /usr/sbin/route เพิ่ม -net 0.0.0.0/0 gw 192.168.0.1 เมตริก 1,000 ens19
โพสต์อัพ /usr/sbin/route เพิ่ม -net 192.168.0.0/24 metric 1 ens19
โพสต์อัพ /usr/sbin/route del -net 192.168.0.0/24 เมตริก 0 ens19
เส้นทางของคุณควรมีลักษณะดังนี้
ตารางเส้นทางเคอร์เนล IP
เกตเวย์ปลายทาง Genmask ตั้งค่าสถานะการอ้างอิงเมตริก ใช้ Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 1 0 0 ens18
0.0.0.0 192.168.0.1 0.0.0.0 UG 1,000 0 0 ens19
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 ens19
192.168.0.0 0.0.0.0 255.255.255.0 U 1,000 0 0 ens18
แน่นอนว่าอินเทอร์เฟซเหล่านี้จะต้องอยู่บน IP ในเครื่องที่แตกต่างกัน ฉันขอแนะนำให้ใช้ IP ที่ตั้งค่าเป็น 40G NIC สำหรับทุกสิ่งในเครื่อง หากจำเป็นต้องส่งต่อพอร์ต ให้ใช้กิกะบิต NIC คุณสามารถใช้ Gigabit NIC ในเครื่องได้ ตราบใดที่คุณไม่ได้ส่งข้อมูลมากกว่า 100MB ต่อครั้ง การกำหนดเส้นทางนี้สามารถทำงานได้หากคุณส่งข้อมูลในเครื่อง 40 กิกะบิต/วินาทีไปยัง IP ที่ผูกไว้กับพอร์ตกิกะบิต แม้ว่าจะไม่ได้สอดคล้องกันเสมอไป
โปรดทราบว่าหากคุณกำลังแก้ไขเส้นทาง คุณควรเพิ่มเวอร์ชันที่แก้ไขก่อนที่จะลบเวอร์ชันเก่าออก
สิ่งสำคัญคือต้องทราบว่าการตั้งค่าของคุณอาจไม่จำเป็นต้องเหมือนกันทุกประการกับที่ฉันโพสต์ไว้ด้านบน ตัวอย่างเช่น การติดตั้ง Proxmox ของฉันได้เพิ่มเส้นทางสำหรับ ens18 แล้ว ดังนั้นฉันจึงต้องลบออกหลังจากเพิ่มเส้นทางที่ฉันต้องการแล้ว
และนั่นแหล่ะ! ในที่สุดฉันก็ติดตั้งเสร็จด้วยความเร็วที่ฉันต้องการ ฉันสามารถถ่ายโอนไปยังเซิร์ฟเวอร์ของฉันที่ความเร็วประมาณ 1.7GB/s และจากที่ประมาณ 1GB/s (ข้อจำกัดอยู่ที่ NTFS หรือ SSD ตัวใดตัวหนึ่ง)