ทำไมการส่งต่อ 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.