Tại sao bộ định tuyến phần cứng hoạt động tốt hơn bộ định tuyến Linux có thông số kỹ thuật (RAM & CPU) tốt hơn?


44

Tôi có một CentOS 6.3 tối thiểu, 64 bit đóng vai trò là cổng với 4 NIC (1 Gbps), mỗi liên kết với nhau cho lưu lượng công cộng và khác cho riêng tư, thực hiện NATing. Nó có RAM 6 GB và 4 lõi logic. Chúng tôi đã sử dụng điều này trong hai năm qua mà không có bất kỳ vấn đề.

Tôi không có bất kỳ kinh nghiệm nào với các bộ định tuyến phần cứng, nhưng tôi đã nghe nói rằng họ có ít RAM và CPU hơn và sử dụng đĩa flash. Làm thế nào một hộp có cấu hình phần cứng thấp có thể hoạt động tốt hơn (như trong, xử lý nhiều kết nối đồng thời hơn) so với một máy có nhiều RAM và CPU?

Các yếu tố hạn chế, ngoài iOS sử dụng các phương pháp khác nhau để xử lý việc này là gì?


5
Việc triển khai trong Phần cứng nhanh hơn thì phần sụn nhanh hơn phần mềm cho cùng một giải pháp.
mdpc

3
"Thông số kỹ thuật tốt hơn" mà bạn đề cập là không liên quan đến công việc đang làm. Có những tính chất khác thực sự quan trọng.
ndim

Ok, vậy ... từ những gì bạn đã viết, tôi có nên cho rằng Centos của bạn là một máy ảo không? Ngoài việc tối ưu hóa mạng đặc biệt cho các máy ảo, cả trên máy ảo hóa và ở phía khách, máy ảo thường được biết là không tốt trong loại vai trò này ... để sử dụng như một bộ định tuyến / tường lửa, luôn luôn khuyến nghị sử dụng kim loại trần !
ném đá

Bạn có thực sự định tuyến 1Gbps lưu lượng theo đề xuất của cấu hình của mình không? Bạn có thể đang sử dụng một cái bánh bao để di chuyển một cái xẻng đầy cát. 6GB RAM và 4 lõi về cơ bản sẽ không bao giờ được chạm vào bộ định tuyến, bạn có thể tiết kiệm điện và không gian rack bằng cách sử dụng một máy Intel Atom nhỏ để thực hiện công việc này.
Bert

Câu trả lời:


64

ASIC .

Thay vì sử dụng CPU mục đích chung và phần mềm dành riêng cho nhiệm vụ, bạn có thể bỏ qua phần mềm và chỉ cần làm cho silicon xử lý trực tiếp nhiệm vụ.

Phần cứng mạng hiệu suất cao sử dụng ASIC thay vì phần mềm cho các tác vụ nặng về tính toán (nhưng tương đối đơn giản về mặt logic) của một cái gì đó như so sánh địa chỉ IP với bảng định tuyến internet khổng lồ, kiểm tra bảng CAM để biết quyết định chuyển đổi hoặc kiểm tra gói tin với ACL . Điều này tạo ra sự khác biệt lớn về tốc độ của các hoạt động nhạy cảm với thời gian đó, mang lại lợi thế đáng kể so với CPU có mục đích chung.


1
Trong khi tôi đồng ý với shane, tôi sẽ chọn iptables chạy trên một máy chủ chung trên một thiết bị bất kỳ ngày nào. trong công ty của tôi, iptables chạy trên fedora nhanh hơn, linh hoạt hơn, cấu hình đơn giản hơn, ít đánh thuế vào cpu và bộ nhớ, khởi động nhanh hơn và rẻ hơn so với cisco asa của chúng tôi.
rvh

@rvh: để tường lửa hay chỉ định tuyến?
mveroone

2
và nói chung, "tốc độ" là một thuật ngữ khá lỏng lẻo ở đây. Tôi chắc chắn rằng có nhiều tình huống mà PC vẫn có thể thực hiện một thao tác 'nhanh' như một CTNH, hoặc có thể có thời gian không đổi kéo dài hơn so với CTNH. Nhưng nó thực sự đi đến sự ổn định và 'vì lợi ích của bạn' - bạn vẫn mua ít RAM / CPU hơn với một thiết bị, nhưng nó nhận được nhiều hơn từ nó và chỉ làm những gì nó cần để bạn có được sự ổn định
Colin Godsey

