ทำไมการส่งต่อ X11 จึงไม่มีประสิทธิภาพ


97

เมื่อใดก็ตามที่ฉันเปิดตัว GUIs ขนาดใหญ่จากระยะไกลด้วยการส่งต่อ X11 แม้รวมถึงสวิตช์ -C ประสบการณ์ก็ไม่ตอบสนองมาก คำถามของฉันคืออะไรที่ระดับแนวคิด / โปรโตคอลทำให้เกิดสิ่งนี้

ด้วยการเชื่อมต่อ 25mbit ของฉันฉันสามารถสตรีมวิดีโอ HD ไปยังคอมพิวเตอร์ของฉันได้อย่างไม่มีปัญหา ในทางตรงกันข้ามการไม่ตอบสนองของ GUI ที่เปิดตัวจากระยะไกลด้วยการส่งต่อ X11 เกิดขึ้นแม้ใน LAN 100mbit ซึ่งเวลาแฝงควรอยู่ใกล้ศูนย์

ฉันเข้าใจว่าเมื่อเทียบกับการสตรีมวิดีโอ latency จะดีที่สุดเป็นสองเท่า (เนื่องจากอินพุตจะต้องถูกส่งไปยังเครื่องระยะไกลและหลังจากนั้นแอปพลิเคชันสามารถตอบสนองได้) แต่ภายในมีปัจจัยอื่น ๆ ที่เพิ่มความล่าช้า เพิ่มเติมอีกหรือไม่

ประการที่สองแบนด์วิดธ์ ทำไมมันกินมากของมัน? เมื่อพูดถึงรูปแบบรูปภาพและวิดีโอจะใช้วิธีการมากมายเพื่อลดขนาดลงอย่างมาก

ในกรณีของ. bmp เทียบกับ. png ภาพสี่เหลี่ยมจัตุรัสสีดำขนาดใหญ่จะใช้เวลาน้อยลงในการแสดงภาพ. png เนื่องจากข้อมูลไม่ได้ถูกจัดเก็บสำหรับทุกพิกเซลเดียว แต่ในช่วงที่ไกลที่สุดเท่าที่ฉันเข้าใจ

ในกรณีของวิดีโอข้อมูลจำนวนมากสามารถบันทึกได้โดยการส่งความแตกต่างระหว่างเฟรมแทนที่จะเป็นทั้งเฟรม

ฉันรู้ว่ามันง่ายมาก แต่ X11 ไม่ได้ใช้วิธีการเหล่านี้หรือไม่? มันทำงานใน bitmap-ish หรือหลักการที่ไม่แตกต่างกันในบางระดับหรือไม่? และถ้าไม่ทำไมมันใช้แบนด์วิดท์มาก?


9
เรื่องไม่สำคัญ: Xpraนำเสนอแนวทางที่น่าสนใจ
Kamil Maciorowski

12
BTW - การใช้ "-C" จะทำให้การเชื่อมต่อของคุณช้าลงหากลิงก์ของคุณเร็วพอเนื่องจากการบีบอัดใช้เวลา "-C" อาจได้รับประโยชน์ 100Mb แต่อาจเป็นอันตรายต่อ 1Gb และอาจเป็นอันตรายต่อ 10Gb เป็นกรณีที่ 'ssh' จะเป็นอันตรายต่อปริมาณงานของคุณ - เช่นเดียวกับการเข้ารหัสใด ๆ ผ่านการเชื่อมโยงที่รวดเร็ว หากคุณมีการเชื่อมต่อโดยตรงระหว่างคอมพิวเตอร์หรือการเชื่อมโยงภายในที่ปลอดภัยไปที่การเชื่อมต่อ X ของคุณโดยตรงผ่าน TCP: 6000 คุณจะได้รับการปรับปรุงความเร็วที่เห็นได้ชัด
Astara

2
ดูเหมือนว่าคุณกำลังส่งต่อผ่าน SSH ซึ่งจะต้องเข้ารหัส / ถอดรหัสข้อมูลทั้งหมด นั่นจะเป็นการเพิ่มโอเวอร์เฮด / เวลาแฝง ตัวประมวลผลที่เร็วขึ้นอาจช่วยได้ แต่มีจำนวนเวลาแฝงที่จะเพิ่มไม่ว่าคุณจะทำอะไร X คือ "ช่างพูดมาก" ดังนั้นความหน่วงเพิ่มขึ้นเล็กน้อย = ประสิทธิภาพลดลงอย่างมาก ในอดีตที่ผ่านมาฉันสามารถใช้ X ถ่ายทอดผ่าน SSH ผ่านโมเด็ม 28.8; ที่ใช้ lbxproxy (เลิกใช้แล้ว) ซึ่งแคช / บีบอัดข้อมูลจำนวนมากและลด "chattiness" ของการเชื่อมต่อ การใช้ -C สามารถเพิ่มเวลาแฝงได้มากขึ้นเท่านั้น
Meower68

