Bài viết này trình bày về Swift, một bộ lọc gói tin để nắm bắt gói dữ liệu hiệu suất cao. Các tính năng chính của Swift bao gồm: cập nhật độ trễ cực thấp lọc cho lọc gói tin năng động, và xử lý gói tốc độ cao. Căn cứ vào hướng dẫn thiết lập máy tính phức tạp (CISC) hướng dẫn thiết lập kiến trúc (ISA), Swift đạt được trước đây với những hướng dẫn thiết kế tránh việc lập và kiểm tra an ninh, và sau này chủ yếu sử dụng SIMD (đơn lệnh, đa dữ liệu). Chúng tôi thực hiện Swift trong Linux kernel 2.6 cho cả hai kiến trúc i386 và x86_64. Swift hỗ trợ người dùng hai bộ giao diện lập trình ứng dụng (API): một API thân thiện cho tương thích ngược và một API hướng đối tượng để đơn giản hóa mã hóa bộ lọc BPF. Chúng tôi đánh giá cao hiệu suất lọc động và tĩnh của Swift trên nhiều máy tính với các thiết lập phần cứng khác nhau. Chúng tôi so sánh Swift với BPF (bộ lọc gói tin BSD) - chuẩn phổ biến cho lọc gói tin trong hệ thống và bộ lọc điều hành hiện đại, mã hóa C tối ưu hóa được sử dụng để thể hiện hiệu suất tốt nhất có thể. Đối với nhiệm vụ lọc động, Swift nhanh hơn BPF ít nhất 3 lần về độ trễ cập nhật bộ lọc. Đối với nhiệm vụ lọc tĩnh, Swift tốt hơn BPF đến ba lần về tốc độ xử lý gói tin, và đạt được hiệu suất gần gũi hơn với các bộ lọc C tối ưu hóa
1 TRƯỜNG ĐẠI HỌC HẢI PHÒNG KHOA TOÁN-TIN *****&***** BÁO CÁO BÀI TẬP LỚN MÔN: TRUYỀN SỐ LIỆU Tìm hiểu Swift: Bộ lọc Packet động nhanh Giáo viên hướng dẫn:Lê Đắc Nhường Sinh viên thực hiện: Nguyễn Anh Hiếu Nguyễn Viết Hải Hoàng Thị Loan Phan Thị Thanh Nhàn Đinh Thị Thanh Thủy 2 TÓM TẮT ĐỀ TÀI Bài viết này trình bày về Swift, một bộ lọc gói tin để nắm bắt gói dữ liệu hiệu suất cao. Các tính năng chính của Swift bao gồm: cập nhật độ trễ cực thấp lọc cho lọc gói tin năng động, và xử lý gói tốc độ cao. Căn cứ vào hướng dẫn thiết lập máy tính phức tạp (CISC) hướng dẫn thiết lập kiến trúc (ISA), Swift đạt được trước đây với những hướng dẫn thiết kế tránh việc lập và kiểm tra an ninh, và sau này chủ yếu sử dụng SIMD (đơn lệnh, đa dữ liệu). Chúng tôi thực hiện Swift trong Linux kernel 2.6 cho cả hai kiến trúc i386 và x86_64. Swift hỗ trợ người dùng hai bộ giao diện lập trình ứng dụng (API): một API thân thiện cho tương thích ngược và một API hướng đối tượng để đơn giản hóa mã hóa bộ lọc BPF. Chúng tôi đánh giá cao hiệu suất lọc động và tĩnh của Swift trên nhiều máy tính với các thiết lập phần cứng khác nhau. Chúng tôi so sánh Swift với BPF (bộ lọc gói tin BSD) - chuẩn phổ biến cho lọc gói tin trong hệ thống và bộ lọc điều hành hiện đại, mã hóa C tối ưu hóa được sử dụng để thể hiện hiệu suất tốt nhất có thể. Đối với nhiệm vụ lọc động, Swift nhanh hơn BPF ít nhất 3 lần về độ trễ cập nhật bộ lọc. Đối với nhiệm vụ lọc tĩnh, Swift tốt hơn BPF đến ba lần về tốc độ xử lý gói tin, và đạt được hiệu suất gần gũi hơn với các bộ lọc C tối ưu hóa. 3 1. Giới thiệu Một bộ lọc gói tin là một hệ thống hoạt động phân loại các gói dữ liệu mạng theo các tiêu chí được đưa ra bởi các ứng dụng của người sử dụng, và truyền tải các gói dữ liệu được chấp nhận từ một giao diện mạng trực tiếp các ứng dụng mà không cần đi qua các ngăn xếp mạng. Kể từ khi ra đời bộ lọc gói tin đã trở nên cần thiết để xây dựng các dịch vụ mạng cơ bản khác nhau, từ giám sát giao thông, vào mạng kỹ thuật, và phát hiện xâm nhập. Trong những năm gần đây, tốc độ mạng gia tăng đột biến và các giao thức phức tạp cũng leo thang, các bộ lọc gói tin đã đối mặt với những thách thức ngày càng tăng bởi nhiều tác vụ năng động lọc hơn và nhanh hơn các yêu cầu lọc. Tuy nhiên, hiện tại hệ thống bộ lọc gói tin chưa được giải quyết đầy đủ những thách thức này một cách hiệu quả và an toàn. Nhiệm vụ năng động lọc tham khảo trực tuyến lọc gói thủ tục trong đó các tiêu chí lọc thường xuyên thay đổi theo thời gian. Thông thường, khi một nhiệm vụ lọc có thể không hoàn toàn xác định các tiêu chí ưu tiên, và một phần chưa biết chỉ có thể được xác định tại thời gian chạy, các tiêu chí lọc đã được cập nhật trong suốt quá trình lọc. Ví dụ, nhiều giao thức mạng, chẳng hạn như FTP, RTSP (Real Time Streaming Protocol) và SIP (Session Initiation Protocol), thiết lập kết nối với số lượng cổng tự động - thương lượng. Thu hút lưu lượng truy cập mạng sử dụng giao thức như vậy đòi hỏi phải lọc năng động. Ngay cả với tiêu chuẩn lọc được xác định trước, vẫn cần sử dụng bộ lọc động khá thường xuyên. Ví dụ, phát hiện một xâm nhập hệ thống mạng (NIDS) cần thực hiện phân tích lưu lượng truy cập đáng ngờ. Tuy nhiên, áp dụng thủ tục tốn kém để tất cả các gói lưu lượng giao thông cao nghiêm trọng sẽ quá tải hệ thống. Thay vào đó, một NIDS đầu tiên có thể áp dụng các tiêu chí lọc đơn giản, chẳng hạn như theo dõi lưu lượng truy cập đến và đi từ một honeypot hoặc darknet. Khi hoạt động đáng ngờ được phát hiện, các NIDS sau đó có thể cập nhật các tiêu chí lọc và nắm bắt được lưu lượng truy cập các máy chủ đáng ngờ để kiểm tra sâu. Là bộ lọc gói tin thực tế về biến thể UNIX hiện đại, BPF đã chỉ ra bất cập trong việc xử lý các nhiệm vụ lọc tĩnh và năng động, đặc biệt là sau [ 4 , 7 , 10 ]. Cập nhật bộ lọc trong BPF phải trải qua ba giai đoạn "chế biến": biên soạn, sao chép sử dụng hạt nhân, và kiểm tra an ninh .Trong giai đoạn biên dịch, lọc tiêu chuẩn theo quy định của ngôn ngữ con người theo định hướng phân cấp lọc được dịch và tối ưu hóa vào chương trình máy lọc BPF theo định hướng. Trong giai đoạn sao chép sử dụng hạt nhân, các chương trình lọc biên soạn được sao chép vào hạt nhân. Cuối cùng, trong giai đoạn kiểm tra an ninh, hạt nhân cư trú BPF hướng dẫn thông dịch viên kiểm tra chương trình sao chép bộ lọc cho các hoạt động nguy 4 hiểm tiềm tàng như các chi nhánh lạc hậu, đảm bảo rằng người sử dụng cấp tối ưu hóa các lỗi không thể kích hoạt hành vi sai trái hạt nhân (ví dụ, vòng lặp vô hạn). Do đó, toàn bộ quá trình cập nhật bộ lọc trong BPF gây ra độ trễ kéo dài, dao động từ mili giây đến vài giây tùy thuộc vào tiêu chí phức tạp và khối lượng công việc hệ thống. Mạng tốc độ cao, hàng trăm hoặc thậm chí hàng ngàn các gói dữ liệu có thể được bỏ qua bởi BPF trong mỗi lần cập nhật bộ lọc, có hiệu quả để lại một cập nhật bộ lọc thường xuyên, thường theo yêu cầu của một nhiệm vụ lọc năng động "cửa sổ mù", Làm trầm trọng thêm mức độ mù lòa. Một "cửa sổ mù" trùng hợp với việc khởi tạo một phiên mạng mới có thể gây ra vấn đề nghiêm trọng trên các ứng dụng nhất định như NIDS, kể từ khi bắt đầu của một kết nối mạng bình thường là quan tâm đặc biệt cho an ninh phân tích. Bộ lọc gói tin gần đây như XPF và FFPF di chuyển với khả năng gói lưu chế biến hơn từ không gian người dùng vào hạt nhân, làm giảm chuyển mạch bối cảnh và cải thiện hiệu suất tổng thể. Tuy nhiên, bộ lọc không hoạt động tốt cho các nhiệm vụ năng động lọc. Bởi vì XPF sử dụng động cơ BPF dựa trên bộ lọc, nó không cung cấp cải tiến về độ trễ của bộ lọc cập nhật. FFPF cố gắng để giải quyết vấn đề này bằng cách sử dụng chức năng thư viện không gian hạt nhân, được gọi là các chức năng bên ngoài, trước khi biên dịch mã nhị phân cho các chức năng cụ thể như phân tích giao thức mạng và cập nhật trạng thái.Việc sử dụng các chức năng bên ngoài làm tăng tốc độ lọc và giúp giảm bớt khả năng mở rộng, mà còn làm tăng độ phức tạp lập trình.Các chức năng bên ngoài, không giống như kiểm tra an toàn bộ lọc BPF, có quyền truy cập đặc quyền đầy đủ của hạt nhân. Chức năng mới bên ngoài như vậy, nên cẩn thận kiểm tra đối với các lỗi bảo mật tiềm năng, làm cho chúng phù hợp với những thay đổi thường xuyên. Trong bài báo này, chúng tôi đề xuất Swift, một bộ lọc gói tin rằng có một cách tiếp cận khác để đạt được hiệu suất cao, đặc biệt là cho các công việc năng động lọc. Giống như BPF, Swift được dựa trên một tập cố định các hướng dẫn thực hiện bởi một thông dịch viên trong hạt nhân. Không giống như BPF, Swift được thiết kế để tối ưu hóa hiệu suất lọc với hướng dẫn mạnh mẽ và một mô hình tính toán đơn giản. Những hướng dẫn của Swift có thể hoàn thành nhiệm vụ lọc với một số lượng nhỏ các hướng dẫn. Những chỉ dẫn mạnh mẽ của Swift giống như những người trong ISA CISC và tối ưu hóa hỗ trợ tương tự SIMD (đơn lệnh, đa dữ liệu). Chạy trên các hướng dẫn mạnh mẽ, Swift đạt lọc tĩnh tăng tốc chủ yếu do mở rộng SIMD và tối ưu hóa thực hiện phân cấp, một thời gian chạy tối ưu hóa kỹ thuật để tránh giải thích hướng dẫn dự phòng đặc biệt.Quan trọng hơn, kết hợp các hướng dẫn mạnh mẽ với mô hình tính toán đơn giản, Swift loại bỏ biên soạn bộ lọc và 5 kiểm tra an ninh trong bản cập nhật bộ lọc, và do đó cải thiện đáng kể hiệu suất năng động lọc về độ trễ cập nhật bộ lọc. Chúng tôi thực hiện Swift trong Linux kernel 2.6 cho cả hai kiến trúc i386 và x86_64. Việc thực hiện hạt nhân của Swift là hoàn toàn tương thích và có thể cùng tồn tại với LSF (Linux Ổ cắm Filter), "một bản sao BPF" trong Linux. Các thư viện không gian người dùng Swift cung cấp một giao diện thân thiện với BPF-lập trình ứng dụng (API) với cú pháp lọc văn bản cho tương thích ngược, và một API hướng đối tượng đơn giản hóa mã hóa bộ lọc. Để xác nhận hiệu quả của Swift, chúng tôi tiến hành thí nghiệm rộng rãi trên nhiều máy tính với các thiết lập phần cứng khác nhau và tốc độ xử lý.Để chúng tôi so sánh hiệu suất của Swift với LSF và tối ưu hóa bộ lọc C. Những bộ lọc C được sử dụng để thể hiện hiệu suất lợi nhuận có thể đạt được tối ưu hóa mã nhị phân.Đối với nhiệm vụ lọc năng động, Swift đạt được ít nhất ba đơn đặt hàng của độ trễ cường độ cập nhật bộ lọc thấp hơn so với LSF, và làm giảm số lượng các gói dữ liệu bị mất cho mỗi kết nối khoảng hai bậc độ lớn so với LSF. Đối với nhiệm vụ lọc tĩnh với tiêu chí đơn giản lọc, Swift chạy nhanh như LSF, nhưng với tiêu chuẩn lọc phức tạp, Swift tốt hơn LSF đến ba lần về tốc độ xử lý gói tin, và thực hiện nhiều gần gũi hơn với các bộ lọc C tối ưu hóa hơn LSF. 2. Công việc liên quan CMU / Stanford Packet Filter (CSPF), một hạt nhân cư trú mạng gói tin, giới thiệu các khái niệm bộ lọc gói tin. CSPF cung cấp một con đường nhanh chóng, thay vì con đường lớp / xếp chồng lên nhau bình thường, cho các gói tin mạng để tiếp cận các ứng dụng không gian người dùng mệnh của họ. Động cơ ban đầu phía sau CSPF là để tạo điều kiện thuận lợi cho việc thực hiện các giao thức mạng như TCP / IP ở không gian người dùng. Mặc dù mục đích và các kỹ thuật khác nhau trong các bộ lọc gói tin tiếp theo, mô hình CSPF của cư dân hạt nhân và lọc gói tin độc lập giao thức được thừa kế bởi tất cả các con cháu của nó. BPF nhằm mục đích hỗ trợ các ứng dụng mạng lưới giám sát tốc độ cao chẳng hạn như tcpdump. Ứng dụng người dùng thông báo hạt nhân trong máy lọc lợi ích của mình thông qua một ngôn ngữ lọc, và sau đó nhận được từ BPF các gói tin phù hợp với tiêu chuẩn lọc. Để đạt được hiệu suất cao, BPF giới thiệu lọc gói tại chỗ để giảm cross-domain không cần thiết, một máy lọc dựa trên đăng ký để sửa chữa không phù hợp giữa các bộ lọc và kiến trúc cơ bản của nó, và một biểu đồ kiểm soát dòng chảy (CFG) mô hình để tránh không cần thiết tính toán. BPF + tăng cường thêm hiệu suất của BPF bằng cách khai thác tối ưu hóa dòng chảy dữ 6 liệu toàn cầu để loại bỏ các vị dư thừa trên các tiêu chí lọc và sử dụng chỉ trong thời gian biên dịch để chuyển đổi một tiêu chuẩn lọc để mã máy. XPF làm tăng sức mạnh tính toán của BPF bằng cách sử dụng bộ nhớ liên tục và cho phép nhảy ngược . Hồi đáp của tcpdump xử lý không hiệu quả các cổng năng động, một công cụ giám sát đặc biệt mmdump đã được phát triển để nắm bắt lưu lượng truy cập Internet đa phương tiện, trong đó cổng động được sử dụng rộng rãi. mmdump làm giảm chi phí biên dịch bằng cách khai thác tính thống nhất của bộ lọc của nó tiêu chuẩn mô hình. Một chức năng tùy chỉnh trong mmdump lắp ráp tiêu chuẩn mới lọc bằng cách sử dụng các phần của khối tiêu chuẩn trước khi biên dịch được bảo quản từ việc biên soạn bộ lọc ban đầu.Hướng dẫn cấp cao của Swift SIMD và tối ưu hóa những hướng dẫn phân cấp có thể được xem như là một tổng quát của kỹ thuật này, nhưng Swift kỹ thuật áp dụng cho bất kỳ loại bộ lọc và yêu cầu kỹ thuật trình biên dịch không đặc biệt. MPF (Mach Packet Filter), tìm đường, và DPF (Dynamic Packet Filter) là bộ lọc được thiết kế để các gói tin demultiplex cho người sử dụng cấp mạng. Để các gói dữ liệu demultiplex hiệu quả đối với người sử dụng các ứng dụng cấp nhiều và để gửi các gói dữ liệu bị phân mảnh, MPF mở rộng các tập lệnh của BPF với một chức năng kết hợp liên kết. Với cùng một mục tiêu đạt được cao khả năng mở rộng bộ lọc như MPF, tìm đường, tóm tắt quá trình lọc như một quá trình mô hình kết hợp và thông qua một cấu trúc dữ liệu đặc biệt cho các trừu tượng. Trừu tượng làm cho Pathfinder tuân theo để thực hiện trong cả hai phần mềm và phần cứng và có khả năng xử lý lưu lượng truy cập mạng Gbps. DPF sử dụng công nghệ năng động thế hệ mã, thay vì một công cụ lọc dựa trên truyền thống phiên dịch, biên soạn tiêu chuẩn lọc gói tin vào mã máy.DPF-như thế hệ mã năng động có thể cải thiện hiệu suất của Swift về nhiệm vụ lọc tĩnh. Bộ lọc gói Fairly Fast Packet Filter (FFPF, sau này đổi tên thành Streamline) là các nghiên cứu gần đây nhất trên gói lọc . Không giống như các bộ lọc gói tin truyền thống như BPF, FFPF là một khuôn khổ để theo dõi mạng. Trong khuôn khổ của FFPF, nhiều chương trình lọc gói tin có thể được nạp cùng một lúc vào hạt nhân. Các luồng xử lý trong các chương trình này được tổ chức như là một biểu đồ chỉ dẫn. So với kiến trúc lọc BPF, FFPF đáng kể có thể giảm chi phí của việc sao chép gói tin cho nhiều chương trình đồng thời lọc bằng cách sử dụng dòng chảy nhóm, chia sẻ bộ đệm tròn, và phần cứng (ví dụ, Network Processing Unit). Vì vậy, FFPF đạt được khả năng mở rộng lớn hơn nhiều so với BPF. FFPF mở rộng công suất lọc thông qua các chức năng bên ngoài, mà là về cơ bản bản địa mã chạy 7 trong không gian hạt nhân. Ngoài ra, FFPF tính năng thiết kế ngôn ngữ trung lập và cung cấp khả năng tương thích với BPF. FFPF và Swift được bổ sung khi họ nhắm mục tiêu các vấn đề hoàn toàn khác. FFPF tập trung vào khuôn khổ lọc gói tin và đóng góp chính của nó nằm trong việc cải thiện khả năng mở rộng để hỗ trợ nhiều ứng dụng giám sát đồng thời, trong khi mục tiêu Swift gói tin lọc động cơ và cung cấp một cơ chế lọc nhanh, linh hoạt và an toàn cho các ứng dụng cá nhân. Nhờ thiết kế ngôn ngữ trung tính của FFPF, Taylor có thể được thực hiện trong khuôn khổ FFPF, tận dụng tối đa của cả hai mẫu thiết kế. Bên cạnh các giải pháp phần mềm chụp dựa trên gói tin, nhiều giải pháp dựa trên phần cứng đã được đề xuất để đáp ứng những thách thức đặt ra bởi các mạng tốc độ rất cao. Cụ thể, FPGA và ASIC đã được sử dụng rộng rãi trong việc phát hiện xâm nhập gần đây và hệ thống phòng. Hơn nữa, khác hơn so với các giám sát gói bộ lọc dựa trên kiến trúc mạng, có tồn tại hệ thống giám sát nhiều chuyên ngành kiến trúc như OC3MAN, Cối xay gió , Nprobe , và SCAMPI . Ngay cả với những phần cứng, giải pháp hệ thống chuyên ngành, lọc gói vẫn đóng một vai trò quan trọng trong mạng lưới giám sát và đo lường do đơn giản, lắp đặt phổ quát của nó, chi phí-hiệu quả cao, và các ứng dụng phong phú. 3. Thiết kế Trong phần này, trước tiên chúng ta hiện tại động lực của Swift và tổng quan về thiết kế của nó, sau đó chúng tôi chi tiết thiết kế của Swift, bao gồm cả ISA độc đáo của nó, và cuối cùng chúng tôi phân tích các đặc điểm của Swift về hiệu suất và an ninh. 3.1. Động lực Không hiệu quả của BPF quan sát thấy trong các kinh nghiệm quá khứ của chúng tôi trực tiếp thúc đẩy thiết kế của Swift. Suy thoái hiệu suất đáng kể nhất của BPF xảy ra trong các công việc năng động lọc. Suy thoái này chủ yếu là do cập nhật thường xuyên lọc. Như đã đề cập ở trên, quá mức độ trễ cập nhật bộ lọc lâu dài trong BPF là do ba bộ lọc tiền xử lý hoạt động: bộ lọc biên dịch lại, sao chép sử dụng hạt nhân, và kiểm tra an ninh. Trong khi hai sau chơi không phải không đáng kể vai trò trong sự chậm trễ dài, phần lớn của độ trễ được giới thiệu bộ lọc biên dịch lại. Thời gian cập nhật bộ lọc trong BPF sẽ được rút ngắn đáng kể nếu biên dịch lại được chọn lọc thực hiện trên nguyên thủy thay đổi, hoặc hoàn toàn bỏ qua, như mmdump hoàn thành cho được lựa chọn nhiệm vụ lọc. Tuy nhiên, đối với 8 nhiệm vụ giám sát mạng mục đích chung, biên soạn lại bộ lọc BPF toàn bộ là không thể tránh khỏi cho mỗi lần cập nhật, bởi vì hướng dẫn kiến trúc và thiết lập tổ chức chương trình lọc không phù hợp để cập nhật nhanh chóng. BPF sử dụng một lệnh RISC như thiết lập cho một máy đăng ký ở mức độ thấp trừu tượng. Như vậy, mỗi pcap ngôn ngữ nguyên thủy được dịch thành một khối giảng dạy bao gồm một số biến các hướng dẫn đơn giản. Thay đổi một nguyên thủy trong một bộ lọc thường làm thay đổi kích thước của khối hướng dẫn tương ứng. Nếu không có biên soạn lại, chúng ta cần phải sửa đổi mã bù đắp liên quan đến hướng dẫn (ví dụ như, có điều kiện chi nhánh) trên toàn biên soạn toàn bộ lọc để thích ứng với thay đổi. Kiểm soát dòng chảy tối ưu hóa, đó là không thể thiếu cho BPF để tăng tốc độ thực hiện bộ lọc, làm cho vấn đề thậm chí còn tồi tệ hơn. BPF kiểm soát dòng chảy tối ưu hóa kết hợp hướng dẫn giống hệt nhau thành một. Điều này làm giảm đáng kể cả về quy mô chương trình lọc và thời gian thực hiện, nhưng phức tạp cập nhật hướng dẫn chia sẻ bởi một số nguyên thủy. Ngoài ra để lọc độ trễ cập nhật, chúng tôi cũng thấy rằng hiệu quả thực hiện bộ lọc BPF có thể được cải thiện đáng kể. ISA RISC như trong BPF gây ra chi phí cao giải thích hướng dẫn. Giải thích trên không đề cập đến các hoạt động thông dịch viên phải thực hiện trước khi thực hiện một bộ lọc hướng dẫn thực tế, chẳng hạn như bảo trì chương trình truy cập, tải hướng dẫn, hoạt động giải mã, và vv. Những hoạt động không hiệu quả đối với đánh giá các tiêu chí lọc, nhưng không thể được bỏ qua. Bởi vì mỗi hướng dẫn BPF hoàn thành chỉ đơn thuần là một nhiệm vụ rất đơn giản, chẳng hạn như tải, số học, và phân nhánh điều kiện, hầu hết thời gian CPU trong việc thực hiện một chương trình BPF là chi tiêu vô ích như chi phí giải thích, và thời gian CPU chi tiêu trong đánh giá các tiêu chí lọc các gói tin thực tế chỉ chiếm một phần nhỏ của tổng số. Kết quả đo (chi tiết tại mục 5.2 ) cho thấy chi phí giải thích BPF khoảng 5,2 nano giây trên trung bình trong một cái máy với Intel Xeon 2.0GHz CPU 64-bit, và chiếm gần 56% thời gian thực hiện hướng dẫn trung bình. BPF tiếp tục sử dụng rộng rãi có thể được chủ yếu là do (1) trừu tượng giả- máy chung chung, mà đảm bảo nền tảng tương thích, và (2) tự nhiên-ngôn ngữ- như, nguyên thủy dựa trên ngôn ngữ lọc, trong đó đảm bảo dễ sử dụng cho phát triển ứng dụng và quản trị mạng. Vì vậy, chúng tôi quyết định để kế thừa từ BPF trừu tượng giả-máy và nguyên thủy ngôn ngữ, trong khi phát triển mô hình lọc riêng của chúng tôi để đạt được sự cải thiện hiệu suất đáng kể. 9 3.2 Thiết kế Tổng quan Mục tiêu chính của Swift là để đạt được độ trễ thấp cập nhật bộ lọc. Cách tiếp cận của chúng tôi để đạt được mục tiêu này là giảm bộ lọc tiêu chuẩn trước khi chế biến cập nhật bộ lọc càng nhiều càng tốt. Cụ thể hơn, chúng tôi cố gắng để tránh tái lập và tối ưu hóa bộ lọc, cho phép "tại chỗ" bộ lọc cập nhật, và loại bỏ kiểm tra an ninh. Để đạt được "lập tự do" cập nhật, tiêu chuẩn lọc phải bản đồ trực tiếp vào các hướng dẫn thông dịch viên . Điều này làm cho tập lệnh cao cấp, CISC giống như kiến trúc một sự lựa chọn tự nhiên cho Swift. Ngoài ra để tiết kiệm thời gian soạn thảo, giống như tập lệnh CISC cũng sẽ mở ra một cánh cửa để tối ưu hóa hiệu suất. Một hướng dẫn Swift phức tạp có thể hoàn thành nhiệm vụ tương tự như một số hướng dẫn BPF đơn giản, do đó làm giảm chi phí giải thích hướng dẫn. Hai sự lựa chọn thiết kế được thực hiện để kích hoạt tính năng sửa đổi bộ lọc tại chỗ: ấn định hướng dẫn chiều dài và loại bỏ tối ưu hóa bộ lọc. Bằng cách sửa chữa các chiều dài hướng dẫn, chúng ta tránh sự cần thiết phải thay đổi hướng dẫn về thay thế hướng dẫn.Bằng cách loại bỏ tối ưu hóa bộ lọc, không chỉ làm chúng tôi tiết kiệm thời gian quý báu trong quá trình cập nhật bộ lọc, mà còn bảo tồn một ánh xạ giữa nguyên thủy lọc và hướng dẫn chương trình lọc: không có hướng dẫn được chia sẻ. Hình 1: tổ chức bộ lọc BPF (a) và Swift (b) các tiêu chí phù hợp với lưu lượng truy cập HTTP và DNS 10 Kết quả là, thông tin cập nhật đến một bộ lọc có thể được áp dụng trực tiếp các hướng dẫn bị ảnh hưởng mà không làm thay đổi các hướng dẫn khác hoặc cấu trúc chương trình lọc. Tính năng này giúp hơn nữa để tối ưu hóa cập nhật bộ lọc bằng cách giảm sao chép dữ liệu không cần thiết sử dụng hạt nhân. Chỉ có phần cập nhật của một tiêu chuẩn lọc được sao chép từ không gian người dùng hạt nhân. Một mô hình tính toán đơn giản hóa đảm bảo an toàn chương trình lọc cho Swift mà không kiểm tra an ninh. Với ISA chuyên ngành, mỗi hướng dẫn Swift là có thể thực hiện một tập hợp các hoạt động phù hợp với mô hình phức tạp. Con đường thực hiện của một chương trình lọc được xác định bởi kết quả đánh giá Boolean từng giảng dạy: hoặc là tiếp tục ("true") hoặc hủy bỏ ("false"). Vì vậy, Swift không cần lưu trữ, ngành hướng dẫn để kiểm soát các con đường thực hiện một chương trình lọc. Với một tập cố định các hướng dẫn, con đường thực hiện mạch hở, và không lưu trữ dữ liệu, bất kỳ chương trình lọc Swift là an toàn để chạy trong kernel. Mục tiêu thứ yếu của chúng tôi là để tăng hiệu quả thực hiện bộ lọc.Chúng tôi đạt được mục tiêu này bằng cách khai thác tối ưu hóa sau đây: mở rộng SIMD để các tập lệnh Swift và tối ưu hóa thực hiện phân cấp. SIMD cho phép một thông dịch viên để thực hiện một cách giải thích hướng dẫn duy nhất và áp dụng các hoạt động tương tự trên tập hợp nhiều dữ liệu, do đó giảm đáng kể chi phí giải thích hướng dẫn. SIMD đã được sử dụng rộng rãi trong bộ xử lý hiệu suất cao hiện đại, chẳng hạn như Intel Pentium loạt và hàng loạt các bộ vi xử lý IBM điện. Trong khi Swift thiết kế đảm bảo độ trễ thấp cập nhật bộ lọc, nó cũng forfeits lợi ích liên quan với chương trình tối ưu hóa bộ lọc. Để bù đắp sự mất mát hiệu suất có thể, chúng tôi giới thiệu một phương pháp tối ưu hóa thay thế được gọi là phân cấp thực hiện tối ưu hóa.Tối ưu hóa này được dựa trên quan sát của chúng tôi trong một quá trình lọc năng động, nguyên thủy mới được gia tăng thường liên quan đến một số những cái hiện có. Ví dụ, nguyên thủy mới khá thường xuyên theo dõi cùng một máy chủ nhưng trên các cổng khác nhau hoặc nắm bắt được lưu lượng truy cập giao thức tương tự nhưng cho các host khác nhau.Do đó, nguyên thủy hiện tại có thể được xem như là "cha mẹ" nguyên thủy mới.