Câu trả lời này là sai bởi ommment. Chỉ cần hét lên "ASIC" cũng hơi ngây thơ vì hầu hết các bộ định tuyến NAT sử dụng CPU có mục đích chung, trừ khi chúng ta đang đi vào hiệu suất cực cao. Ngoài ra, các bộ định tuyến phần cứng-NAT có giới hạn mạnh hơn về số lượng kết nối đồng thời. Những gì OP trải nghiệm là cấu hình sai và việc sử dụng một hệ điều hành không phù hợp với nhiệm vụ.
đôi

@dualed most routers that do NAT use general purpose CPUsCó, đó là một tuyên bố đúng, nhưng không biết thực tế là nhiều thiết bị đó giảm tải các hoạt động cụ thể cho các chip chuyên dụng (như cách đọc câu trả lời đầy đủ của tôi ở trên cho thấy rõ). Đừng nghĩ NAT và theo dõi kết nối (mà tôi đồng ý, không xảy ra trong ASIC trong các thiết bị hiện đại), nghĩ bảng định tuyến và chuyển đổi giảm tải.
Shane Madden

12

Một bộ định tuyến chuyên dụng, cao cấp có thể vượt trội hơn một PC có CPU nhanh hơn và nhiều RAM hơn vì nó có thể thực hiện nhiều hơn việc định tuyến trong phần cứng.

Đó là lý do tương tự, một bộ chuyển mạch Gigabit 60 đô la có thể vượt trội hơn một PC 2.000 đô la với 4 thẻ GigE hai cổng hoạt động như một bộ chuyển mạch Ethernet. Công tắc được xây dựng từ mặt đất lên để trở thành một công tắc.


3
Và vì bộ định tuyến chuyên dụng đang chạy trên một đĩa flash, nên có ít bộ phận chuyển động bị hỏng hơn vào thời điểm không thuận lợi.
cpt_fink

3
Tôi không thực sự chắc chắn rằng bạn đúng. Tôi đã tạo ra một bảo vệ chống DDOS rất cơ bản cho một công ty tôi làm việc dựa trên netmap ( info.iet.unipi.it/~luigi/netmap ) và nó hoạt động rất tốt ngay cả trên phần cứng thông thường (thực sự đầy đủ 1Gb / s hoặc 11M gói / giây). Ngoài ra còn có một phiên bản openswitch cho netmap trên trang web đó có thể chuyển tiếp các gói 3M / giây trên phần cứng "bình thường", tôi không biết bất kỳ công tắc (500 $) giá rẻ nào có thể làm được, nhưng tôi có thể sai.
XzKto

2
@XzKto Công tắc GigE 5 cổng giá rẻ ($ 60) điển hình có thể chuyển tiếp các gói giữa tất cả các kết hợp cổng ở tốc độ dây đầy đủ. Họ thường sử dụng một thanh ngang đầy đủ, không chặn.
David Schwartz

@XzKto Điều David có nghĩa là, không giống như PC sẽ xử lý tốc độ "thông qua giao diện của chính nó", công tắc sẽ thực hiện nếu cho mọi sự kết hợp giữa cổng với cổng. Bạn có thể có host1 nói chuyện với host2 và 3 đến 4 và mỗi kết nối ở mức song công hoàn toàn & thông lượng tối đa . Bạn không thể đánh bại điều đó. (và để có nhiều tiền hơn, nhiều cổng hơn, thậm chí dễ dàng hơn để xem tại sao nó nhanh hơn). Và đối với bộ định tuyến, nó cũng tương tự: phần cứng sẽ có thể định tuyến lại nhanh hơn phần mềm, vì nó có thể định tuyến lại ngay khi có đủ thông tin (bộ định tuyến linux của bạn sẽ thực hiện ở mỗi lớp, nhưng việc truy cập sẽ chậm hơn)
Olivier Dulac

11

"Khác với iOS"?

IOS làm cho hầu hết tất cả sự khác biệt. CentOS là một hệ điều hành có mục đích chung. Nó được thiết kế để thực hiện đủ tốt trong một loạt các kịch bản, sử dụng một loạt các cấu hình phần cứng khác nhau. Mặt khác, iOS được điều chỉnh cực kỳ tốt để chỉ xử lý loại khối lượng công việc bạn mong đợi từ một thiết bị mạng, sử dụng các loại phần cứng rất cụ thể mà bạn sẽ tìm thấy trong thiết bị của Cisco.

Biết chính xác những phần cứng mà bạn lập trình sẽ đưa bạn đi một chặng đường rất dài về hiệu năng so với khả năng tương thích.