ใช้สิ่งที่ต้องการssh -Y -c blowfishลดค่าใช้จ่ายให้น้อยที่สุดในขณะที่ยังเข้ารหัสอยู่ หากคุณมีการควบคุมทั้งสองด้านอย่างสมบูรณ์ให้สอน ssh โดยใช้การเข้ารหัส "none" เพื่อรับความเร็วในการถ่ายโอนเต็มรูปแบบในการเชื่อมต่อ
Thorbjørn Ravn Andersen

คำตอบ:


116

โพรโทคอล X11 ไม่ได้หมายถึงการจัดการแบบกราฟิก (ในแง่ของบิตแมป / พื้นผิว) แบบกราฟิก ย้อนกลับไปในวันที่ X11 ได้รับการออกแบบกราฟิกคอมพิวเตอร์ครั้งแรกนั้นง่ายกว่าที่เป็นอยู่ในปัจจุบันมาก

โดยทั่วไป X11 ไม่ได้ส่งหน้าจอไปยังคอมพิวเตอร์ของคุณ แต่จะส่งคำแนะนำการแสดงผลเพื่อให้ X-server ในเครื่องคอมพิวเตอร์ของคุณสามารถสร้างหน้าจอในระบบท้องถิ่นของคุณได้ และสิ่งนี้จะต้องทำในการเปลี่ยนแปลง / รีเฟรชหน้าจอแต่ละครั้ง
ดังนั้นคอมพิวเตอร์ของคุณจะได้รับคำแนะนำเช่น "วาดเส้นในสีนี้จากพิกัด x, y ถึง (xx, yy), วาดสี่เหลี่ยมกว้างพิกเซล W, สูง H พิกเซลที่มีมุมซ้ายบนที่ (x, y) ฯลฯ "
ลูกค้าในพื้นที่ไม่ได้ตระหนักถึงสิ่งที่จำเป็นต้องได้รับการปรับปรุงและระบบระยะไกลมีข้อมูลน้อยมากเกี่ยวกับสิ่งที่ลูกค้าต้องการดังนั้นโดยทั่วไปแล้วเซิร์ฟเวอร์จะต้องส่งข้อมูลซ้ำซ้อนจำนวนมากที่ลูกค้าอาจต้องการหรือไม่ต้องการ
สิ่งนี้มีประสิทธิภาพมากหากการแสดงผลที่จะแสดงประกอบด้วยรูปร่างกราฟิกจำนวน จำกัด และความถี่ในการรีเฟรชต่ำ (ไม่จำเป็นต้องมีภาพเคลื่อนไหวและเช่นนั้น) ซึ่งเป็นกรณีในวันที่ X11 ได้รับการพัฒนาครั้งแรก

แต่ GUI ที่ทันสมัยมีลูกกวาดจำนวนมากและจำนวนมากที่ต้องส่งจากระบบระยะไกลไปยังไคลเอนต์ของคุณในรูปแบบของบิตแมป / พื้นผิว / แบบอักษรซึ่งใช้แบนด์วิดท์ค่อนข้างมาก และขนมตาทุกประเภทรวมถึงเอฟเฟ็กต์ภาพเคลื่อนไหวที่ต้องการการปรับปรุงบ่อยครั้ง และหน้าจอก็ใหญ่ขึ้นเรื่อย ๆ เช่นกันความกว้างสองเท่า / สูงคือ 4x จำนวนพิกเซล

แน่นอนว่าเมื่อเวลาผ่านไปการปรับปรุงโปรโตคอล X11 ได้ทำขึ้นเพื่อเพิ่มประสิทธิภาพให้มากที่สุดเท่าที่จะเป็นไปได้ แต่การออกแบบพื้นฐานนั้นมีความสำคัญไม่เหมาะกับความต้องการของคน GUI ที่คาดหวังในปัจจุบัน

โปรโตคอลอื่น ๆ (เช่น RDP และ VNC) ได้รับการออกแบบเพื่อให้ระบบรีโมตทำงานหนักทั้งหมดและให้ระบบนั้นตัดสินใจว่าจะอัพเดตใดที่จะส่งไปยังไคลเอนต์ (เป็นบิตแมปที่บีบอัด) ให้มีประสิทธิภาพมากที่สุด บ่อยครั้งที่มีประสิทธิภาพมากขึ้นสำหรับ GUI ที่ทันสมัย

