ทำไมเราเตอร์ฮาร์ดแวร์ถึงทำงานได้ดีกว่าเราเตอร์ Linux ที่มีสเปคที่ดีกว่า (RAM และ CPU)


44

ฉันมี CentOS 6.3 ขั้นต่ำ 64 บิตทำหน้าที่เป็นเกตเวย์ที่มี 4 NIC (1 Gbps) แต่ละรายการเชื่อมต่อกันเพื่อการรับส่งข้อมูลสาธารณะและอื่น ๆ สำหรับส่วนตัวซึ่งดำเนินการ NATing มันมี 6 GB RAM และ 4 แกนตรรกะ เราใช้สิ่งนี้มาสองปีที่ผ่านมาโดยไม่มีปัญหา

ฉันไม่มีประสบการณ์ใด ๆ กับเราเตอร์ฮาร์ดแวร์ แต่ฉันได้ยินมาว่ามี RAM และ CPU น้อยกว่าและใช้ดิสก์แฟลช กล่องที่มีการกำหนดค่าฮาร์ดแวร์ต่ำจะทำงานได้ดีขึ้นอย่างไร (เช่นใน, จัดการการเชื่อมต่อพร้อมกันมากขึ้น) กว่าเครื่องที่มี RAM และ CPU มากกว่า

อะไรคือปัจจัยที่ จำกัด นอกเหนือจาก IOS ที่ใช้วิธีการต่าง ๆ ในการจัดการกับสิ่งนี้?


5
การติดตั้งใช้งานในฮาร์ดแวร์นั้นเร็วกว่านั้นเฟิร์มแวร์เร็วกว่าซอฟต์แวร์สำหรับโซลูชันเดียวกัน
mdpc

3
"รายละเอียดที่ดีกว่า" ที่คุณพูดถึงนั้นไม่เกี่ยวข้องกับงานในมือ มีคุณสมบัติอื่น ๆ ที่สำคัญจริงๆ
ndim

ตกลงดังนั้น ... จากสิ่งที่คุณเขียนฉันควรสมมติว่า Centos ของคุณเป็นเครื่องเสมือนจริงหรือไม่ ไว้สำหรับการเพิ่มประสิทธิภาพเครือข่ายพิเศษสำหรับเครื่องเสมือนทั้งในไฮเปอร์ไวเซอร์และที่ด้านข้างของผู้เข้าพักเครื่องเสมือนเป็นที่รู้จักกันโดยทั่วไปจะไม่เป็นผลดีในชนิดของบทบาทนี้ ... สำหรับการใช้งานเป็นเราเตอร์ไฟร์วอลล์ / โลหะเปลือยเสมอแนะนำ!
เมาแล้ว

คุณกำหนดเส้นทางการรับส่งข้อมูล 1Gbps ตามที่แนะนำโดยการกำหนดค่าของคุณหรือไม่ คุณอาจใช้เกี๊ยวในการเคลื่อนพลั่วที่เต็มไปด้วยทราย RAM ขนาด 6GB และ 4 คอร์นั้นโดยทั่วไปจะไม่ถูกสัมผัสสำหรับเราเตอร์คุณสามารถประหยัดพลังงานและพื้นที่ชั้นวางได้โดยใช้เครื่อง Intel Atom ขนาดเล็กเพื่อทำงานนี้
Bert

คำตอบ:


64

ASICs

แทนที่จะใช้ CPU อเนกประสงค์และซอฟต์แวร์เฉพาะงานคุณสามารถข้ามซอฟต์แวร์และเพียงแค่ทำให้ซิลิคอนจัดการงานโดยตรง

ฮาร์ดแวร์เครือข่ายประสิทธิภาพสูงใช้ ASIC แทนซอฟต์แวร์สำหรับงานหนัก (แต่ค่อนข้างง่ายในเชิงตรรกะ) ของบางอย่างเช่นการเปรียบเทียบที่อยู่ IP กับตารางเส้นทางอินเทอร์เน็ตขนาดใหญ่ตรวจสอบตาราง CAM สำหรับการตัดสินใจเปลี่ยนหรือตรวจสอบแพ็กเก็ตกับ ACL . สิ่งนี้ทำให้เกิดความแตกต่างอย่างมากในความเร็วของการดำเนินการที่ต้องคำนึงถึงเวลาซึ่งมอบข้อได้เปรียบที่สำคัญกว่าซีพียูที่ใช้งานทั่วไป


