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?
sumber
ssh -Y -c blowfish
untuk 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.Jawaban:
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.
sumber
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.
sumber