Mengapa penerusan X11 sangat tidak efisien?

97

Setiap kali saya meluncurkan GUI besar dengan penerusan X11, bahkan termasuk sakelar -C, pengalamannya sangat tidak responsif. Pertanyaan saya adalah, apa yang terjadi, pada level konsep / protokol yang menyebabkan ini?

Dengan koneksi 25mbit, saya dapat melakukan streaming video HD ke komputer saya tanpa masalah. Di sisi lain, tidak responsifnya GUI yang diluncurkan dari jarak jauh dengan penerusan X11 bahkan terjadi pada LAN 100mbit, di mana latensi seharusnya mendekati nol.

Saya memahami bahwa tidak seperti streaming video, latensi akan berlipat ganda (karena input harus dikirim ke mesin jarak jauh dan hanya setelah itu aplikasi dapat merespons), tetapi secara internal, apakah ada faktor lain yang meningkatkan latensi bahkan lebih lanjut?

Kedua, bandwidth. Mengapa makan begitu banyak? Ketika datang ke format gambar dan video, banyak metode yang digunakan untuk secara drastis mengurangi ukurannya.

Dalam kasus .bmp vs .png, misalnya, gambar kotak hitam besar akan jauh lebih sedikit dalam representasi .png karena informasi tidak disimpan untuk setiap piksel tunggal, tetapi dalam jangkauan-ish sejauh yang saya mengerti.

Dalam hal video, seluruh banyak informasi dapat disimpan dengan mengirimkan perbedaan antara frame dan bukan seluruh frame.

Saya tahu ini sangat disederhanakan, tetapi apakah X11 tidak menggunakan metode ini? Apakah ia berperilaku dalam bitmap-ish atau prinsip non-diferensial pada tingkat tertentu? Dan jika tidak, mengapa memakan banyak bandwidth?

pengguna129186
sumber
9
Trivia: Xpra menawarkan pendekatan yang menarik.
Kamil Maciorowski
12
BTW - menggunakan "-C" akan memperlambat koneksi Anda jika tautan Anda cukup cepat karena kompresi membutuhkan waktu. "-C" mungkin menguntungkan 100Mb, tetapi kemungkinan merugikan 1Gb, dan tentunya merugikan 10Gb. Ini juga merupakan kasus yang 'ssh' akan membahayakan throughput Anda - seperti halnya enkripsi melalui tautan cepat. Jika Anda memiliki koneksi langsung antara komputer atau hubungan internal yang aman, langsungkan dengan koneksi X Anda melalui TCP: 6000. Anda akan mendapatkan peningkatan kecepatan yang nyata.
Astara
2
Kedengarannya seperti Anda meneruskan melalui SSH, yang harus mengenkripsi / mendekripsi semua data. Itu akan menambah overhead / latensi. Prosesor yang lebih cepat mungkin membantu, tetapi ada sejumlah latensi yang akan ditambahkan, tidak peduli apa pun yang Anda lakukan. X sangat "cerewet," jadi sedikit peningkatan dalam latensi = penurunan kinerja yang signifikan. Di masa lalu, saya bisa menggunakan X, menerobos melalui SSH melalui modem 28,8; yang menggunakan lbxproxy (sekarang sudah tidak digunakan lagi) yang menembolok / mengompresi banyak data dan mengurangi "chattiness" dari koneksi. Menggunakan -C hanya dapat menambahkan latensi lebih banyak.
Meower68
Gunakan sesuatu seperti ssh -Y -c blowfishuntuk meminimalkan overhead sementara masih mengenkripsi. Jika Anda memiliki kontrol penuh dari kedua ujungnya, ajarkan ssh untuk menggunakan enkripsi "tidak" untuk mendapatkan kecepatan transfer penuh pada koneksi.
Thorbjørn Ravn Andersen

Jawaban:

116

Protokol X11 tidak pernah dimaksudkan untuk menangani operasi intensif secara grafis (dalam hal bitmap / tekstur). Kembali pada hari ketika X11 pertama kali dirancang grafis komputer jauh lebih sederhana daripada sekarang.