1
ในขณะที่ฉันเห็นด้วยกับ shane ฉันจะเลือก iptables ที่ทำงานบนเซิร์ฟเวอร์ทั่วไปบนอุปกรณ์ทุกวัน ใน บริษัท ของฉัน iptables ที่ทำงานบน fedora นั้นเร็วกว่ายืดหยุ่นกว่าง่ายกว่าในการกำหนดค่าลดภาษีบนซีพียูและหน่วยความจำบูตเร็วกว่าและเร็วกว่าซิสโก้ของเรา
rvh

@rvh: สำหรับไฟร์วอลล์หรือเพียงแค่การกำหนดเส้นทาง?
mveroone

2
และโดยรวมแล้ว 'ความเร็ว' เป็นคำที่ค่อนข้างหลวมที่นี่ ฉันแน่ใจว่ามีหลายสถานการณ์ที่พีซียังสามารถทำการดำเนินการ 'เร็ว' เป็น HW หนึ่งหรืออาจมีระยะเวลาคงที่นานกว่า HW แต่จริง ๆ แล้วลงไปที่ความมั่นคงและ 'ปังสำหรับเจ้าชู้' ของคุณ - คุณยังคงซื้อ RAM / CPU น้อยลงด้วยอุปกรณ์ แต่มันได้รับมากขึ้นจากมันและทำในสิ่งที่มันต้องการเพื่อให้คุณมีเสถียรภาพ
Colin Godsey

คำตอบนี้ผิดโดย ommission เพียงแค่ตะโกนว่า "ASICs" ก็ไร้เดียงสาเหมือนกันเพราะเราเตอร์ส่วนใหญ่ที่ใช้ NAT โดยทั่วไปใช้ซีพียูเว้นแต่ว่าเรากำลังจะได้รับประสิทธิภาพสูงสุด ฮาร์ดแวร์ - เราเตอร์ NAT จริงมีข้อ จำกัด ที่แข็งแกร่งในจำนวนการเชื่อมต่อพร้อมกัน ประสบการณ์ OP คือการกำหนดค่าผิดพลาดและการใช้ระบบปฏิบัติการที่ไม่เหมาะสมกับงาน
คู่

@dualed most routers that do NAT use general purpose CPUsใช่ว่าเป็นคำสั่งจริง แต่ไม่รู้ความจริงที่ว่าหลายอุปกรณ์เหล่านั้น offload เฉพาะการดำเนินงานเพื่อชิปเฉพาะ (เช่นเดียวกับการอ่านของคำตอบทั้งหมดของฉันข้างต้นทำให้ชัดเจน) อย่าคิดว่า NAT และการติดตามการเชื่อมต่อ (ซึ่งฉันเห็นด้วยไม่เกิดขึ้นใน ASIC ในอุปกรณ์ที่ทันสมัย) คิดว่าตารางเส้นทางและเปลี่ยนถ่ายถ่าย
Shane Madden

12

เราเตอร์เฉพาะทางระดับสูงสามารถทำงานได้ดีกว่าพีซีที่มีซีพียูเร็วกว่าและ RAM มากกว่าเพราะมันสามารถกำหนดเส้นทางในฮาร์ดแวร์ได้มากขึ้น

ด้วยเหตุผลเดียวกันสวิตช์กิกะบิตอีเธอร์เน็ตราคา $ 60 สามารถสูงกว่าพีซี $ 2,000 พร้อมการ์ด GigE สองพอร์ต 4 พอร์ตที่ทำหน้าที่เป็นสวิตช์อีเธอร์เน็ต สวิตช์ถูกสร้างขึ้นจากกราวด์ขึ้นไปเป็นสวิตช์


3
และเนื่องจากเราเตอร์เฉพาะกำลังทำงานบนดิสก์แฟลชจึงมีชิ้นส่วนเคลื่อนไหวน้อยลงที่จะล้มเหลวในเวลาที่ไม่เหมาะสม
cpt_fink

3
ฉันไม่แน่ใจจริงๆว่าคุณพูดถูก ฉันได้สร้างการป้องกันการป้องกัน DDOS ขั้นพื้นฐานสำหรับ บริษัท ที่ฉันทำงานโดยใช้ netmap ( info.iet.unipi.it/~luigi/netmap ) และมันทำงานได้ดีมากแม้บนฮาร์ดแวร์ปกติ (เต็ม 1Gb / s หรือ 11M จริง ๆ แพ็คเก็ต / วินาที) นอกจากนี้ยังมีรุ่น openswitch สำหรับ netmap บนไซต์นั้นที่สามารถส่งต่อแพ็กเก็ต 3M / วินาทีบนฮาร์ดแวร์ "ปกติ" ฉันไม่ทราบว่าสวิตช์ราคาถูก (500 $) ที่สามารถทำได้ แต่ฉันอาจผิด
XzKto

