Tại sao X11 chuyển tiếp không hiệu quả?


97

Bất cứ khi nào tôi khởi chạy từ xa các GUI lớn với chuyển tiếp X11, thậm chí bao gồm cả chuyển đổi -C, trải nghiệm này rất không phản hồi. Câu hỏi của tôi là, những gì, ở cấp độ khái niệm / giao thức gây ra điều này?

Với kết nối 25mbit của tôi, tôi hoàn toàn có thể truyền phát video HD đến máy tính của mình mà không gặp vấn đề gì. Mặt khác, sự không phản hồi của GUI được khởi chạy từ xa với chuyển tiếp X11 xảy ra ngay cả trên mạng LAN 100mbit, trong đó độ trễ phải gần bằng không.

Tôi hiểu rằng trái ngược với truyền phát video, độ trễ sẽ tăng gấp đôi (vì đầu vào cần phải được gửi đến máy từ xa và chỉ sau đó, tiếng vỗ tay mới có thể đáp ứng), nhưng bên trong, có những yếu tố khác làm tăng độ trễ thêm nữa?

Thứ hai, băng thông. Tại sao nó ăn quá nhiều của nó? Khi nói đến định dạng hình ảnh và video, nhiều phương pháp được sử dụng để giảm đáng kể kích thước.

Ví dụ, trong trường hợp .bmp so với .png, một hình ảnh vuông lớn màu đen sẽ chiếm ít hơn trong biểu diễn .png vì thông tin không được lưu trữ cho mỗi pixel, nhưng theo cách hiểu của tôi.

Trong trường hợp video, toàn bộ thông tin có thể được lưu bằng cách gửi sự khác biệt giữa các khung thay vì toàn bộ khung.

Tôi biết điều này rất đơn giản, nhưng X11 không sử dụng các phương thức này? Nó hoạt động theo nguyên tắc bitmap-ish hoặc không phân biệt ở một mức độ nào đó? Và nếu không, tại sao nó lại chiếm quá nhiều băng thông?


9
Trivia: Xpra cung cấp một cách tiếp cận thú vị.
Kamil Maciorowski

12
BTW - sử dụng "-C" sẽ làm chậm kết nối của bạn nếu liên kết của bạn đủ nhanh vì quá trình nén mất thời gian. "-C" có thể có lợi cho 100Mb, nhưng có thể gây hại cho 1Gb và chắc chắn gây hại cho 10Gb. Đây cũng là trường hợp 'ssh' sẽ gây hại cho thông lượng của bạn - cũng như mọi mã hóa trên các liên kết nhanh. Nếu bạn có kết nối trực tiếp giữa các máy tính hoặc liên kết nội bộ an toàn, hãy truy cập trực tiếp với kết nối X của bạn qua TCP: 6000. Bạn sẽ nhận được một cải thiện tốc độ đáng chú ý.
Astara

2
Âm thanh như bạn đang chuyển tiếp qua SSH, phải mã hóa / giải mã tất cả dữ liệu. Điều đó sẽ thêm chi phí / độ trễ. Bộ xử lý nhanh hơn có thể giúp ích, nhưng sẽ có một độ trễ nhất định mà điều này sẽ thêm vào, bất kể bạn làm gì. X rất "trò chuyện", do đó, độ trễ tăng nhẹ = hiệu suất giảm đáng kể. Trước đây, tôi có thể sử dụng X, được tạo đường hầm thông qua SSH qua modem 28.8; đó là sử dụng lbxproxy (hiện không dùng nữa) đã lưu trữ / nén rất nhiều dữ liệu và giảm "độ chói" của kết nối. Sử dụng -C chỉ có thể thêm độ trễ.
Meower68

Sử dụng một cái gì đó như ssh -Y -c blowfishđể tối thiểu hóa chi phí trong khi vẫn mã hóa. Nếu bạn có toàn quyền kiểm soát cả hai đầu, hãy dạy ssh sử dụng mã hóa "none" để có tốc độ truyền đầy đủ trên kết nối.
Thorbjørn Ravn Andersen

Câu trả lời:


116

Giao thức X11 không bao giờ có nghĩa là xử lý đồ họa (về bitmap / kết cấu) các hoạt động chuyên sâu. Ngày trước khi X11 được thiết kế đồ họa máy tính lần đầu tiên đơn giản hơn rất nhiều so với ngày nay.

