Tại sao cuộc thăm dò không được thay thế bằng epoll?


8

Mức kích hoạt epolllà rất giống với poll. Tại sao không pollchỉ là một trình bao bọc cho epollcác hệ thống hỗ trợ sau này?

EDIT: Ý tôi là, có bất kỳ rào cản kỹ thuật nào chống lại quyết định đó không? Thực hiện pollnhư epollsẽ làm tăng đáng kể hiệu suất của nhiều ứng dụng mạng. Cần có một số vấn đề kỹ thuật mà tôi không nhận thấy.


5
Đây là những cuộc gọi hệ thống. Nếu bạn không biết anh ấy đang nói về điều gì thì có lẽ bạn nên tìm kiếm nó, nhưng câu hỏi của anh ấy là hoàn toàn hợp lệ.
drrlvn

2
Cả hai đều là các tòa nhà để chờ đợi bất kỳ hoạt động nào trên một bộ mô tả tệp. Epoll dành riêng cho Linux 2.6+. Tôi đã thêm các liên kết đến các trang người đàn ông.

Tôi biết những gì họ đang có. Nhưng có nhiều hệ thống linux / unix giống như cuộc thăm dò ý kiến ​​và câu hỏi không thể được trả lời mà không có thông tin cụ thể về phiên bản nào.
bmargulies

Việc thực hiện pollnhư một trình bao bọc epollsẽ vô cùng phức tạp và không hiệu quả. Bạn sẽ phải thiết lập một bộ mô tả epoll mới và định cấu hình nó mỗi lần hoặc bạn phải thực hiện so sánh đau đớn về cuộc thăm dò hiện tại được đặt với mô tả epoll. Kinh quá!
David Schwartz

Câu trả lời:


2

thăm dò ý kiến ​​đơn giản hơn nhiều cho các trường hợp dễ dàng; nó có thể chỉ hiệu quả đối với một số lượng nhỏ các mô tả tập tin. Người gọi không cần phải lo lắng về việc duy trì các cuộc thăm dò FD và thêm / xóa FD, họ chỉ có thể thêm tất cả những gì họ muốn trên mỗi cuộc gọi để thăm dò ý kiến.

Cảm giác của tôi là chúng là miễn phí, mặc dù cuộc thăm dò COULD được triển khai như một trình bao bọc cho epoll, nhưng có lẽ không nên như vậy.

epoll có thể (gần như) được thực hiện như một trình bao bọc cho cuộc thăm dò, nhưng điều đó sẽ đánh bại các đối số hiệu quả của nó.


1
Đó là câu trả lời có thể xảy ra nhất. Tôi đã thử nghiệm nó và epoll thực sự chậm hơn 10 lần so với cuộc thăm dò cho 1 mô tả tệp của một tệp cục bộ (550 chúng tôi trên 1000 cuộc thăm dò và 5420 chúng tôi trên 1000 epolls (tạo + ctl + chờ + đóng)). epoll_wait chỉ chậm hơn 2 lần so với cuộc thăm dò.

1

Các ngữ nghĩa của poll()epolllà khác nhau. Nếu poll()thông báo cho bạn rằng một bộ mô tả có thể đọc được, thì bạn sẽ đọc một số nhưng không đọc tất cả các byte có sẵn, và sau đó chuyển bộ mô tả đó poll()lại, nó sẽ thức dậy ngay lập tức. AFAIK tương tự là không đúng sự thật epoll.

Cũng lưu ý rằng các epollmô tả là một nguồn hạn chế. Trang chủ nói về các epoll_create()điều kiện thất bại mà AFAIK không xảy ra poll().

Mặc dù tôi không chắc chắn về tất cả các chi tiết triển khai, nhưng từ đó chúng ta có thể nói rằng việc tạo ra poll()một trình bao bọc cho nó không có ý nghĩa gì epoll. Lập trình viên phải nhận thức được những điểm này và mã hiện có được viết với các giả định poll()cho phép sẽ bị phá vỡ.


1
1. Hương vị mặc định của epoll (Kích hoạt cấp độ) hoạt động như thăm dò ý kiến ​​(xem phần Mô tả của trang chủ cho epoll (7)). 2. Thăm dò ý kiến ​​chủ yếu là epoll_create + epoll_ctl + epoll + chờ + đóng. Vì vậy, số lượng mô tả epoll được sử dụng trong cuộc thăm dò tưởng tượng này bị giới hạn bởi số lượng chủ đề thực hiện cuộc thăm dò đồng thời. Vì vậy, có thể có một số kỹ thuật để điều chỉnh max_user_instances để phản ánh số lượng chủ đề tối đa. 3. Tôi đã đăng câu hỏi này vì sự tò mò về những giả định đó là gì.

1

Được rồi, 7 năm sau tôi có một câu trả lời thuyết phục hơn dựa trên bài viết này của Evan Klitzke.

Thứ nhất, lý do tôi đặt câu hỏi ở vị trí đầu tiên là lợi thế hiệu suất thường được đề cập epollso với poll/ select. Từ epollnày có hiệu quả cao hơn (O (1)) so với poll(O ( N )).

Điều không được biết đến rộng rãi là chỉ có kích hoạt cạnh epoll thực sự là O (1), trong khi mức độ bị rối loạn epoll có cùng tiệm cận với O ( N ). Thật vậy, hương vị kích hoạt cấp độ phải đi qua danh sách các fds được xem mỗi lần nó được gọi để tìm những cái có khả năng vẫn còn nhiều dữ liệu đang chờ xử lý. Sự đa dạng kích hoạt cạnh có thể dựa vào các tín hiệu để đáp ứng với các byte mới xuất hiện trong một fd.

Sẽ rất thú vị khi tìm hiểu, làm thế nào chính xác một chủ đề được nối lại phát hiện ra fd nào đã đánh thức nó, nhưng chắc chắn là dữ liệu này được truyền qua trong lúc thức dậy được kích hoạt.

Rõ ràng, poll/ selectkhông thể sử dụng kích hoạt cạnh epoll vì ngữ nghĩa là khác nhau. Như chúng ta đã thấy, việc thực hiện với kích hoạt cấp độ epoll sẽ không mang lại lợi ích hiệu suất tiệm cận. Và có thể, cũng ảnh hưởng tiêu cực đến nó nếu các yếu tố không đổi hoặc các thuật ngữ không đổi cao (vì chúng dường như dựa trên điểm chuẩn thô mà tôi đã làm và trích dẫn trong một nhận xét khác).

Để biết thêm thông tin, vui lòng đọc Chặn I / O, I / O không chặn và Epoll .

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.