2
@XzKto สวิตช์ทั่วไป GigE 5 พอร์ตราคาถูก ($ 60) สามารถส่งต่อแพ็กเก็ตระหว่างการรวมกันของพอร์ตด้วยความเร็วลวดเต็ม โดยทั่วไปจะใช้คานขวางแบบเต็มและไม่บล็อก
David Schwartz

@XzKto สิ่งที่ David หมายถึงไม่เหมือนกับพีซีที่จะจัดการความเร็ว "ผ่านการเชื่อมต่ออินเทอร์เฟซของตัวเอง" สวิตช์จะทำงานหากการรวมกันระหว่างพอร์ตกับพอร์ต คุณสามารถมีการพูดคุยกับ host1 host2 และ 3-4 และแต่ละการเชื่อมต่อที่เพล็กซ์เต็มรูปแบบและความเร็วสูงสุด คุณไม่สามารถเอาชนะได้ (และสำหรับเงินมากขึ้นพอร์ตมากขึ้นง่ายยิ่งขึ้นเพื่อดูว่าทำไมมันเร็วกว่า) และสำหรับเราเตอร์มันคล้ายกัน: ฮาร์ดแวร์จะสามารถเปลี่ยนเส้นทางเร็วกว่าซอฟต์แวร์เนื่องจากสามารถเปลี่ยนเส้นทางได้ทันทีที่มีข้อมูลเพียงพอ (เราเตอร์ linux ของคุณจะทำในแต่ละชั้น แต่การเดินทางจะช้าลงแล้ว)
Olivier Dulac

11

"นอกเหนือจาก IOS"

IOS สร้างความแตกต่างเกือบทั้งหมด CentOS เป็นระบบปฏิบัติการอเนกประสงค์ มันถูกออกแบบมาให้ทำงานได้ดีพอภายใต้สถานการณ์ที่หลากหลายโดยใช้การกำหนดค่าฮาร์ดแวร์ที่หลากหลาย ในทางกลับกัน IOS มีการปรับแต่งอย่างดีที่สุดเพื่อรองรับเฉพาะปริมาณงานที่คุณคาดหวังจากอุปกรณ์เครือข่ายโดยใช้ฮาร์ดแวร์เฉพาะประเภทที่คุณจะพบในอุปกรณ์ของซิสโก้

การรู้ว่าฮาร์ดแวร์ส่วนใดที่คุณกำลังเขียนโปรแกรมจะช่วยให้คุณมีประสิทธิภาพในการทำงานเทียบกับความเข้ากันได้


3
+1 เพิ่มไปที่ข้อเท็จจริงที่ว่า Cisco มีทรัพยากรด้านวิศวกรรมและความรู้ในการเปลี่ยนซอฟต์แวร์ด้วยฮาร์ดแวร์เมื่อจำเป็น ความหมายหากการดำเนินการเฉพาะอย่างช้ากว่าที่ต้องการในซอฟต์แวร์พวกเขาสามารถใช้ความพยายามในการสร้าง ASIC เพิ่มคำแนะนำให้กับหน่วยประมวลผลที่มีอยู่หรือสร้างโมดูลฮาร์ดแวร์เพื่อช่วยเร่งความเร็ว เคล็ดลับตารางล้นหลามในความโปรดปรานของประสิทธิภาพเมื่อคุณมีความหรูหราในการควบคุมทั้งซอฟต์แวร์และฮาร์ดแวร์
Justin ᚅᚔᚈᚄᚒᚔ

มันทำงานได้ทั้งสองวิธีเช่นกัน ฮาร์ดแวร์ไม่จำเป็นต้องจัดการกับเคสที่หายากและซับซ้อน มันเพิ่งจะโยนซอฟต์แวร์เหล่านั้น ลูปการกำหนดเส้นทาง อย่าพยายามหาวิธีจัดการกับฮาร์ดแวร์เหล่านั้น
MSalters

4

ทั้งซอฟต์แวร์และฮาร์ดแวร์มีสิ่งที่จะพูด ฉันมีการเปรียบเทียบของ Intel และ TP-Link NIC (ซึ่งใช้ชิป Realtek ที่เป็นหัวใจของมัน) บนฮาร์ดแวร์เซิร์ฟเวอร์ทั่วไปรวมถึงซอฟต์แวร์ที่สร้างขึ้นและวัตถุประสงค์ทั่วไปในการกำหนดเส้นทาง