Về cơ bản X11 không gửi màn hình tới máy tính của bạn, nhưng nó sẽ gửi hướng dẫn hiển thị để máy chủ X trên máy tính cục bộ của bạn có thể tạo lại màn hình trên hệ thống cục bộ của bạn. Và điều này cần phải được thực hiện trên mỗi thay đổi / làm mới màn hình.
Vì vậy, máy tính của bạn nhận được một luồng hướng dẫn như "vẽ đường kẻ trong màu này từ tọa độ x, y đến (xx, yy), vẽ hình chữ nhật W pixel rộng, H pixel cao với góc trên bên trái tại (x, y), v.v. "
Máy khách cục bộ không thực sự nhận thức được những gì cần cập nhật và hệ thống từ xa có rất ít thông tin về những gì khách hàng thực sự cần, vì vậy về cơ bản, máy chủ phải gửi nhiều thông tin dư thừa mà khách hàng có thể cần hoặc không cần.
Điều này rất hiệu quả nếu màn hình được hiển thị bao gồm một số lượng hạn chế các hình dạng đồ họa đơn giản và chỉ cần tần số làm mới thấp (không có hình động và như vậy). Đó là trường hợp trở lại vào thời mà X11 được phát triển lần đầu tiên.

Nhưng GUI hiện đại có rất nhiều điều thú vị và phần lớn cần phải được gửi từ hệ thống từ xa đến máy khách của bạn dưới dạng bitmap / hoạ tiết / phông chữ chiếm khá nhiều băng thông. Và tất cả các loại kẹo mắt bao gồm các hiệu ứng hoạt hình đòi hỏi phải cập nhật thường xuyên. Và màn hình tiếp tục lớn hơn nữa, rộng gấp đôi / cao gấp 4 lần số pixel.

Tất nhiên, theo thời gian, các cải tiến đối với giao thức X11 đã được thực hiện để tối ưu hóa điều này càng nhiều càng tốt, nhưng về cơ bản, thiết kế cơ bản là không phù hợp với nhu cầu của loại GUI hiện nay mong đợi.

Các giao thức khác (như RDP và VNC) được thiết kế nhiều hơn để cho hệ thống từ xa thực hiện tất cả công việc khó khăn và để hệ thống đó quyết định gửi bản cập nhật nào đến máy khách (dưới dạng bitmap nén) một cách hiệu quả nhất có thể. Thường thì điều đó có hiệu quả hơn đối với GUI hiện đại.

Không phương pháp nào là hoàn hảo và có thể đối phó với mọi tình huống tốt như nhau. Không có thứ gọi là một giao thức hiển thị duy nhất có thể làm tốt trong mọi trường hợp sử dụng có thể hiểu được.
Vì vậy, trong hầu hết các trường hợp, bạn chỉ cần thử tất cả các giao thức được hỗ trợ giữa máy khách cục bộ và máy chủ từ xa và sử dụng giao thức mang lại kết quả tốt nhất. Và trong một số trường hợp không có sự lựa chọn và bạn chỉ cần thực hiện với bất cứ điều gì có sẵn.

Hầu hết các giao thức đều cho phép điều chỉnh hiệu năng, nhưng nhiều cài đặt trong số này chỉ ở phía máy chủ và không có sẵn cho người dùng trung bình. (Và cấu hình chúng đúng cách là một chút nghệ thuật phức tạp. Rất nhiều quản trị viên hệ thống sẽ không sẵn sàng gây rối với điều đó.)

Trong hầu hết các trường hợp, cách dễ nhất để cải thiện hiệu suất (đôi khi khá đột ngột) là chuyển sang môi trường máy tính để bàn đơn giản hơn với ít mắt hơn và từ bỏ việc sử dụng hình nền.


15
+1 Vì RDP và VNC được đề cập, tôi cũng nên đề cập đến x2go , một giải pháp bộ đệm / chuyển tiếp bộ đệm X11 thực sự tăng tốc độ chuyển tiếp X11. Tôi đã sử dụng nó với thành công trong quá khứ.
Rath

7
Về "cài đặt chỉ phía máy chủ" ở gần cuối, hãy nhớ rằng máy chủ X chạy trên máy tính được kết nối với màn hình vật lý và máy khách X là phần mềm được sử dụng để thực hiện một số tác vụ (ví dụ: trình duyệt web hoặc trình xử lý văn bản ). Vì vậy, người dùng có thể truy cập cài đặt máy chủ X kết nối với hệ thống từ xa để chạy ứng dụng đồ họa. Tuy nhiên, điều này không làm giảm đáng kể giá trị câu trả lời của bạn.
CVn

2
Về mặt kỹ thuật giao thức là RFB, không phải VNC.
OrangeDog

