DPDK & SR-IOV – Tại sao quyết định sử dụng sai có thể ảnh hưởng tới hiệu năng
1. DPDK & SR-IOV
– DPDK là gì?
– SR-IOV là gì?
– DPDK khác SR-IOV như thế nào?
– Khi nào lựa chọn DPDK/SR-IOV?
– DPDK/SR-IOV ảnh hưởng đến hiệu năng như thế nào?
1.1. Data Plan Development Kit (DPDK)
Mặc định Linux sử dụng kernel để xử lý gói tin. Với tốc độ phát triển nhanh về năng lực của card mạng (NIC) (25/40/100Gbps…), nó tạo sức ép lên kernel để đáp ứng tốc độ xử lý gói tin, có nhiều công nghệ giúp bypass kernel để tăng hiệu năng bằng cách xử lý gói tin trong Userspace thay vì Kernel. DPDK là một trong các công nghệ này.
Kernel space: nơi kernel (nhân hệ điều hành) chạy và cung cấp các dịch vụ của kernel. Nó thiết lập mọi thứ để người dùng có chỉ có thể nhìn và xử lý trong vùng dữ liệu của họ. User space: phần bộ nhớ hệ thống để chạy các tiến trình của người dùng. Kernel space có thể được truy cập bởi các user process thông qua system calls.
Với luồng xử lý thông thường, gói tin từ NIC được chuyển vào Linux kernel trước khi tới ứng dụng. Tuy nhiên DPDK thay đổi quá trình này, ứng dụng có thể trao đổi trực tiếp với NIC, bypass kernel.
Nó có thật sự nhanh?
Không có DPDK, xử lý gói tin thông qua Kernel theo kiểu ngắt (interrupt-driven). Mỗi lần NIC nhận được gói tin đi vào, là một lần Kernel ngắt để xử lý gói tin và chuyển từ kernel space sang user space làm tăng độ trễ.
Với DPDK,nó không cần thực hiện ngắt, quá trình xử lý xảy ra trong user space sử dụng Poll mode drive. Poll mode drive có thể poll dữ liệu trực tiếp từ Nic.
1.2. DPDK với OVS
Sau khi hiểu cơ bản cách làm việc của Linux networking stack và vai trò của DPDK, chúng ta tìm hiểu bằng cách nào OVS (Open vSwitch) làm việc có/không có DPDK.
Open vSwitch là một Multi-layer virtual switch (cung cấp theo giấy phép Open source Apache 2.0). Nó chạy như một phần mềm ở lớp hypervisor và cho phép tạo các Virtual networking cho VM. Thành phần chính bao gồm:
– Forwarding path: datapath/forwarding path là module thực hiện chuyển gói tính chính của OVS, triển khai trong kernel space để tăng hiệu năng.
– vSwitchd: user process trong user space.
Một OVS như là một phần của VNF (virtual network function, tạm hiểu là VM chạy chức năng network hoặc ứng dụng). Traffic có thể dễ dàng được chuyển từ một VNF tới VNF khác thông qua OVS như hình. Trong thực tế, OVS được thiết kế không phải để chạy trong môi trường NFV mà cho các ứng dụng truyền thống như web có băng thông không quá nhiều và OVS có thể đáp ứng được.
OVS đối mặt với cùng vấn đề đó là xử lý gói tin. Forwarding plane của OVS là một phần của Kernel như hình bên dưới. Vì thế, có nguy cỡ xảy ra nghẽn khi throughput tăng.
Open vSwitch có thể kết hợp với DPDK để cho hiệu năng tốt hơn, kết quả là DPDK-accelerated OVS. Mục đích là thay thế OVS kernel forwarding plane chuẩn với DPDK-based forwarding path, tạo user space vswitch trên host, nó sử dụng DPDK nội bộ để chuyển gói tin của nó. Điều này giúp tăng hiệu năng cho OVS switch, mô tả như hình dưới.
2. Single Root I/O Virtualization (SR-IOV)
“SR-IOV giúp hiệu năng phần cứng lên một level mới”. Cách làm ở đây là bỏ qua hoàn toàn lớp Hypervisor, VM truy cập trực tiếp xuống NIC vật lý. Nhưng để hiểu cụ thể khái niệm này, hãy xem từng bước, nơi Hypervisor pass-through ngay cả khi không cần SR-IOV.
Công nghệ này được gọi là PCI pass through. Nó cung cấp 1 NIC hoàn thiện tới Guest OS mà không sử dụng hypervisor trong khi VM nghĩ rằng nó kết nối trực tiếp tới NIC. Hình bên dưới có 2 NIC card và được sử dụng riêng cho VNF1 và VNF3, không có NIC thứ 3 để cho VNF2, VNF2 lúc này không thể access vào mạng.
SR-IOV giải quyết vấn đề này:
SR-IOV định nghĩa cơ chế chuẩn để ảo hóa các thiết bị PCIe. Cơ chế này có thể ảo hóa 1 PCIe Ethernet controller hoạt động như nhiều PCIe. Bằng cách tạo các Virtual slides của PCIe device, mỗi Virtual slide có thể được gán cho một VM/VNF để giải quyết vấn đề giới hạn số NIC. Nhiều Virtual Function (VF) được tạo trên shared NIC, tương ứng với các virtual slide.
Có thể sử dụng kết hợp DPDK để tận dụng điểm mạnh của cả 2 công nghệ như hình dưới:
3. Khi nào sử dụng DPDK và/hay SR-IOV
So sánh 2 trường hợp bên trên, có thể thấy SR-IOV là giải pháp tốt hơn vì nó sử dụng phần cứng để chuyển mạnh và không bị ràng buộc bởi OVS (software-based), tuy nhiên vấn đề không đơn giản như vậy. Cùng tìm hiểu Traffic East-West vs North-South traffic.
– East-West: traffic nội bộ trong DC, ví dụ server – server. North-south: server – outside. Trong nhiều năm gần đây traffic East-west có xu hướng tăng nhanh hơn nhiều so với north-south cùng với việc sử dụng công nghệ ảo hóa và hầu hết các thành phần của ứng dụng đều nằm trong một DC.
Thông tin dưới đây từ Intel, họ tìm ra 2 tình huống khác nhau.
3.1. Nếu traffic East-west, DPDK hiệu quả hơn SR-IOV
Do traffic được định tuyến/chuyển mạch trong server và không ra ngoài đến NIC nên không tận dụng đến khả năng của SR-IOV trong khi trường hợp này SR=IOV có thể gây ra bottle nech tại NIC.
3.2. Nếu traffic là North-south, SR-IOV hiệu quả hơn DPDK
Kết luận:
Bạn cần biết thiết kế ứng dụng và traffic flow để lựa chọn phương án phù hợp. Nếu ứng dụng gồm nhiều microservice trong 1 server, DPDK là giải pháp tốt. Mặt khác, nếu ứng dụng có nhiều module trên nhiều server khác nhau và giao tiếp với nhau, SR-IOV nên được lựa chọn, cũng đừng quên có phương án sử dụng cả Sr-IOV với DPDK trong VNF để tối ưu.
Source: Linkedin