ในด้านฮาร์ดแวร์หาก ASIC บนบอร์ดสามารถจัดการปริมาณข้อมูล IP ได้บางอย่างโหลดโปรเซสเซอร์อาจต่ำลงและเร็วขึ้น ฉันสังเกตเห็นชิป INtel NIC สองตัวที่ออนบอร์ดสื่อสารโดยตรงโดย DMA โดยข้ามซีพียูหลักในการจัดการการส่งต่อแพ็กเก็ต ในขณะเดียวกันชิป Realtek จะขัดจังหวะเมื่อใดก็ตามที่แพ็คเก็ตมาถึง

ทางด้านซอฟต์แวร์หากซอฟต์แวร์ถูกออกแบบมาเพื่อใช้ในการเราต์มันจะมีประสิทธิภาพมากขึ้น ฉันได้ใช้ทั้ง pfSense + PF (FreeBSD ที่แก้ไขแล้วซึ่งตั้งใจจะใช้เป็นเราเตอร์) และ Ubuntu 12.04 + iptables ที่ใช้งานทั่วไปเป็นซอฟต์แวร์การกำหนดเส้นทาง (Ubuntu 14.04 ตอนนี้เกือบเร็วแล้วขอบคุณ nftables ใหม่ใน Linux เคอร์เนล 3.13)

อย่างไรก็ตามเราเตอร์เฉพาะมีข้อเสียเปรียบหลักประการหนึ่ง: มันไม่สามารถทำงานได้มากไปกว่าการเปลี่ยนทราฟฟิกและไม่สามารถทำเวอร์ชวลไลเซชันได้ เราเตอร์ขอบปัจจุบันของฉันคือเครื่องเสมือนภายในคลัสเตอร์ ESXi ของฉันที่ใช้ Ubuntu 14.04 และยังทำหน้าที่เป็นระบบตรวจจับการบุกรุกและโหลดบาลานเซอร์


3

AFAIK เป็นค่าใช้จ่ายของระบบปฏิบัติการที่ใช้งานทั่วไป ไม่ว่าการเชื่อมต่อของคุณจะรวดเร็วแค่ไหนก็ตามแพ็คเก็ตจะได้รับการจัดการแบบแพ็คเก็ตต่อแพ็คเก็ตภายในบริบทของเคอร์เนลเพิ่มเวลาแฝงและความเครียดในระบบ ฉันเชื่อว่ามันได้รับการอธิบายในคำตอบอื่น ๆ ดีกว่าที่ฉันสามารถทำได้

ต้องบอกว่ามีเทคโนโลยี "ish" ที่มีแนวโน้มใหม่เพิ่มขึ้นในความนิยมและความเป็นไปได้ที่อาจสร้างคู่แข่งที่น่าเกรงขามมากขึ้นจากระบบ Linux ในเรื่องนี้รวมถึงในเรื่องอื่น ๆ เช่น InfiniBand

ดูคำถามและคำตอบต่อไปนี้บน StackOverflow: TCP Kernel-bypass ถูกนำไปใช้อย่างไร

อ่านเพิ่มเติม:


2

มักจะเป็นเพราะการขาดการกำหนดค่าเครือข่ายสแต็ค / อุปกรณ์ออกจากกล่องในลินุกซ์ ในเกือบ 90% กรณีการรับส่งข้อมูลเครือข่ายของคุณถูกประมวลผลโดย CPU0 ขณะที่อื่น ๆ ไม่ได้ใช้งาน หากคุณจะแก้ปัญหานี้แตกต่างกับเราเตอร์ฮาร์ดแวร์จะไม่รุนแรงอย่างที่คุณคิด คุณควรตั้งค่าอย่างน้อย RSS หรือ RPS (การกระจายการประมวลผลแพ็กเก็ตที่ใช้ไดรเวอร์ / สแต็กในซีพียู)

หากคุณสนใจประสิทธิภาพของเราเตอร์ linux และมีเวลาเพียงพอฉันแนะนำให้คุณอ่านบทความนี้ในบล็อก packagecloud (มีบทความเกี่ยวกับการส่งแพ็กเก็ตด้วย)

หากคุณจะต้องดูที่การกระจายสินค้าและคุณคิดว่าการดูwhile sleep 1; do cat $some_file_in_procfs; doneการประเมินผลของหน้ากาก CPU และsmp_affinityการเขียนด้วยตนเองน่าเบื่อคุณอาจพบว่าโครงการสัตว์เลี้ยงของฉันnetutils-linuxมีประโยชน์อย่างยิ่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.