آیا اجرای بازی روی VPS امکانپذیر است؟
یک VPS استاندارد به دلیل نداشتن GPU اختصاصی قادر به اجرای بازی نیست و تنها برای میزبانی سرور بازی مناسب است. در این مطلب بررسی میکنیم چرا سختافزار مجازی برای گیمینگ کار نمیکند.
آیا میتوان روی یک VPS بازی کرد؟ پاسخ کوتاه
آیا میتوان روی یک VPS بازی کرد؟ دو گروه این پرسش را مطرح میکنند و به پاسخهای متفاوتی نیاز دارند. اگر قصد دارید خودتان روی یک سرور اجارهای بازی کنید و تصویر را روی نمایشگر خود ببینید، یک VPS (سرور مجازی خصوصی) استاندارد قادر به انجام این کار نیست و هیچ تغییر پیکربندیای این مشکل را حل نمیکند. اما اگر میخواهید یک سرور بازی میزبانی کنید که سایر بازیکنان به آن متصل شوند، VPS یکی از بهترین گزینههای مقرونبهصرفه است و اغلب یک پلن کوچک برای این کار کافی خواهد بود.
اگر برای بخش میزبانی اینجا هستید، مستقیماً به انتخاب VPS برای سرورهای بازی یا اجرای سرور Minecraft روی VPS بروید. بخشهای زیر توضیح میدهند که چرا بخش اجرای بازی (playing) کار نمیکند، زیرا این پاسخی است که افراد بهندرت بهطور مستقیم دریافت میکنند.
چرا یک VPS استاندارد فاقد GPU است
یک VPS استاندارد، بخشی از یک سرور اشتراکی است: شامل هستههای مجازی CPU، رم، دیسک و یک پورت شبکه. میزبان یک سرور رکمونت است و سرورهای رکمونت کارت گرافیک مصرفی ندارند، زیرا یک GPU (واحد پردازش گرافیکی) مخصوص بازی، برای کیسهای دسکتاپ با فنهای اختصاصی و توان مصرفی بالا طراحی شده است. ماشین مجازی شما یک آداپتور نمایشگر مجازی دریافت میکند تا کنسول بوت بتواند خروجی را نمایش دهد. کل داستان گرافیک همین است.
lspci | grep -i -E 'vga|3d|display'
ls -l /dev/driدستور اول یک خط را چاپ میکند که معمولاً چیزی شبیه به Cirrus Logic GD 5446 یا Red Hat, Inc. Virtio 1.0 GPU است. این دستگاهها فاقد موتور سهبعدی هستند. دستور دوم معمولاً پاسخ ls: cannot access '/dev/dri': No such file or directory را برمیگرداند، زیرا هیچ دستگاه رندرینگ مستقیمی برای باز شدن توسط برنامه وجود ندارد. در یک نمونه مجهز به GPU واقعی، همان دستور لیست card0 و renderD128 را نمایش میدهد.
کتابخانه Mesa همچنان از طریق llvmpipe، یعنی رندرکننده نرمافزاری خود، OpenGL را در اختیار شما قرار میدهد که تمام مثلثها را روی CPU ترسیم میکند. این برای یک محیط دسکتاپ یا یک بازی دوبعدی قدیمی کافی است. یک عنوان سهبعدی مدرن با نرخ چند فریم در ثانیه اجرا میشود و CPU درگیر کاری میشود که در آن ضعیفترین عملکرد را دارد؛ در نتیجه منطق بازی نیز کند میشود.
چرا تأخیر ورودی عامل اصلی شکست در بازی از راه دور است
بازی از راه دور یک چرخه است. فشردن کلید شما به سرور ارسال میشود، سرور یک فریم را رندر میکند، آن فریم را به ویدیو انکود کرده و بازمیگرداند، سپس کلاینت شما آن را دیکود کرده و روی صفحه نمایش میدهد. هر مرحله چند میلیثانیه زمان میبرد و این زمانها با هم جمع میشوند.
The data behind this chart
[
{
"label": "Input capture and send",
"typical_ms": 5
},
{
"label": "Network round trip",
"typical_ms": 15
},
{
"label": "Frame render on the server",
"typical_ms": 12
},
{
"label": "Hardware video encode",
"typical_ms": 8
},
{
"label": "Decode and display on the client",
"typical_ms": 15
},
{
"label": "Sum of the stages above",
"typical_ms": 55
}
]تنها 15 میلیثانیه از این زمان مربوط به رفتوبرگشت شبکه است و این تنها بخشی است که با انتخاب سروری نزدیکتر به خود میتوانید بهبود دهید. باقی مراحل مربوط به خودِ خط لوله (pipeline) است و برای آن اهمیتی ندارد که سرور کجا قرار دارد. این مراحل پیش از آنکه بازی حتی پردازشی انجام دهد، 55 میلیثانیه تأخیر ایجاد میکنند. این ارقام، مقادیر منتشرشدهٔ معمول برای استریم توسط انکودر سختافزاری به کلاینتی در همان منطقه است و نه اندازهگیریهای یک ماشین خاص؛ بنابراین آنها را به عنوان نمایی از ابعاد مشکل در نظر بگیرید.
این تأخیر در یک چرخه بازخورد (feedback loop) قرار میگیرد. شما ماوس را حرکت میدهید، نتیجه را میبینید و اصلاح میکنید. تأخیر اضافه باعث میشود هر اصلاح با تأخیر برسد، در نتیجه از هدف عبور میکنید و دوباره اصلاح میکنید. بازیهای نوبتی، استراتژیک، شبیهسازهای مدیریتی و بازیهای کارتی بهراحتی با این وضعیت کنار میآیند. اما بازیهای تیراندازی، مبارزهای، ریتمیک و مسابقهای چنین نیستند.
جیتر (Jitter) و از دست رفتن بستهها (packet loss) به شکل متفاوتی آسیب میزنند. استریم ویدیویی نمیتواند منتظر ارسال مجدد بماند، زیرا فریمی که آن بسته به آن تعلق دارد از قبل منقضی شده است؛ بنابراین این نقص به صورت آرتیفکتهای بلوکی یا تصویر فریز شده ظاهر میشود تا یک وقفه. به همین دلیل است که دسکتاپ از راه دور ابزار مناسبی برای این کار نیست. پروتکلهای VNC (محاسبات شبکه مجازی) و RDP (پروتکل دسکتاپ از راه دور) معمولی، مستطیلهای تغییریافته را از طریق TCP ارسال میکنند و صفحهای که در هر ثانیه 60 بار بهطور کامل تغییر میکند، این فرآیند را به جریانی از ارسالهای مجدد تبدیل میکند.
آنچه یک سیستم واقعی برای بازی ابری نیاز دارد
ساخت اصولی این سیستم ممکن است. این کار همزمان به چهار مورد نیاز دارد:
- یک نمونه GPU با کارت گرافیک دیتاسنتری، زیرا این تنها نوع کارتی است که ارائهدهنده مجوز اجاره دادن آن را دارد.
- یک انکودر ویدیویی سختافزاری مانند NVENC که انکودر داخلی NVIDIA است، زیرا انکود نرمافزاری باعث مصرف CPU و ایجاد تأخیر میشود.
- یک جفت استریمینگ که برای بازی طراحی شده باشد، نه برای دسکتاپ. Sunshine روی سرور و Moonlight روی کلاینت، انتخاب رایج متنباز هستند.
- سروری در محدوده شهری خودتان، زیرا رفتوبرگشت دادهها به مسافت بستگی دارد و مسافت در فیبر نوری، تابع سرعت نور است.
سپس قیمت آن را محاسبه کنید. نمونههای GPU ساعتی محاسبه میشوند، بنابراین نرخ ساعتی را در 730 ضرب کنید تا هزینه یک ماه روشن ماندن سرور به دست آید. تا اوت 2026، این مبلغ یک قبض ماهانه سه رقمی به دلار آمریکا است که در عرض یک سال هزینه خرید یک کنسول را پوشش میدهد و علاوه بر آن، همچنان باید هزینه لایسنس بازیها را نیز بپردازید. آنچه یک GPU VPS واقعاً به شما میدهد و محاسبات نقطه سربهسر برای اجاره ساعات GPU این اعداد را بررسی میکنند.
اگر فقط قصد بازی دارید، سرویسهای تجاری بازی ابری همین پشته (stack) را از دیتاسنترهای نزدیک به شما اجرا میکنند و مسائل مربوط به لایسنس را نیز حل کردهاند. یک VPS در یک شهر نمیتواند با شبکهای که دقیقاً برای این کار ساخته شده است، رقابت کند.
مسدودسازی توسط سیستمهای ضدتقلب و محدودیتهای لایسنس
حتی یک سیستم مجهز به GPU بینقص نیز با محدودیتهای قانونی و فنی مواجه است. سیستم Vanguard شرکت Riot برای ویندوز 11 به TPM 2.0 (ماژول پلتفرم مورد اعتماد) و Secure Boot نیاز دارد و از اجرا در ماشین مجازی خودداری میکند؛ بنابراین Valorant روی سختافزارهای ابری اجارهای اجرا نخواهد شد. سیستمهای Easy Anti-Cheat و BattlEye نیز میتوانند وجود هایپروایزر را تشخیص دهند و بسیاری از بازیهایی که از این ابزارها استفاده میکنند، ماشینهای مجازی را مسدود کرده یا کاربران را به همین دلیل بن میکنند. این یک تصمیم آگاهانه است: توسعهدهندگان ابزارهای تقلب از ماشینهای مجازی برای پنهانسازی ابزارهای خود استفاده میکنند، بنابراین عدم اجازه اجرا در محیط مجازی، یک روش حفاظتی کمهزینه برای بازیها محسوب میشود.
محدودیتهای لایسنس نیز به این مشکلات اضافه میشود. لایسنس درایورهای GeForce شرکت NVIDIA استفاده در دیتاسنتر را محدود میکند؛ به همین دلیل است که ارائهدهندگان خدمات، کارتهای مخصوص دیتاسنتر را اجاره میدهند و نه کارتهای دسکتاپ. ویندوز نیز به لایسنسی نیاز دارد که اجازه اجرا روی سختافزاری که مالک آن نیستید را بدهد. شرایط استفاده از فروشگاههای نرمافزاری نیز تعیین میکند که یک نسخه از بازی کجا میتواند اجرا شود. هر یک از این موارد بهتنهایی قابلحل است، اما مجموع آنها به این معناست که سیستم گیمینگ ابری دستساز شما، اکثر بازیهای رقابتی که کاربران برای آنها به چنین سیستمی نیاز دارند را اجرا نخواهد کرد.
چه سرویسهایی روی یک VPS بدون GPU بهخوبی اجرا میشوند
حالا به سراغ کاربرد دیگر میرویم. یک سرور اختصاصی بازی هرگز فریم رندر نمیکند. این سرور دنیای بازی را شبیهسازی میکند، ورودیهای هر بازیکن را اعمال کرده و بهروزرسانیهای وضعیت را از طریق شبکه بازمیگرداند. دستگاههای خود بازیکنان وظیفه رندر کردن را بر عهده دارند. نبودِ پردازش گرافیکی به این معنی است که نیازی به GPU نیست؛ بنابراین سیستمی که برای بازی کردن بیاستفاده است، دقیقاً همان چیزی است که برای میزبانی مناسب است.
- سرورهای اختصاصی برای Minecraft، Valheim، Terraria، Factorio، Rust، Project Zomboid و اکثر عناوین دیگری که نسخه headless server ارائه میدهند.
- چت صوتی. یک سرور Mumble آنقدر سبک است که میتواند در کنار سرور بازی روی همان پلن کوچک اجرا شود.
- دانلود ماد و نقشه از طریق پروتکل HTTP ساده، بهعلاوه پنل وب که بازیکنان شما برای مشاهده وضعیت آنلاین بودن از آن استفاده میکنند.
- سیستم Matchmaking، آمارها، جدول امتیازات، رباتهای Discord و پایگاه دادههای مربوط به آنها.
- پشتیبانگیری زمانبندیشده از دنیای بازی که به خارج از سرور منتقل میشود تا در صورت خرابی فایل ذخیره، تنها یک ساعت از پیشرفت بازی از دست برود، نه کل نقشه.
معمولاً مقدار RAM محدودکننده اصلی است و برای بسیاری از این بازیها، سرعت تکهستهای اهمیت بیشتری نسبت به تعداد هستهها دارد، زیرا تیک اصلی شبیهسازی در سرورهایی مانند Minecraft یا Factorio روی یک ترد اجرا میشود. یک پلن با هشت هسته کند، در برابر پلنی با چهار هسته سریع شکست میخورد. پهنای باند بیشتر از CPU با تعداد بازیکنان تغییر میکند و ارائهدهندگان، ترافیک مصرفی را اندازهگیری میکنند؛ بنابراین پیش از انتخاب پلن، میزان ترافیک مجاز را مطالعه کنید.
پورتهای مناسب را باز کنید و به یاد داشته باشید که بیشتر ترافیک بازیها از نوع UDP (پروتکل دیتاگرام کاربر) است تا TCP.
sudo ufw allow 25565/tcp
sudo ufw allow 27015/udp
sudo ufw statusufw status باید هر قانون را به همراه ALLOW در کنار آن فهرست کند. اگر پورت در اینجا باز است اما سرور همچنان در دسترس نیست، پنل کنترل ارائهدهنده خود را برای بررسی یک فایروال شبکه مجزا چک کنید، زیرا قانونی که داخل ماشین تنظیم شده است، بر فیلتری که پیش از آن قرار دارد تأثیری ندارد.
اجرای سرور را بدون دخالت خود حفظ کنید. یک unit در systemd یا سیاست restart در Docker، سرور را پس از reboot دوباره بالا میآورد و یک compose stack که هنگام بوت خودکار اجرا میشود الگوی معمول برای این کار است. این مورد را با پشتیبانگیری زمانبندیشده در خارج از سرور ترکیب کنید تا فایل دنیای بازی در صورت خرابی دیسک، سالم باقی بماند.
نحوه بررسی یک VPS پیش از میزبانی روی آن
تأخیر (Latency) برای بازیکنان شما تعیین میکند که آیا سرور عملکرد مطلوبی دارد یا خیر، و این موضوع قابل اندازهگیری است. از ارائهدهنده بخواهید یک آدرس تست در منطقهای که مد نظر دارید به شما بدهد، سپس این دستورات را از شبکهٔ یک بازیکن اجرا کنید، نه از داخل خودِ سرور.
ping -c 20 203.0.113.10
mtr -r -c 100 203.0.113.10ping با یک خط خلاصه مانند rtt min/avg/max/mdev = 18.4/19.1/24.6/1.2 ms به پایان میرسد. عدد آخر نشاندهنده jitter است. یک میانگین ثابت با jitter پایین، در بازی حس بهتری نسبت به میانگین پایینتری دارد که نوسان زیادی دارد. mtr میزان loss را در هر hop چاپ میکند؛ شما باید فقط loss خط آخر را بخوانید، زیرا روترهای میانی به پاسخهای ICMP (پروتکل پیام کنترل اینترنت) خود کمترین اولویت را میدهند و اغلب گزارش loss میدهند، در حالی که ترافیک واقعی هرگز دچار آن نمیشود.
سپس بررسی کنید که آیا میزبان بیش از حد ظرفیت (oversubscribed) فروخته است یا خیر.
vmstat 1 5ستون st نشاندهنده steal time است: سهم زمانی که CPU مجازی شما آماده اجرا بوده، اما میزبان فیزیکی آن چرخهها را به یک guest دیگر اختصاص داده است. یک مقدار غیرصفرِ ثابت در اینجا به این معنی است که tick rate شما تحت بار کاری دچار نوسان خواهد شد، فارغ از آنچه در صفحه مشخصات پلن نوشته شده است. Steal time و همسایگان پرسر و صدا نحوه خواندن این مقدار را توضیح میدهد و بنچمارک کردن VPS توسط خودتان سایر اعدادی را که باید پیش از تعهد یکساله جمعآوری کنید، پوشش میدهد.
پاسخ مستقیم به هر دو پرسش
اگر قصد بازی دارید، بازی را روی سختافزاری که به آن دسترسی فیزیکی دارید اجرا کنید یا از سرویسهای مخصوص استریم بازی استفاده کنید. یک VPS عمومی توانایی رندرینگ ندارد و هزینه یک instance دارای GPU از خرید سختافزار بیشتر است، در حالی که همچنان با سیستمهای anti-cheat دچار مشکل میشود. اگر قصد میزبانی دارید، یک VPS اجاره کنید. این گزینه با قیمتی اندک، انتخابی واقعاً مناسب است و همان سرور میتواند در فواصل بین شبهای بازی، سرویسهای دیگر را نیز اجرا کند.
FAQ
آیا میتوانم Steam را روی یک VPS نصب کنم و بازیهایم را انجام دهم؟
شما میتوانید کلاینت Steam را روی یک VPS لینوکسی نصب کنید و بازیها را دانلود کنید. اما اجرای آنها بخشی است که با شکست مواجه میشود. یک پلن استاندارد فاقد GPU است، بنابراین بازیهای سهبعدی به رندرینگ توسط CPU با نرخ چند فریم در ثانیه متوسل میشوند و بسیاری از بازیهای مدرن بدون یک رندرکننده پشتیبانیشده، از اجرا سر باز میزنند. استریم کردن خروجی رندر شده به صفحه نمایش شما نیز تأخیر انکود و شبکه را به آن اضافه میکند. قابلیت Steam Remote Play برای استریم از یک دستگاه گیمینگ واقعی که مالک آن هستید طراحی شده و انتظار دارد آن دستگاه دارای کارت گرافیک باشد.
آیا یک GPU VPS به من اجازه میدهد هر بازی که دارم را انجام دهم؟
این کار مشکل رندرینگ را حل میکند اما سایر مشکلات باقی میمانند. شما همچنان به یک انکودر سختافزاری، یک کلاینت با تأخیر کم مانند Moonlight و سروری که به اندازه کافی نزدیک باشد تا زمان رفت و برگشت (round trip) کم بماند، نیاز دارید. سیستمهای ضد تقلب (Anti-cheat) مانع اصلی هستند: Vanguard متعلق به Riot در ماشین مجازی اجرا نمیشود و Easy Anti-Cheat و BattlEye میتوانند هایپروایزر را شناسایی کنند، بنابراین بازیهای تیراندازی رقابتی غیرقابل اجرا هستند. بازیهای تکنفره و بازیهایی با سرعت کمتر، گزینههای واقعبینانهای هستند که هزینه ماهانه آنها از قیمت سختافزار محلی بیشتر است.
برای یک سرور Minecraft برای ده نفر، به چه اندازه VPS نیاز دارم؟
یک سرور Vanilla Java برای ده بازیکن با 2 vCPU و 4 GB رم به راحتی اجرا میشود. حدود 3 GB را با -Xmx3G به JVM (ماشین مجازی جاوا) اختصاص دهید و بقیه را برای سیستمعامل باقی بگذارید، زیرا JVM تمام حافظهای که به آن اجازه دهید را مصرف میکند و کرنل همچنان برای page cache به حافظه نیاز دارد. یک مادپک (modpack) بزرگ پاسخ را تغییر میدهد: برای حداقل 6 GB تا 8 GB حافظه heap برنامهریزی کنید و پلنی با سریعترین تکهسته (single core) انتخاب کنید، زیرا تیک اصلی دنیای بازی روی یک ترد اجرا میشود.
چرا دسکتاپ از راه دور خوب کار میکند اما بازی نه؟
دسکتاپ در هر لحظه بخش کوچکی از صفحه را تغییر میدهد و اگر بازسازی یک پنجره 100 میلیثانیه تأخیر داشته باشد، کسی متوجه نمیشود. یک بازی در هر ثانیه دهها بار تمام پیکسلها را تغییر میدهد و یک حلقه بازخورد از طریق دستان شما ایجاد میکند. VNC و RDP معمولی، مستطیلهای تغییریافته را از طریق TCP ارسال میکنند، بنابراین صفحهای که در حرکت مداوم است باعث بازنشر (retransmission) و توقف میشود. حتی یک استریم ویدیویی مناسب نیز تأخیر ورودی را باقی میگذارد و این همان تأخیری است که هنگام نشانهگیری حس میکنید.