Pada dasarnya X11 tidak mengirim layar ke komputer Anda, tetapi ia mengirimkan instruksi tampilan sehingga server-X pada komputer lokal Anda dapat membuat kembali layar pada sistem lokal Anda. Dan ini perlu dilakukan pada setiap perubahan / penyegaran tampilan.
Jadi komputer Anda menerima aliran instruksi seperti "gambar garis dalam warna ini dari koordinat x, y ke (xx, yy), gambar persegi panjang W piksel, H piksel tinggi dengan sudut kiri atas di (x, y), dll. "
Klien lokal tidak benar-benar menyadari apa yang perlu diperbarui dan sistem jarak jauh memiliki sangat sedikit informasi tentang apa yang sebenarnya dibutuhkan klien, jadi pada dasarnya server harus mengirim banyak informasi yang berlebihan yang mungkin diperlukan atau tidak perlu oleh klien.
Ini sangat efisien jika tampilan yang akan dibuat terdiri dari sejumlah terbatas bentuk grafik sederhana dan hanya frekuensi penyegaran yang rendah (tidak diperlukan animasi dan semacamnya). Yang merupakan kasus di hari-hari ketika X11 pertama kali dikembangkan.

Tetapi GUI modern memiliki banyak eye-candy dan banyak yang perlu dikirim dari sistem jarak jauh ke klien Anda dalam bentuk bitmap / tekstur / font yang membutuhkan bandwidth yang cukup banyak. Dan segala macam eye-candy termasuk efek animasi yang membutuhkan pembaruan yang sering. Dan tampilannya juga terus bertambah besar, dua kali lebih lebar / tinggi 4x jumlah piksel.

Tentu saja, seiring waktu, peningkatan pada protokol X11 dibuat untuk mengoptimalkan ini sebanyak mungkin, tetapi desain dasar yang mendasarinya, pada dasarnya, tidak cocok dengan tuntutan jenis orang GUI saat ini harapkan.

Protokol lain (seperti RDP dan VNC) lebih dirancang untuk membiarkan sistem jarak jauh melakukan semua kerja keras dan membiarkan sistem itu memutuskan pembaruan mana yang akan dikirim ke klien (bitmap terkompresi) seefisien mungkin. Seringkali itu ternyata lebih efisien untuk GUI modern.

Tidak ada metode yang sempurna dan dapat menangani setiap situasi dengan baik. Tidak ada yang namanya protokol tampilan tunggal yang dapat bekerja dengan baik di bawah setiap kasus penggunaan yang mungkin.
Jadi, dalam kebanyakan kasus, Anda hanya mencoba semua protokol yang didukung antara klien lokal Anda dan server jarak jauh dan menggunakan protokol yang memberikan hasil terbaik. Dan dalam beberapa kasus tidak ada pilihan dan Anda hanya harus puas dengan apa pun yang tersedia.

Sebagian besar protokol memungkinkan penyetelan kinerja, tetapi banyak dari pengaturan ini hanya di sisi server dan tidak tersedia untuk pengguna biasa. (Dan mengonfigurasinya dengan benar adalah sedikit seni yang misterius. Banyak sys-admin tidak akan mau mengacaukannya.)

Dalam kebanyakan kasus, cara termudah untuk meningkatkan kinerja (kadang-kadang cukup dramatis) adalah dengan beralih ke lingkungan desktop yang lebih sederhana dengan sedikit eye-candy dan tidak menggunakan gambar latar belakang.

Tonny
sumber
15
+1 Karena RDP dan VNC disebutkan, saya juga harus menyebutkan x2go yang merupakan solusi caching / penerusan X11 yang benar-benar mempercepat penerusan X11. Saya telah menggunakannya dengan sukses di masa lalu.
rath
7
Mengenai "pengaturan hanya sisi server" di dekat bagian akhir, ingat bahwa server X berjalan pada komputer yang terhubung ke tampilan fisik, dan klien X adalah perangkat lunak yang digunakan untuk melakukan beberapa tugas (misalnya browser web atau pengolah kata) ). Jadi pengaturan X server dapat diakses oleh pengguna yang terhubung ke sistem jarak jauh untuk menjalankan aplikasi grafis. Namun, ini tidak mengurangi nilai jawaban Anda secara signifikan.
CVn
2
Secara teknis protokolnya adalah RFB, bukan VNC.
OrangeDog
6
Apakah saya salah atau Anda membingungkan klien dan server di paragraf kedua Anda? Klien adalah program yang dijalankan dari jarak jauh, server adalah mesin lokal.
Jonas Schäfer
2
Apa yang Anda bahas di paragraf ketiga sebagian besar dimitigasi pada 1990-an sebagai mesin yang menjalankan server X mulai memiliki cukup memori yang memungkinkan backing store menjadi hal yang praktis untuk dilakukan.
Blrfl
45