วิธีการทั้งสองไม่สมบูรณ์แบบและสามารถจัดการกับทุกสถานการณ์อย่างเท่าเทียมกัน ไม่มีสิ่งใดเป็นจอแสดงผลโปรโตคอลเดียวที่สามารถทำได้ดีในทุกกรณีที่นึกออก
ดังนั้นในกรณีส่วนใหญ่คุณเพียงลองใช้โปรโตคอลทั้งหมดที่ได้รับการสนับสนุนระหว่างไคลเอ็นต์ในระบบของคุณกับเซิร์ฟเวอร์ระยะไกลและใช้โปรโตคอลที่ให้ผลลัพธ์ที่ดีที่สุด และในบางกรณีก็ไม่มีทางเลือกและคุณเพียงแค่ต้องทำอะไรก็ตามที่มีอยู่

โปรโตคอลส่วนใหญ่อนุญาตให้ปรับแต่งประสิทธิภาพได้บ้าง แต่การตั้งค่าเหล่านี้ส่วนใหญ่เป็นฝั่งเซิร์ฟเวอร์เท่านั้นและไม่สามารถใช้ได้กับผู้ใช้ทั่วไป (และการกำหนดค่าให้ถูกต้องเป็นบิตของศิลปะอาร์เคนผู้ดูแลระบบจำนวนมากไม่เต็มใจที่จะทำเช่นนั้น)

ในกรณีส่วนใหญ่วิธีที่ง่ายที่สุดในการปรับปรุงประสิทธิภาพ (บางครั้งก็ค่อนข้างน่าทึ่ง) คือการเปลี่ยนไปใช้สภาพแวดล้อมเดสก์ท็อปที่ง่ายขึ้นโดยไม่ต้องใช้สายตาและใช้ภาพพื้นหลัง


15
+1 เนื่องจากมีการกล่าวถึง RDP และ VNC ฉันควรพูดถึงx2goซึ่งเป็นโซลูชันการแคช / การส่งต่อ X11 ที่เร่งการส่งต่อ X11 ได้อย่างแท้จริง ฉันใช้มันกับความสำเร็จในอดีต
rath

7
เกี่ยวกับ "การตั้งค่าฝั่งเซิร์ฟเวอร์เท่านั้น" ใกล้ถึงจุดสิ้นสุดโปรดจำไว้ว่าเซิร์ฟเวอร์ X ทำงานบนคอมพิวเตอร์ที่เชื่อมต่อกับจอแสดงผลทางกายภาพและไคลเอนต์ X คือซอฟต์แวร์ที่ใช้ในการทำงานบางอย่าง (เช่นเว็บเบราว์เซอร์หรือโปรแกรมประมวลผลคำ ) ดังนั้นการตั้งค่าเซิร์ฟเวอร์ X จะสามารถเข้าถึงได้โดยผู้ใช้ที่เชื่อมต่อกับระบบระยะไกลเพื่อเรียกใช้โปรแกรมกราฟิก อย่างไรก็ตามสิ่งนี้ไม่ได้เบี่ยงเบนจากคุณค่าของคำตอบของคุณ
CVn

2
เทคนิคโปรโตคอลคือ RFB ไม่ใช่ VNC
OrangeDog

6
ฉันผิดหรือคุณสับสนลูกค้าและเซิร์ฟเวอร์ในย่อหน้าที่สองของคุณหรือไม่ ไคลเอนต์เป็นโปรแกรมที่ทำงานจากระยะไกลเซิร์ฟเวอร์เป็นเครื่องโลคัล
Jonas Schäfer

2
สิ่งที่คุณกล่าวถึงในย่อหน้าที่สามนั้นได้รับการลดลงอย่างมากในช่วงปี 1990 เนื่องจากเครื่องที่ใช้เซิร์ฟเวอร์ X เริ่มมีหน่วยความจำเพียงพอที่ทำให้การสำรองข้อมูลกลายเป็นสิ่งที่ควรทำ
Blrfl

45

มีสองสาเหตุหลักที่ทำให้การเชื่อมต่อ X11 นั้นช้าซึ่งทั้งสองอย่างนี้เกิดขึ้นจากคำถามของคุณ: แบนด์วิดท์และเวลาแฝง เพื่อให้เข้าใจว่าเหตุใดแอป X11 จึงช้าผ่านเครือข่ายเรามาคุยกันทั้งสองเรื่องนี้

แบนด์วิดธ์

