2009-11-04 22 views
10

Trong khi thử nghiệm một máy chủ đa hướng UDP mà tôi đã viết trên Windows 7 Ultimate x64, tôi đã xem xét một điều tò mò nhất. Chơi nhạc với foobar2000 ở chế độ nền đáng kể cải thiện tốc độ truyền của máy chủ mà còn bị mất gói nhỏ. Tắt nhạc ngay lập tức giảm tốc độ truyền xuống dưới mức chấp nhận được nhưng cũng làm mất 0 gói dữ liệu. (Tôi có một ứng dụng máy khách nói chuyện với máy chủ và báo cáo lại các gói chưa được trả lời)Thực tiễn tốt nhất về các ứng dụng mạng hiệu suất cao

Tôi biết hành vi điều chỉnh của Vista để làm cho các ứng dụng truyền thông và mạng hoạt động tốt với nhau, nhưng tôi chắc chắn không mong đợi âm nhạc sẽ cải thiện hiệu suất mạng, và cũng không làm giảm hiệu năng mạng xuống cấp đáng kể.

Tôi có thể làm gì về điều này từ quan điểm mã trong ứng dụng máy chủ của tôi để nó thực hiện nhất quán cho dù phát nhạc hay không trên Vista trở lên? Tôi chắc chắn muốn tránh phải thông báo cho tất cả khách hàng về cách chỉnh sửa đăng ký của họ để có được tốc độ truyền có thể chấp nhận được và cũng muốn tránh họ chỉ đơn giản là "phát nhạc" để có được tốc độ truyền được chấp nhận. Ứng dụng nên "chỉ hoạt động" theo ý kiến ​​của tôi. Tôi nghĩ rằng giải pháp liên quan đến một thứ gì đó dọc theo các dòng ưu tiên của quá trình, MMCSS, hoặc có thể là một số lệnh gọi API Windows tối nghĩa khác để làm cho nó hoạt động đúng đắn (TM) tại đây.

Ngoài ra, xin lỗi nhưng tạo trường hợp thử nghiệm có thể tái sản xuất là số lượng công việc không nhỏ. Các hành vi throttling xảy ra chỉ khi trình điều khiển cho NIC vật lý đang tích cực làm việc và không thể được sao chép bằng cách sử dụng giao diện loopback. Người ta sẽ cần cài đặt máy khách, triển khai máy chủ và phần cứng mạng vật lý để kiểm tra.

+0

khi bạn nói 'đang phát nhạc', bạn có nghĩa là đang phát nhạc HD của bạn và sử dụng soundcard không? Hoặc là nó phát trực tuyến qua cùng một card mạng? – Toad

+0

@reinier: Có, foobar2000 đang từ từ tải dữ liệu ra khỏi HD và phát trực tiếp âm thanh sang giao diện âm thanh bên ngoài của tôi qua USB 2.0. –

Trả lời

3

Điều bạn quan sát là tác dụng phụ của độ phân giải đồng hồ cài đặt trình phát media của máy tính thành 1 ms.

này chỉ xảy ra trong quá trình chơi

Các tác dụng phụ là - Ứng dụng của bạn có timeslices nhỏ hơn và điều này imporves ứng dụng của bạn bởi vì bạn có thể có nhiều CPU bị đánh cắp khỏi ứng dụng và với timeslices lâu hơn - lâu hơn thời gian.

Để kiểm tra, bạn có thể chỉ cần đặt độ phân giải hẹn giờ trong ứng dụng của bạn thành 1ms và so sánh hiệu suất mà không cần phát phương tiện.

Nên giống như nếu không có cài đặt clocres nhưng có phương tiện đang phát.

0

Foobar có nhiều plugin được viết bởi những người khác nhau. Đây có thể là nguyên nhân của vấn đề của bạn. Tôi đề nghị bạn đến gần hơn với lý do thực sự. Hãy thử tắt từng plugin một để thực hiện kiểm tra của bạn mỗi khi một plugin bị tắt.

Hy vọng ý tưởng sẽ hữu ích.

+0

Tôi rất nghi ngờ vấn đề là foobar2000 cụ thể. Tôi sẽ thử các trình phát phương tiện khác để chẩn đoán sự cố thêm. Nó * có thể * có liên quan đến giao diện âm thanh USB 2.0 mà tôi sử dụng. Tôi sẽ chạy một số bài kiểm tra với card âm thanh trên bo mạch là tốt. –

0

