Hai nhãn được dùng như thể là một: tăng tốc bằng phần cứng và đẩy xuống kernel. Cái đầu mô tả thủ tục AES của thư viện thực thi những tập lệnh nào, cái sau mô tả việc xử lý gói tin diễn ra ở đâu. Một VPN có thể có cái đầu mà không có cái sau, có cái sau mà không có cái đầu, hoặc có cả hai cùng lúc. Mọi quyết định về hiệu năng phải bắt đầu bằng việc gọi tên cái nào trong hai cái bạn thực sự đang thay đổi.

Hai trục, không phải một điểm số

Trục thứ nhất là cách hiện thực: mã thực hiện AES-256-GCM được đưa tới phiên bản dùng tập lệnh chuyên dụng của bộ xử lý hay tới một thủ tục di động thực thi chúng như số học thông thường. Lựa chọn này sống bên trong thư viện mật mã và được đưa ra khi thư viện khởi tạo.

Trục thứ hai là vị trí: gói tin đi qua đường biến đổi của kernel hay một tiến trình nền trong không gian người dùng đọc từ thiết bị đường hầm, mã hóa và ghi lại.

Không trục nào giới hạn trục kia. Một VPN trong không gian người dùng trên CPU có tập lệnh AES có thể dùng chúng suốt thời gian, còn đường đi qua kernel trên CPU không có chúng sẽ quay về bản hiện thực phần mềm. Các nhãn trong tài liệu nhà cung cấp hiếm khi làm rõ khác biệt đó, vì vậy lời khuyên tinh chỉnh sao chép giữa hai tình huống thường chẳng làm được gì.

Trục một: mã nào thực hiện việc mã hóa

OpenSSL phát hiện các tính năng của bộ xử lý trong lúc khởi tạo và dùng kết quả để chọn những đường mã đã tối ưu, như tài liệu về khả năng x86 mô tả. AES-NI là một trong những khả năng được ghi nhận đứng sau việc điều phối đó. Không điều nào trong số này đòi hỏi thư viện phải trở thành thành phần của kernel.

Hãy xác nhận tính năng hiển thị với tiến trình trước khi cho rằng đường nhanh đang được dùng. Trên Linux nguồn là trường flags trong /proc/cpuinfo, và bên trong máy khách nó phản ánh điều hypervisor phơi ra chứ không phải tên mẫu của máy chủ vật lý.

grep -m1 '^flags' /proc/cpuinfo | grep -o '\baes\b'
openssl list -providers -verbose

Lệnh thứ hai nêu tên các nhà cung cấp được nạp trong bản dựng đó. Nó không cho biết dịch vụ VPN liên kết với thư viện nào, và một máy chủ có thể mang hai bản cài OpenSSL trong khi tiến trình đang chạy chỉ dùng một trong số đó.

Trục hai: đường đi của gói tin chạy ở đâu

Đặt trong kernel nghĩa là việc biến đổi diễn ra trong bộ máy IPsec của chính kernel hoặc trong trình điều khiển đường hầm bên trong kernel, nên gói tin không cần đi đi về về qua tiến trình trong không gian người dùng cho từng lô. Điều này có thể cắt bớt việc sao chép và chuyển ngữ cảnh, và trải việc ra các nhân theo cách một tiến trình nền một luồng không làm được. Nó cũng chuyển các bộ đếm và dấu vết mà bạn sẽ đọc khi thông lượng giảm, vì công việc giờ diễn ra ở phía bên kia một ranh giới bạn không kiểm soát. Hãy coi đó là chi phí gỡ lỗi, không chỉ là quyết định hiệu năng.

Nó không tạo ra hỗ trợ tập lệnh, không cấu hình thuật toán và không làm cho một tuyến đang có hoạt động.

Ảo hóa cũng thêm một nếp gấp trên trục này. Máy khách có thể nhận một mẫu CPU bị che đi giấu những tính năng mà máy chủ có, và máy khách lồng trong có thể thấy còn ít hơn. Hãy đọc góc nhìn tính năng từ bên trong môi trường nơi VPN thực sự chạy, không phải từ bảng điều khiển hypervisor.

Mỗi lựa chọn mua được gì, và không làm được gì

Câu hỏi thực tế là thời gian đi đâu. Nếu một luồng bận, việc sao chép bộ đệm lặp lại hoặc một lần gọi hệ thống cho mỗi gói tin đang giới hạn thông lượng, thì chuyển việc biến đổi sang một đường loại bỏ những chi phí đó có thể giúp ích, miễn là kernel hiện thực phép biến đổi bạn cần.

Nếu giới hạn là một liên kết lên bị tắc, một đường có mất mát, thời gian khứ hồi dài, một dịch vụ đích bị bão hòa hay một luồng bị ghim vào một nhân, thì vị trí không thay đổi điều gì quan trọng. Điều tương tự áp dụng cho việc chọn tập lệnh: AES trên phần cứng chuyên dụng không sửa được tuyến bị thiếu và sẽ không giúp gì nếu đường hầm nằm không vì phân giải tên thất bại.

Ở đâu cả hai cùng áp dụng, chúng bổ sung cho nhau. Đường đi qua kernel có thể dùng cùng cách điều phối ở mức tập lệnh bên trong API mật mã của kernel, và đường đi trong không gian người dùng với một thư viện được chọn tốt đã dùng nó rồi. Quyết định không phải là cái nào nhanh hơn một cách trừu tượng; mà là bạn có bằng chứng cho chi phí nào.

Ghi lại bốn sự thật trước khi thay đổi bất cứ điều gì

Ghi lại tệp nhị phân của dịch vụ và thư viện mật mã mà nó liên kết, vì chúng quyết định trục thứ nhất. Sau đó ghi lại việc bảo vệ dữ liệu đã thương lượng, vì một thuật toán không có đường tập lệnh chuyên dụng hành xử khác với thuật toán có, và bộ thuật toán do cả hai bên chọn.

Tiếp theo là góc nhìn tính năng từ bên trong môi trường đang chạy, và cuối cùng là đường đi gói tin đang hoạt động kèm bằng chứng rằng chế độ bạn nghĩ là đang bật thực sự đang bật. Một mô-đun được nạp không phải bằng chứng rằng một cấu hình dùng nó, và một dòng cấu hình không phải bằng chứng rằng kernel đã chấp nhận nó.

Thay đổi một thứ, rồi so sánh với một khối lượng công việc đều đặn có cùng điểm cuối và cùng hướng truyền. Một tuyên bố về tốc độ mà bạn chưa đo có giá trị thấp hơn một ghi chú nói rằng phần phụ trợ chưa bao giờ bị nghi ngờ.

Bài viết liên quan