ตามค่าเริ่มต้น X11 จะไม่ทำการบีบอัดข้อมูลเครือข่ายที่ส่งผ่านระหว่างแอปพลิเคชันและเซิร์ฟเวอร์การแสดงผล ดังที่คุณกล่าวถึงคุณสามารถใช้ตัวเลือก -C บน SSH เพื่อเปิดใช้งานการบีบอัดและในขณะที่สิ่งนี้ช่วยได้ แต่ก็ไม่เหมาะสำหรับการบีบอัดข้อมูลกราฟิก เมื่อเทียบกับรูปแบบเช่น H.264 ซึ่งสามารถรับอัตราการบีบอัดได้ 100 ต่อ 1 การบีบอัด -C จะโชคดีที่ได้รับการบีบอัด 2 ถึง 1 ทางออกที่ดีกว่าคือการใช้ตัวแปลงสัญญาณกราฟิกหรือวิดีโอที่ได้รับการปรับปรุงให้ดีที่สุดสำหรับวิดีโอ X11 แต่เราต้องระวังไม่ให้สูญเสียมากเกินไปเนื่องจากเดสก์ท็อปโดยทั่วไปจะต้องมีภาพที่คมชัดกว่าภาพยนตร์ดังนั้นผู้ใช้ยังสามารถอ่านข้อความและ ทำรายละเอียดที่ดี

ความแอบแฝง

X11 มีแนวโน้มที่จะเกิดความล่าช้าสูงเนื่องจากการทำงานส่วนใหญ่ต้องการการปัดเศษหลายครั้งระหว่างแอพพลิเคชันและเซิร์ฟเวอร์การแสดงผล เมื่อวิ่งข้าม LAN โดยที่เวลา ping วัดได้น้อยกว่าหนึ่งมิลลิวินาทีการเดินทางไปกลับหลายรอบเหล่านี้ไม่สามารถสังเกตเห็นได้ แต่ในการเชื่อมต่ออินเทอร์เน็ตจะมีการเพิ่มขึ้นอย่างรวดเร็ว

โซลูชั่น

หลายปีที่ผ่านมามีโครงการสองโครงการที่สร้างขึ้นเพื่อแก้ไขปัญหาแบนด์วิดท์และเวลาแฝงที่มีอยู่ในโปรโตคอล X11 lbx (แบนด์วิดท์ต่ำ X) และ dxpc (ดิฟเฟอเรนเชียลคอมเพรสเซอร์โปรโตคอล X) ฉันไม่คิดว่า LBX เคยได้รับแรงฉุดมาก แต่ dxpc กลายเป็นเทคโนโลยีพื้นฐานที่ใช้สำหรับผลิตภัณฑ์ที่เรียกว่าNX NX ใช้การบีบอัดแบบสูญเสียทั้งสองแบบเพื่อลดความต้องการแบนด์วิดท์และอัลกอริธึมที่แตกต่างกันและการแคชเพื่อลดจำนวนการส่งผ่านข้อมูลไปมาซึ่งทำให้เกิดความล่าช้าสูง ฉันใช้ NX บ่อยครั้งและพบว่าประสิทธิภาพการทำงานใกล้เคียงกับแอปพลิเคชันในท้องถิ่นเกือบทั้งหมด หากคุณรู้สึกถึงมันคุณอาจลองใช้ NX และดูว่าเหมาะกับคุณหรือไม่ ข้อเสียคือต้องติดตั้งซอฟต์แวร์ที่ปลายทั้งสองของการเชื่อมต่อในขณะที่ X11 ติดตั้งแล้วโดยทั่วไป


3
ผูกกับหัวข้อเวลาแฝงน่าจะเป็นที่ X11 จะเป็น TCP, vs UDP สำหรับวิดีโอสตรีมมิ่งส่วนใหญ่ มีผลิตภัณฑ์อื่น ๆ อีกสองสามรายการที่จะช่วยในการทำงานจากระยะไกล โทนี่พูดถึง RDP และ VNC ออราเคิลยังคงขาย Sun Global Desktop (SGD) ซึ่งใช้งานได้ดี Citrix มีบางอย่าง (XenApp?) Eval ของเราพบว่า SGD เป็นตัวเลือกที่ดีกว่าสำหรับความต้องการของเรา แต่เคยใช้ผลิตภัณฑ์ Citrix สองรายการมาก่อน
sleepyweasel

x2go ทำงานได้ดีมากสำหรับฉันแม้จะมี "เซิร์ฟเวอร์" แล็ปท็อปเก่า และทำงานในไม่กี่นาที ... ประสิทธิภาพที่เพิ่มขึ้นอย่างมากจาก X11 fwd (ใช้งานไม่ได้กับการปรับแต่งของฉัน)
comte

เวลาแฝงที่ชาญฉลาดบนเครื่อง * ix เซสชัน X11 ที่แสดงในเครื่องมักจะใช้ซ็อกเก็ตโดเมน Unix แทน TCP ซ็อกเก็ตโดเมนยูนิกซ์หลายครั้งเร็วกว่า TCP ที่เดินทางไปรอบแม้แต่ localhost stackoverflow.com/questions/14973942/... สำหรับแอป X11 ที่มีการเดินทางไปกลับจำนวนมากที่มีพยาธิสภาพจริง ๆ นั่นอาจเป็นความแตกต่างระหว่างโอเคและประสิทธิภาพที่ช้าอย่างเห็นได้ชัด
rakslice
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.