Ada dua alasan utama untuk koneksi X11 menjadi lambat, yang keduanya Anda sentuh dalam pertanyaan Anda: bandwidth dan latency. Untuk memahami mengapa aplikasi X11 lambat di jaringan, mari kita bahas keduanya.

Bandwidth

X11, secara default, tidak melakukan kompresi pada data jaringan yang diteruskan antara aplikasi dan server tampilan. Seperti yang Anda sebutkan, Anda dapat menggunakan opsi -C pada SSH untuk mengaktifkan kompresi, dan meskipun hal ini membantu, itu tidak dioptimalkan untuk mengompresi data grafis. Dibandingkan dengan format seperti H.264 yang dapat memperoleh tingkat kompresi 100 hingga 1, kompresi -C akan beruntung mencapai kompresi 2 banding 1. Solusi yang lebih baik adalah dengan menggunakan grafik atau video yang dioptimalkan codec untuk video X11, tetapi kita harus berhati-hati untuk tidak membuatnya terlalu rugi karena desktop umumnya harus memiliki gambar yang lebih tajam daripada film sehingga pengguna masih dapat dengan jelas membaca teks dan lihat detail yang bagus.

Latensi

X11 cenderung memiliki latensi tinggi karena sebagian besar operasi memerlukan beberapa putaran perjalanan antara aplikasi dan server tampilan. Ketika dijalankan di LAN yang waktu pingnya kurang dari satu milidetik, perjalanan bolak-balik ini tidak terlihat, tetapi di koneksi internet mereka bertambah dengan cepat.

Solusi

Beberapa tahun yang lalu ada beberapa proyek yang dibangun untuk mengatasi masalah bandwidth dan latensi yang melekat dalam protokol X11. lbx (Low Bandwidth X) dan dxpc (Differential X Protocol Compressor). Saya tidak berpikir lbx pernah mendapatkan banyak daya tarik, tetapi dxpc menjadi teknologi dasar yang digunakan untuk produk yang disebut NX . NX menggunakan kompresi lossy untuk mengurangi kebutuhan bandwidth dan algoritma diferensial serta caching untuk mengurangi jumlah informasi bolak-balik yang menciptakan latensi tinggi. Saya sudah sering menggunakan NX dan menemukan kinerjanya hampir sama baiknya dengan aplikasi lokal. Jika Anda merasa sanggup melakukannya, Anda dapat mencoba NX dan melihat apakah itu berhasil untuk Anda. Kelemahannya adalah itu membutuhkan menginstal perangkat lunak pada kedua ujung koneksi, sedangkan X11 umumnya sudah diinstal.

virtex
sumber
3
Terikat dengan topik latensi adalah bahwa X11 akan menjadi TCP, vs UDP untuk sebagian besar video streaming. Ada beberapa produk lain untuk membantu bekerja dari jarak jauh. Tony menyebut RDP dan VNC. Oracle masih menjual Sun Global Desktop (SGD) yang berfungsi dengan baik. Citrix punya sesuatu (XenApp?). Eval kami menemukan SGD menjadi pilihan yang lebih baik untuk kebutuhan kami, tetapi sebelumnya telah menggunakan dua produk Citrix.
sleepyweasel
x2go bekerja sangat baik untuk saya, bahkan dengan "server" laptop lama. aktif & berjalan dalam beberapa menit ... peningkatan besar dalam kinerja dari X11 fwd (tidak dapat digunakan dengan konfigurasi saya)
comte
Dari sisi latensi, pada mesin * ix, sesi X11 untuk tampilan lokal biasanya menggunakan soket domain Unix alih-alih TCP; Soket domain Unix jauh lebih cepat daripada TCP pada perjalanan pulang-pergi bahkan ke localhost stackoverflow.com/questions/14973942/… . Untuk aplikasi X11 dengan perjalanan bolak-balik yang benar-benar sangat besar, itu bisa menjadi perbedaan antara kinerja oke dan terasa lambat.
rakslice