Âm thanh này giống như thông lượng quản lý TSP/IP dựa trên thuật toán nguyên thủy của nó. Các giấy trắng ở đây nên cung cấp cho nền nhiều hơn nữa. http://www.asperasoft.com/?gclid=CICSzMqD8Z0CFShGagod_ltSMQ Sản phẩm của họ là giao thức UDP hoạt động rất tốt.

+0

Tôi nên đề cập đến rằng tôi sử dụng cả hai giao thức TCP và UDP trong cùng một ứng dụng. TCP chỉ dành cho thông tin kiểm soát và sự phối hợp của tất cả các khách hàng; nó không phải là nút cổ chai ở đây. Tôi sử dụng UDP hoàn toàn để truyền dữ liệu và giữ các gói tin dưới 1500 byte. Tôi đã sử dụng tất cả các UDP nhưng chạy vào vấn đề đồng bộ hóa nghiêm trọng và đã được về để phát minh lại bánh xe TCP vì vậy tôi đã nói lý do tại sao không chỉ sử dụng TCP. –

+0

TCP/IP là nơi đầu tiên tôi tìm kiếm sự cố của bạn. –

+0

@Mike: Bạn có nghĩ rằng việc mất gói UDP ở phía máy chủ có liên quan đến giao tiếp TCP đang diễn ra không? TCP chỉ được sử dụng để thông báo cho tất cả các máy khách rằng lô dữ liệu tiếp theo sắp được gửi qua UDP. Ngoài ra còn có một thông báo 'hoàn thành khu vực' được gửi sau một sự chậm trễ ngắn từ máy chủ. Trong khi chuyển giao hàng loạt UDP được đặt ra, không có tin nhắn TCP được gửi qua lại bởi ứng dụng ngoại trừ luồng lưu lượng TCP bình thường mà hệ điều hành thực hiện để giữ kết nối được thiết lập. –

2

Đã nhiều năm kể từ khi tôi viết mã liên quan đến giao thức mạng, nhưng tôi sẽ đưa ra dự đoán.

Tôi nghi ngờ đây là sự cố throughput and latency. Phát nhạc đang giới thiệu I/O và thêm độ trễ khi truyền các gói. Tuy nhiên, độ trễ được thêm vào có khả năng khiến các gói tin bị xếp hàng và do đó được tăng lên theo khối lượng thông lượng.

Để giải quyết vấn đề này trong mã của bạn, bạn có thể tự mình gửi các gói theo lô. Tôi giả định rằng bạn đang gửi từng gói tin đến hệ thống để truyền khi dữ liệu sẵn sàng. Nhóm nhiều gói và gửi chúng vào hệ thống cùng một lúc. Ngay cả chỉ một nhóm hai hoặc ba gói có thể tạo ra sự khác biệt đáng kể, đặc biệt nếu bạn là introducing your own small delay giữa mỗi cuộc gọi hệ thống.

Tôi không thể tìm thấy bất kỳ liên kết trực tiếp nào có liên quan từ tìm kiếm nhanh trên Google. Tuy nhiên, bạn có thể thấy khái niệm trong this discussion of network tuning for Linux hoặc trong this FAQ mô tả các kỹ thuật như theo đợt để cải thiện thông lượng.

+0

Tôi đã ghép các gói với nhau theo nhóm 1.024. Các gói tin là khoảng 1400 byte mỗi. Tôi nhận được khoảng 50-60 gói tin được xác nhận tiêu cực bởi khách hàng trong số 1.024. Khi tôi tắt trình phát đa phương tiện trên máy chủ, số lượng NAK giảm ngay lập tức xuống 0 và đạt được thông lượng tốt hơn. Điều này dường như chỉ ra rằng máy chủ chịu trách nhiệm về việc mất gói tin. Tôi tự hỏi tôi có thể làm gì từ phía máy chủ, nếu có, để tự động điều chỉnh cho cuộc tranh luận I/O này. –

+0

Nhận xét của bạn dường như cho biết điều ngược lại với câu hỏi của bạn. Bạn có thực sự cố gắng gửi 1024 gói mỗi 50-100 µs không? Đó là thông lượng điên rồ. Và vấn đề thực sự là thông lượng hay mất dữ liệu? –

+0

Ồ không không. Độ trễ 50-100 micro giây là độ trễ giữa việc gửi các gói riêng lẻ trong phạm vi gói 1024. Ngoài ra tôi không tin rằng tôi đã đề cập đến độ trễ 50-100 micro giây của tôi trong câu hỏi này. Bạn có tham khảo chéo các câu hỏi SO của tôi không? :) –

Các vấn đề liên quan