รีวิวการทำ Personal Cloud Game Streaming ใช้งานง่าย ๆ ในบ้านของเราเอง
Cloud Game Streaming เป็นบริการที่ทำให้เรารันเกมของเราจาก Server เข้ามา ทำให้เราไม่จำเป็นที่จะต้องซื้อ Hardware แพง ๆ มาเพื่อรันเกมให้ได้ลื่นปรืด ๆ และ ภาพโคตรสวย ซึ่งบริการพวกนี้ในประเทศไทยยังไม่มีให้เราใช้เลย
สาเหตุที่บริการพวกนี้ไม่สามารถเปิดในไทยได้ เป็นเพราะ Latency หรือความหน่วง ระหว่างตัวเราที่อยู่ในไทย กับ Server ที่อาจจะอยู่ในต่างประเทศ ทำให้เกมบางเกมเช่นเกมพวก FPS ที่มันต้องอาศัย Latency ที่ต่ำมาก ๆ เล่นแล้วได้ประสบการณ์ที่ไม่ดีได้ เลยทำให้บริการพวกนี้จะเปิดในพื้นที่ ๆ ใกล้กับ Data Centre มาก ๆ นั่นเอง
เราเอง เราอยากได้อะไรแบบนี้มาก ๆ เพราะ Laptop ที่เราใช้เป็น Macbook Pro 13-inch 2018 ที่มันไม่มี Dedicated GPU ทำให้เราเล่นเกมที่มันโหด ๆ ภาพสวย ๆ ไม่ไหวเลย ถ้าจะซื้อ PC มา มันก็ต้องอยู่ที่บ้านอยู่ดี แต่ถ้าเราอยากเล่นนอกบ้านละ มันก็เป็นไปไม่ได้ ทำให้เราเริ่มอยากที่จะลองทำ Cloud Game Streaming จาก Server ในบ้านของตัวเอง
คำเตือน : Technical Term เยอะมาก ๆ อย่าฟาดหนู !! ถ้าอธิบายทั้งหมด เกรงว่าสามารถเขียนได้ยาวเท่า Thesis เลย
Hardware
สำหรับตัว Hardware เราก็จะใช้ Server เป็น NAS ในบ้านของเราเอง ที่จริง ๆ แล้วเว็บที่ทุกคนกำลังอ่านอยู่ตอนนี้ก็คือรันอยู่ใน Server ตัวนี้แหละ CPU ที่เราใส่เข้าไปเป็น Intel Core i7-8700k ซึ่งถือว่าโคตร Overkill เมื่อเราบอกว่ามันอยู่ใน NAS Server กับ RAM ที่ Overkill ไม่ต่างกันที่ 32 GB
คือเอาไปเล่าให้เพื่อนฟังครั้งแรก มันด่าว่า NAS พ่_งมึ_ ใช้สเปกขนาดนั้นเหรอ เอาไปถ่มบ้านมึ_เหรอ ! ซึ่งเออก็จริงแหละ ไม่เถียง เถียงไม่ออกเลย แค่เอามา Serve File เอามาเพื่อ หาทำ ทำไม
ส่วน GPU ที่จะใช้วันนี้คือ Nvidia GTX 1070 Ti ถือว่าเป็น GPU ที่ไม่ได้มีความใหม่มาก เท่าไหร่ และยังไม่ได้รองรับ Ray Tracing ตามยุคตามสมัย แต่ก็ไม่เป็นไร ไว้ถ้า Project นี้มันออกมาใช้งานได้ ค่อย Upgrade ได้ไม่ว่ากัน
ในตอนที่เราเตรียมเครื่องเพื่อลง OS และ โปรแกรมต่าง ๆ ต้องมีจอ, Mouse และ Keyboard มาเสียบด้วย เพื่อให้เราสามารถลง Windows และโปรแกรมต่าง ๆ ได้ พอลงเสร็จ ทำทุกอย่างเสร็จ เราก็ถอดออกไปได้เลย
เพื่อให้การติดตั้งทำได้ง่าย เราแนะนำให้ CPU ที่ใช้มันมี Integrated GPU ด้วย เพราะบางที มันจะมีปัญหาว่าเวลา Boot เครื่องขึ้นมา Unraid มันจะไปจอง GPU ทำให้เราไม่สามารถ Passthrough เข้าไปใน VM ได้ มันมีท่ายากอยู่ แต่เราลองแล้วมันยากจริง ไม่แนะนำเท่าไหร่ ตอนนั้นหมดเวลาไป 2-3 อาทิตย์ ในการลองจนได้
Preparing Environment
ใน NAS ของเรามันรัน Software คือ Unraid อยู่แล้ว (ไว้จะมาเล่าว่ามันคืออะไร) ซึ่งมันรองรับการทำ VM ผ่าน KVM ได้เลย ทำให้เราเตรียมเครื่องง่าย ๆ ด้วยการ สร้าง VM ขึ้นมาใหม่ 1 ตัวไปเลย
เริ่มต้นจาก CPU จากการลองประกอบเครื่องเล่นเกมหลาย ๆ เครื่อง เราพบว่า แค่ประมาณ 4-6 Core หรือเท่ากับ 8 -12 Threads ก็ทำให้เกมเราเล่นได้ลื่น ๆ แล้ว เพิ่มไปมากกว่านี้มันไม่ได้ส่งผลอะไรมากเท่าไหร่ ทำให้ใน VM เราเลยจะใส่ไปแค่ 10 Threads เท่านั้น ทำให้เราเหลืออีก 2 Thread สำหรับ Hypervisor และ ตัว Unraid เอง สิ่งข้อระวังคือ เราจะต้องดูดี ๆ ว่า Core ไหน มันผูกกับ Thread ไหนแล้วเลือกให้มันอยู่ใน Core เดียวกัน เพื่อประสิทธิภาพสูงสุด ไม่งั้น เวลาข้อมูลมันจะเข้าไปประมวลผลใน CPU มันจะต้องวิ่งโดดไปโดดมา (หรือในภาษาคอมพิวเตอร์เราเรียกว่า Context Switching) จนทำให้เกิด Overhead ที่สูงกว่าที่มันควรจะเป็น
ไปที่เรื่องของ RAM ตอนแรกก็คิดแหละว่า 8 GB น่าจะพอแล้ว Laptop เราที่กำลังใช้เขียนบทความนี้ มี RAM 8 GB เออ แค่เปิด Chrome ก็หมดแล้ว เล่นเกมจะเหลืออะไร เราเลยใส่ใน VM ไปให้ 16 GB ไปเลย น่าจะเพียงพอต่อการเล่นเกมอย่างเดียวแล้วละ
Storage ก็เป็นเรื่องสำคัญ ในเครื่อง NAS ของเรามี SSD ที่ทำ RAID10 (อ่านเพิ่มเติมเรื่อง RAID ได้ ที่นี่) ซึ่งมันให้ความเร็วที่แรงมาก ๆ ทำให้เราเลือกที่จะสร้างเป็น Virtual Disk ขนาดเล็ก ๆ 250 GB เป็น Disk สำหรับ Boot ตัวหลัก ก็น่าจะทำให้เราสามารถลง Windows, Programs และ เกมเล็ก ๆ ได้อยู่ในนั้น หรือถ้าเราเอามาทำงาน โปรแกรมสำหรับทำงานมันก็พอที่จะลงได้อยู่ ไม่น่ามีปัญหาอะไร
ตัวเกมที่มีขนาดใหญ่ เช่น Call of Duty Modern Warfare ที่เกมเดียวกดไป 200-300 GB (เกมบ้าอะไรใหญ่ขนาดนั้น) การเอาไปใส่ใน RAID10 SSD ดูจะเป็นการใช้งานที่โคตรสิ้นเปลืองมาก ๆ ทำให้เราเลือกที่จะใส่ HDD ขนาด 1 TB ลงไปเพิ่ม แต่ตัวนี้เราไม่ได้ทำเป็น Virtual Disk เราใช้วิธีการ Passthrough ลงไปที่ VM โดยตรงเลย นั่นคือ ทำให้เราสามารถใช้ Disk ลูกนี้ได้เต็มประสิทธิภาพ ไม่ได้ใช้ร่วมกับใครทั้งนั้น เหมือนกับเราเอา HDD ใส่เข้าไปในคอมปกติ
มาถึงพระเอกเองของเราคือ GPU ถ้าจะเล่นเกม ขาดมันไม่ได้แน่นอน ในที่นี้เราใช้ GPU จาก Nvidia รุ่น GTX 1070Ti ที่ใช้ตัวนี้เพราะเราไปแคะมาจากคอมเก่าแล้วมันว่างไม่ได้ใช้อยู่เลย เอามาใช้สักหน่อย ถ้าใครที่อยากจะไปให้สุดก็เชิญอัพรุ่นขึ้นไปได้เลย แต่ถ้าอัพรุ่นสูงมาก ๆ อย่าลืมอัพพวก RAM สักหน่อยก็น่าจะดี
การที่เราจะเอา GPU เข้าไปใช้งานใน VM ได้ มันมีตัวเลือกเดียวคือ การที่เรา Passthrough มันเข้าไปทั้งการ์ดเลย ทำให้เราสามารถใช้ GPU ได้เต็มประสิทธิภาพเหมือนกับเราเสียบมันเข้าไปในเครื่องปกติ ส่วนถ้าถามว่า แล้วพวก Cloud Game Streaming จริง ๆ ทำไมเขาสามารถแบ่ง 1 GPU ได้หลาย VM พวกนี้มันจะอยู่ใน Enterprise Solution เช่น Nvidia GRID ส่วนการใช้งานบ้าน ๆ อย่างเราก็ซื้อ GPU เพิ่มไป
สำหรับคนที่ใช้ Unraid แล้วอยากไปลองทำ ตรงช่อง Sound Card จำเป็นที่จะต้อง Passthrough Sound Card ของ Nvidia ลงไปด้วย เหตุผลแบบอธิบายชัด ๆ เลยเราไม่รู้ แต่เราเข้าใจแค่ว่ามันอยู่ใน IOMMU Group เดียวกัน เราต้องเอามันไปทั้ง Group ไม่งั้นเราจะเจออาการเปิดมาแล้วจอดำ
สุดท้าย ท้ายสุด อย่าลืม Passthrough Mouse และ Keyboard ลงไปด้วย ไม่งั้นเราจะกด คลิก เพื่อลง Windows ไม่ได้ หรืออีกตัวเลือกคือ ลองไปหา PCIe Card ที่เป็น USB Controller มาแล้วเราก็ Passthrough ทั้ง Controller เข้าไปได้เลย ทำให้เราสามารถทำ Hot-Plug ได้ ตัวนี้จะ Work สำหรับการใช้ VM ตัวนี้เป็นเครื่องทำงานในบ้านด้วยเลย
Installing OS
ก่อนที่จะกด Submit สร้าง VM เราจำเป็นที่จะต้อง Mount ตัวติดตั้งของ Windows ลงไปก่อนด้วย ซึ่งเราสามารถเข้าไปโหลดในเว็บไซต์ของ Microsoft โดยตรง
สำหรับ Windows มันจะมีพวก Driver ที่มันไม่ได้ Built-in มากับ Windows เราจะต้องลงเอง ถ้าใช้ Unraid มันจะมีช่อง VirtIO Drivers นั่นแหละ ให้เราใส่ Path ของไฟล์ Driver Image ลงไป
ตอนเราลง Windows ถึงตรงเลือก Storage Device มันจะว่าง ไม่มี Disk อะไรเลย ครั้งแรกก็ตกใจเหมือนกัน WTF ไปเลยตอนนั้น จริง ๆ ก็คือ ให้เราเลือก Load Driver แล้วไปดึง Driver จาก VirtIO ที่เรา Mount ลงไป พอลงเสร็จ เราก็จะเห็น Storage ที่เรา Mount และ Passthrough ลงไปได้ทั้งหมด ที่เหลือก็ลง Windows ตามปกติ จนมันเข้าหน้า Desktop ใหญ่ ๆ หน่อยคือเรียบร้อย
Installing Driver & Software
หลังจากเราลง Windows ไปแล้ว ขั้นตอนต่อไปคือ เราต้องมาลง Driver กันต่อ โดย GPU เราใช้เป็น Nvidia GTX1070 Ti เราก็สามารถเข้าไปที่เว็บของ Nvidia และ โหลด Driver มาและลงได้ตรง ๆ
ส่วน Hard Disk ที่เรา Passthrough เข้ามา เราก็ต้องเข้าไปแบ่ง Partition และ Format เพื่อให้มันพร้อมใช้งานด้วย ก็คือเข้าไปที่ Disk Management โดย ที่ Hard Disk ที่ใส่เข้ามา เราใส่มาในขนาด 1 TB เลย เลือกที่จะแบ่งเป็นแค่ 1 Partition เท่านั้น และสั่ง Format ได้เลย มันก็น่าจะออกมาเป็น Drive D ให้เราเข้าใช้งานได้
เท่านี้เครื่องก็น่าจะพร้อมให้เราใช้งานแบบ Local ได้แล้ว เพื่อให้เราสามารถ Access เข้ามาจากที่ไหนก็ได้ เราจะต้องใช้พวก Software ที่ทำให้เราสามารถเข้าถึงเครื่องจากที่ไหนก็ได้ มันก็จะมีพวก Teamviewer และ AnyDesk
แต่ตัวที่เราจะเอามาแนะนำให้ใช้ในวันนี้คือ Parsec เขาบอกว่ามันออกแบบมาให้เราสามารถเล่นเกมผ่านการ Remote เข้ามาได้เลย ถ้าเป็นตัวอื่น มันจะมีความหน่วงที่เยอะมาก ๆ เล่นเกมพวก FPS คือตายแน่ ๆ ไม่รอด แต่อันนี้เขาเคลมมาแบบนี้ก็ได้ ลอง ๆ
หลังจากเราลงแล้ว เราก็ Login อะไรให้เรียบร้อย ก็พร้อมใช้งานแล้ว ไม่ยากเลย ที่ปลายทาง เราก็แค่ลง Parsec และ Login เหมือนกัน ก็น่าจะเห็นเครื่อง VM ที่เราพึ่ง Setup ไป
Installing Game
เราลงเครื่องมาเพื่อเล่นเกม ดังนั้น เราก็ต้องลงเกมด้วย ตัวเรานั้นคือติด Call of Duty Modern Warfare มาก ก็ลงผ่าน Battle.net ได้เลย กับพวกเกมจาก Stream ก็สามารถลงได้เลย เช่นกัน หรือใครจะเอาไปใช้ทำงาน ทำได้เหมือนกัน
Performance
มาที่เรื่องอันโคตรจะสำคัญกันบ้างคือ Performance ในการใช้งาน สำหรับคนที่มีภาพมาก่อนว่า การใช้งานเครื่องบน VM นั้นช้าไปหมด เราอยากให้มองภาพใหม่ และ ไปรู้จักเทคโนโลยี Visualisation ให้มากขึ้น เพราะเอาจริง ๆ เวลาเราไปเช่า Cloud มันก็ทำงานผ่านพวก VM ทั้งนั้นแหละ
ในการใช้งานจริง ๆ ผ่านการเสียบจอด้วยการใช้งานเบื้องต้นอย่าง การเปิด Web Browser และ การทำงานไฟล์เอกสารทั่ว ๆ ไป ต้องบอกเลยว่าทำได้ดีมาก ๆ ไม่มีอาการกระตุกหรือ มีปัญหาอะไรเลย พอเข้าไปเล่นเกม ตัว Frame Rate ที่ได้ออกมานั้นถือว่าใกล้เคียงกับที่เราประกอบเครื่องขึ้นมาใช้งานเลย อาจจะน้อยกว่าหน่อย เพราะเราไม่ได้แบ่ง CPU มาให้ VM เต็ม ๆ ทุก Core ต้องเว้นไว้เผื่อให้ Unraid และ Hypervisor ทำงาน ทำให้ Performance อาจจะหายไปนิดหน่อย
ในเรื่องของ Disk ที่เป็น SSD ด้วยความที่มันเป็น RAID10 ทำให้ความเร็วของมันต้องถือว่า ทำได้ดีมาก ๆ เหมือนใช้งานเครื่องทั่ว ๆ ไป แต่ถ้าเรารันหลาย ๆ VM เราแนะนำให้หันไปใช้พวก SSD แบบ NVMe จะดีกว่ามาก ๆ แต่ราคาก็ตีบวกขึ้นไปอีกเยอะเลยทีเดียว อาจจะทำแค่ RAID1 เพื่อลดต้นทุน แต่ถ้าเอาประหยัด เราแนะนำให้ใช้ SATA SSD ความเร็วก็จะช้ากว่าเยอะ แต่ราคาก็ดีกว่าเยอะเช่นกัน
มาถึงตอนที่ทุกคนน่าจะอยากรู้แล้วว่า ถ้าเราใช้งานผ่าน Parsec มันจะเป็นยังไงบ้าง บอกเลยว่า เชี้ยยยยยยยยย (อุทานเสียงดังมาก กอ ไก่ ล้านตัว) เราเปิดเครื่องไว้ในบ้านที่ใช้ Internet ความเร็ว 500/500 Mbps และ เครื่องที่ Remote เข้ามาเป็น Macbook Pro 13-inch 2018 พร้อมกับปรับ Resolution ตาม Client และปรับ Bandwidth ไปที่ 50 Mbps พบว่า สามารถเล่น Call of Duty Modern Warfare ได้เหมือนกับเรานั่งอยู่ที่เครื่องเล่นเกม แทบไม่มีอาการกระตุกให้เห็นเลย
เราลองให้ Extreme ขึ้นหน่อย ด้วยการเอา iMac 27-inch ที่มีจอ 5K มาต่อ แล้วเลือกความละเอียดเท่ากับ iMac ดูก็คือ Video Encoding ของ GTX1070 ขึ้นไป 19% แต่ก็ยังมีความลื่นอยู่เหมือนเดิม
อาการความผิดปกติที่เจอคือ เรื่อง Mouse ที่มันมีการ Smoothing แปลก ๆ พอเล่นเกมแล้วมันผิดปกติ พอลองเปลี่ยน Host มาเป็น Windows ก็จะเป็นปกติไม่มีอะไร เลยทำให้คิดว่า น่าจะเป็นที่ระบบของ macOS เองแหละ ที่ทำให้มันแปลก ๆ อยากรู้เพิ่ม เลยลองเล่นเกมใน macOS ก็เจออาการเดียวกัน
ต้องบอกเลยว่า Parsec มันทำได้เหมือนที่มันโม้ไว้จริง ๆ ว่ามันใช้เทคโนโลยีเดียวกับพวก Cloud Game Streaming ถ้าขนาดเล่นเกมที่ยิงกันเร็วขนาดนั้นได้ละก็ เราว่าเกมไหน ๆ ก็น่าจะไม่มีปัญหาแล้วละ
Energy Consumption
ในเมื่อเราต้องเปิดมันทิ้งไว้เลย มันก็ต้องมีเรื่องของการบริโภคพลังงานเข้ามาเกี่ยวแน่นอน จากเดิมที่เราไม่มี GPU และ มี VM เพียง 2-4 ตัวเท่านั้น ตอนนี้เราเพิ่มตัวแรงเข้ามาตัวนึง มันจะบริโภคพลังงานมากแค่ไหนกันเชียว ในการวัดนี้ เราจะใช้ค่าที่ UPS แจ้งเรามาว่า มันใช้งานอยู่กี่ Watts
ก่อนหน้าที่เราจะเอา GPU กับ HDD 1 TB มาติดตั้งเพิ่ม เครื่อง NAS ของเรา Idle จะทำงานอยู่ที่ 69-72 Watts เท่านั้น แต่พอเราเพิ่ม GPU เข้าไป Idle มันจะอยู่ที่ 95-98 Watts เพิ่มขึ้นมาประมาณ 36% เลยทีเดียว
แต่เมื่อเราลอง Full Load จริง ๆ ก่อนจะใส่ GPU อยู่ที่ 210-234 Watts โดยที่เราให้มัน Encode Plex ไฟล์ 4K HDR HEVC น่าจะเป็นไฟล์ที่จัดเต็มที่สุดแล้ว เทียบกับเราเปิด VM เล่น Call of Duty Modern Warfare เปิด Settings ตามที่ระบบแนะนำมา ที่ความละเอียด 1080p มันกินไป 381-398 Watts โดดขึ้นมาประมาณ 70.9% ได้เลย ถือว่าเยอะมาก ๆ แต่ก็เข้าใจได้ เพราะปกติ GPU มันไม่ได้วิ่ง พอเล่นเกมเท่านั้นแหละ มันต้อง Full Load ทันที
สรุป : จบสวยเฉย ใช้งานได้ดี คุ้มค่าไฟ
Project นี้เป็นสิ่งที่เราคิดมานานมากแล้วละ แต่เราก็ไม่มีโอกาสทำสักที แต่เพราะการมาของ Parsec ทำให้ Project นี้ออกมาใช้งานจริงได้ (เขาไม่ได้จ่ายเรานะ) การติดตั้งที่อาจจะยากไปสักหน่อยสำหรับคนที่พึ่งเริ่มต้น แต่ถ้าใช้เวลาสักหน่อยก็น่าจะทำได้เหมือนกัน ในแง่ของ Performance เมื่อเอามาเล่นเกมจริง ๆ ลดลงไปจากเครื่องปกติในสเปกเดียวกันเล็กน้อย แต่ยังอยู่ในระดับที่เรียกได้ว่าเล่นได้ (60 FPS++) ไม่มีปัญหาเลย และการ Remote เข้ามาเล่นผ่าน Parsec ก็ให้ประสบการณ์ที่ดี แทบไม่เจออาการแลค หรือช้าให้เห็น (เมื่อเล่นจากที่ ๆ มี Internet ที่ความเร็วคงที่) ส่วนเรื่องของการกินไฟ พบว่า ใน Idle มันกินไฟเยอะขึ้นไม่มากอยู่ในระดับที่พอรับได้ กับ Full Load เอง เราไม่ได้ซีเรียสอะไรมาก เพราะเราไม่ได้เล่นเกมแบบ 24/7 อยู่แล้ว ทำให้ความคุ้มค่าค่อนข้างสูงเลยทีเดียว
Solution นี้น่าจะเหมาะกับคนที่ไม่ได้อยู่บ้านบ่อย ๆ อยากเล่นเกมมาก ๆ แต่ ไม่อยากมี Laptop ที่แรงจนน้ำหนักเยอะปวดหลัง หรืออาจจะเป็นนักศึกษา แล้วต้องไปอยู่หอ ไม่อยากเอา Desktop PC ไป เพราะมันกินไฟหอมาก ๆ และมี Server ไว้ที่บ้านอยู่แล้ว เราก็ Remote กลับไปก็ได้เหมือนกัน
อีกเคสที่ทำได้คือ ทำเหมือนกันเลย แต่เราทำเป็น NAS + Workstation ในเครื่องเดียวกันเลย ก็ทำได้อยู่ กับถ้าเราลองพวก Wake On LAN Plugin ลงไป แล้วเราก็อาจจะ ยิงให้ VM มันเปิดก็ได้เหมือนกัน ตัวอย่างที่เราทำคือ เราต่อมันเข้ากับ Home Assistant แล้วทำออกมาเป็นปุ่ม สำหรับเปิดเครื่องอย่างเดียว ส่วนปิดเครื่อง Wake On LAN มันทำไม่ได้ ก็ไม่เป็นไร เราก็แค่สั่ง Shutdown เครื่องปกติเท่านั้นเอง
แต่เคสที่เราจะไม่แนะนำคือ มีเครื่อง PC Desktop สำหรับเล่นเกมอยู่แล้ว และลง Parsec เพื่อให้ Remote เข้ามาเฉย ๆ เลย เพราะมันกินไฟเยอะมาก โดยเฉพาะเครื่องที่มีสเปกสูง ๆ ยิ่งกินไฟหนักเลย การเสียค่าไฟเยอะขนาดนั้น เพื่อแค่เราจะได้เล่นเกมจากที่ไหนก็ได้ เราว่ามันเปลืองมากเกินไป ถ้าอยู่หอจริง ๆ เราว่ายก PC Desktop ไปเล่นที่หอเลย น่าจะประหยัดค่าไฟมากกว่าแน่ ๆ