6
Tôi sai hay bạn nhầm lẫn máy khách và máy chủ trong đoạn thứ hai của bạn? Máy khách là chương trình chạy từ xa, máy chủ là máy cục bộ.
Jonas Schäfer

2
Những gì bạn trình bày trong đoạn thứ ba phần lớn đã được giảm nhẹ vào những năm 1990 khi các máy chạy máy chủ X bắt đầu có đủ bộ nhớ cho phép cửa hàng sao lưu trở thành một việc thiết thực.
Blrfl

45

Chủ yếu có hai lý do khiến các kết nối X11 bị chậm, cả hai lý do bạn chạm vào trong câu hỏi của bạn: băng thông và độ trễ. Để hiểu lý do tại sao các ứng dụng X11 hoạt động chậm trên mạng, hãy thảo luận về cả hai ứng dụng này.

Băng thông

X11, theo mặc định, không thực hiện bất kỳ nén nào trên dữ liệu mạng được truyền giữa ứng dụng và máy chủ hiển thị. Như bạn đã đề cập, bạn có thể sử dụng tùy chọn -C trên SSH để bật tính năng nén và trong khi điều này có ích, thì nó không được tối ưu hóa để nén dữ liệu đồ họa. So với các định dạng như H.264 có thể đạt được tốc độ nén từ 100 đến 1, thì nén -C sẽ may mắn đạt được mức nén 2-1. Một giải pháp tốt hơn là sử dụng codec được tối ưu hóa cho đồ họa hoặc video cho video X11, nhưng chúng ta phải cẩn thận để không làm mất quá nhiều vì máy tính để bàn thường cần phải có hình ảnh sắc nét hơn phim để người dùng vẫn có thể đọc rõ văn bản và làm cho chi tiết tốt.

Độ trễ

X11 có xu hướng có độ trễ cao vì hầu hết các hoạt động đều yêu cầu nhiều chuyến đi khứ hồi giữa ứng dụng và máy chủ hiển thị. Khi chạy trên mạng LAN trong đó thời gian ping đo được dưới một phần nghìn giây, nhiều chuyến đi khứ hồi này không đáng chú ý, nhưng qua kết nối internet, chúng sẽ tăng lên nhanh chóng.

Các giải pháp

Một số năm trước đây đã có một vài dự án được xây dựng để giải quyết các vấn đề về băng thông và độ trễ vốn có trong giao thức X11. lbx (Băng thông thấp X) và dxpc (Máy nén giao thức X khác biệt). Tôi không nghĩ lbx từng có nhiều lực kéo, nhưng dxpc đã trở thành công nghệ cơ bản được sử dụng cho một sản phẩm có tên NX . NX sử dụng cả nén nén để giảm yêu cầu băng thông và thuật toán vi sai và bộ nhớ đệm để giảm số lượng thông tin qua lại tạo ra độ trễ cao. Tôi đã sử dụng NX khá thường xuyên và thấy hiệu suất gần như tốt như các ứng dụng cục bộ. Nếu bạn cảm thấy như vậy, bạn có thể thử NX và xem nó có phù hợp với bạn không. Nhược điểm là nó yêu cầu cài đặt phần mềm ở cả hai đầu của kết nối, trong khi X11 thường được cài đặt.


3
Liên quan đến chủ đề độ trễ sẽ là X11 sẽ là TCP, so với UDP cho hầu hết các video phát trực tuyến. Có một vài sản phẩm khác để giúp làm việc từ xa. Tony đã đề cập đến RDP và VNC. Oracle vẫn bán Sun Global Desktop (SGD) hoạt động tốt. Citrix đã có một cái gì đó (XenApp?). Eval của chúng tôi thấy SGD là một lựa chọn tốt hơn cho nhu cầu của chúng tôi, nhưng đã sử dụng hai sản phẩm Citrix trước đó.
buồn ngủ

x2go hoạt động rất tốt đối với tôi, ngay cả với "máy chủ" một máy tính xách tay cũ. lên và chạy trong vài phút ... tăng hiệu suất lớn từ X11 fwd (không sử dụng được với cấu hình của tôi)
comte

Độ trễ khôn ngoan, trên các máy * ix, phiên X11 đến màn hình cục bộ thường sử dụng ổ cắm tên miền Unix thay vì TCP; Ổ cắm tên miền Unix nhanh hơn nhiều lần so với TCP trong các chuyến đi khứ hồi ngay cả với localhost stackoverflow.com/questions/14973942/ . Đối với các ứng dụng X11 có số lượng lớn các chuyến đi khứ hồi thực sự lớn, đó có thể là sự khác biệt giữa hiệu suất chậm và đáng chú ý.
rakslice
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.