3
+1. Thêm vào đó, thực tế là Cisco có các tài nguyên kỹ thuật và bí quyết để thay thế phần mềm bằng phần cứng khi cần thiết. Có nghĩa là, nếu một hoạt động cụ thể chậm hơn so với mong muốn trong phần mềm, họ có thể nỗ lực chế tạo ASIC, thêm hướng dẫn cho các đơn vị xử lý hiện có hoặc xây dựng mô-đun phần cứng để giúp tăng tốc. Các đầu bảng cực kỳ thiên về hiệu năng khi bạn có quyền kiểm soát cả phần mềm phần cứng.
Justin ᚅᚔᚈᚄᚒᚔ

Nó hoạt động cả hai cách, quá. Phần cứng cũng không cần phải xử lý các trường hợp hiếm, phức tạp. Nó chỉ ném những thứ đó vào phần mềm. Vòng lặp định tuyến? Đừng cố gắng tìm ra phần cứng làm thế nào để đối phó với những thứ đó.
MSalters

4

Cả phần mềm và phần cứng đều có điều gì đó để nói. Tôi có so sánh Intel và TP-Link NIC (sử dụng chip Realtek ở trung tâm) trên phần cứng máy chủ chung, cũng như phần mềm được xây dựng có mục đích và mục đích chung trong định tuyến.

Về mặt phần cứng, nếu ASIC trên tàu có thể xử lý lưu lượng IP, tải bộ xử lý có thể thấp hơn và do đó nhanh hơn. Tôi đã nhận thấy hai chip INtel NIC trên bo mạch giao tiếp trực tiếp bởi DMA, bỏ qua CPU chính trong việc xử lý chuyển tiếp gói; trong khi đó chip Realtek bị gián đoạn mỗi khi có gói tin đến.

Về phía phần mềm, nếu phần mềm được thiết kế để sử dụng trong định tuyến, nó có thể được thực hiện hiệu quả hơn. Tôi đã sử dụng cả pfSense + PF (một FreeBSD được sửa đổi dự định sẽ được sử dụng như một bộ định tuyến) và Ubuntu 12.04 + iptables cho mục đích chung là phần mềm định tuyến và lần đầu tiên chuyển đổi rõ ràng lưu lượng truy cập nhanh hơn rất nhiều. (Ubuntu 14.04 bây giờ gần như nhanh, nhờ các nftables mới trong nhân Linux 3.13.)

Tuy nhiên, bộ định tuyến chuyên dụng có một nhược điểm lớn: nó không thể thực hiện được nhiều thứ ngoài việc chuyển đổi lưu lượng và nó không thể được ảo hóa. Bộ định tuyến biên hiện tại của tôi là một máy ảo bên trong cụm ESXi của tôi chạy Ubuntu 14.04 và nó cũng hoạt động như một hệ thống phát hiện xâm nhập và cân bằng tải.


3

AFAIK, đó là chi phí hoạt động của một hệ điều hành đa năng; bất kể các kết nối của bạn nhanh như thế nào, các gói được xử lý trên cơ sở từng gói trong bối cảnh của hạt nhân, làm tăng độ trễ và độ căng cho hệ thống. Tôi tin rằng nó đã được giải thích trong các Câu trả lời khác tốt hơn tôi có thể làm.

Phải nói rằng, có những công nghệ "ish" mới đầy hứa hẹn đang ngày càng phổ biến và khả thi có thể tạo ra một đối thủ đáng gờm hơn trong các hệ thống Linux cũng như các vấn đề khác; tức là InfiniBand

Hãy xem Hỏi & Đáp sau đây về StackOverflow: TCP Kernel-bypass được triển khai như thế nào

Đọc thêm:


2

Điều này thường là do thiếu cấu hình ngăn xếp / thiết bị mạng ngoài hộp trong linux. Trong gần 90% trường hợp lưu lượng truy cập mạng của bạn được xử lý bởi CPU0 trong khi các trường hợp khác ở chế độ chờ. Nếu bạn giải quyết vấn đề khác biệt này với các bộ định tuyến phần cứng sẽ không quá quyết liệt như bạn nghĩ. Bạn nên thiết lập ít nhất RSS hoặc RPS (phân phối xử lý gói dựa trên trình điều khiển / ngăn xếp giữa các CPU).

Nếu bạn thực sự quan tâm đến hiệu suất bộ định tuyến linux của mình và có đủ thời gian, tôi khuyên bạn nên đọc bài viết này trong blog packagecloud (cũng có bài viết về việc truyền gói tin).

Nếu bạn cần xem phân phối và bạn nghĩ rằng xem while sleep 1; do cat $some_file_in_procfs; done, đánh giá mặt nạ CPU và smp_affinityviết thủ công là nhàm chán, có lẽ bạn sẽ thấy netutils-linux của dự án thú cưng của tôi cực kỳ hữu ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.