وقتی میخواهید سرور مجازی بخرید، دو کلمه بیشتر از بقیه در برگهی مشخصات تکرار میشود: KVM و NVMe. اولی تعیین میکند منابعی که پولش را میدهید واقعاً مال شماست یا فقط روی کاغذ؛ دومی تعیین میکند دیتابیس و سایتتان با چه سرعتی نفس میکشند. در این مقاله به زبان ساده میبینیم مجازیسازی KVM چیست، NVMe چه فرقی با SSD معمولی دارد، و با چند دستور ساده چطور مطمئن شوید فروشنده همان چیزی را تحویل داده که قولش را داده بود.
مجازیسازی KVM چیست و چرا برای خریدار مهم است؟
KVM مخفف Kernel-based Virtual Machine است: ماژول مجازیسازی که داخل خودِ هستهی لینوکس زندگی میکند و با کمک قابلیتهای سختافزاری پردازنده (Intel VT-x یا AMD-V) ماشینهای مجازی «واقعی» میسازد. کلمهی واقعی اینجا بار فنی دارد: هر سرور KVM یک کامپیوتر کامل شبیهسازیشده است — پردازندهی مجازی، رم اختصاصی، دیسک و کارت شبکهی خودش را دارد و مهمتر از همه، کرنل خودش را بوت میکند.
نتیجهی عملی برای شما سه چیز است:
- رم اختصاصی: ۴ گیگ رم یعنی ۴ گیگ رم؛ در لحظهی ساخت ماشین برای شما رزرو میشود، نه اینکه «تا سقف ۴ گیگ اگر بقیه استفاده نکنند».
- کرنل مستقل: میتوانید ماژول کرنل بارگذاری کنید — یعنی WireGuard، Docker، فایلسیستمهای خاص و هر چیزی که به کرنل دست میزند بدون بهانه کار میکند.
- هر سیستمعاملی: اوبونتو، دبیان، آلما، حتی BSD یا ویندوز. چون سختافزار مجازی است، سیستمعامل مهمان محدودیتی ندارد.
تفاوت KVM و OpenVZ — و ماجرای اورسلینگ
روش دوم مجازیسازی، کانتینری است: OpenVZ و LXC. در این مدل هیچ ماشین مجازیای در کار نیست؛ همهی «سرور»ها در واقع پارتیشنهایی از یک سیستمعامل مشترکاند و کرنل میزبان را قرض میگیرند. سبکتر است و سربار کمتری دارد — اما بهای این سبکی را شما میپردازید:
- کرنل انتخابی نیست: اگر میزبان کرنل قدیمی داشته باشد، شما هم دارید. نصب داکر یا ویپیان کرنلی روی OpenVZ قدیمی معمولاً به دیوار میخورد.
- منابع «مشترکِ قابل قرض» هستند: رمی که میبینید اغلب burst است، نه رزروشده.
- اورسلینگ آسان میشود: چون منابع رزرو نمیشوند، فروشنده میتواند روی سروری با ۶۴ گیگ رم، مثلاً ۲۰۰ گیگ رم «بفروشد» — با این شرط که همه همزمان مصرف نکنند.
علامتهای کلاسیک اورسلینگ را احتمالاً دیدهاید: سرور ظهرها پرواز میکند و شبها که همسایهها بیدار میشوند به زانو میافتد؛ یا free رم خالی نشان میدهد ولی پروسهها با خطای کمبود حافظه کشته میشوند. در KVM این بازی بسیار سختتر است، چون رم هر ماشین از قبل کنار گذاشته شده. تفاوت KVM و OpenVZ در یک جمله: یکی خانهی مستقل با سند است، دیگری اتاقی در خانهی صاحبخانه.
NVMe چیست؟ سه نسل دیسک در یک نگاه
حالا سراغ کلمهی دوم. برای فهمیدن اینکه NVMe چیست باید یک قدم عقب برویم: هارد مکانیکی (HDD) برای هر خواندنِ پراکنده باید هد فیزیکی را جابهجا کند — چند میلیثانیه برای هر حرکت. SSD قطعهی متحرک ندارد، اما SSDهای معمولی هنوز از رابط SATA حرف میزنند؛ پروتکلی که برای هاردهای مکانیکی طراحی شده و سقفش حدود ۵۵۰ مگابایت بر ثانیه و یک صف فرمان است. NVMe پروتکلی است که از اول برای حافظهی فلش نوشته شده و مستقیم روی PCIe مینشیند: دهها هزار صف موازی، تأخیر در حد میکروثانیه.
| نوع دیسک | IOPS تصادفی (۴K) | تأخیر معمول | پهنای باند |
|---|---|---|---|
| HDD (۷۲۰۰ دور) | ۱۰۰ تا ۲۰۰ | ۵ تا ۱۰ میلیثانیه | حدود ۱۶۰ مگابایت/ثانیه |
| SATA SSD | ۵۰ تا ۱۰۰ هزار | حدود ۰٫۱ میلیثانیه | تا ۵۵۰ مگابایت/ثانیه |
| NVMe | ۲۰۰ هزار تا بیش از ۱ میلیون | ۲۰ تا ۱۰۰ میکروثانیه | چند گیگابایت/ثانیه |
این اعداد برای سایت شما یعنی چه؟
بار واقعی یک سرور وب، خواندنهای کوچک و پراکنده است — دقیقاً همانجایی که ستون IOPS حرف اول را میزند، نه پهنای باند. یک صفحهی وردپرس برای رندر شدن دهها کوئری دیتابیس اجرا میکند؛ هر کوئری چند خواندن کوچک از دیسک. روی HDD هر کدام از این خواندنها میلیثانیهها طول میکشد و جمعشان میشود TTFB یکثانیهای؛ روی دیسک NVMe سرور همان کوئریها در حد میکروثانیه جواب میگیرند و TTFB به زیر ۲۰۰ میلیثانیه میرسد. همین اثر را در ایمپورت دیتابیس، بکاپگیری، apt upgrade و بیلد پروژه هم لمس میکنید.
چطور بفهمیم واقعاً چه چیزی تحویل گرفتهایم؟
خوشبختانه لازم نیست به بروشور فروشنده اعتماد کنید؛ سه دستور کافی است. اول با SSH وارد سرور شوید.
۱) نوع مجازیسازی
systemd-detect-virt
اگر خروجی kvm بود، سرور KVM دارید؛ خروجی openvz یا lxc یعنی کانتینر. تأیید دوم:
lscpu | grep -i -E 'hypervisor|virtualization'
در سرور KVM باید عبارت Hypervisor vendor: KVM را ببینید.
۲) نوع دیسک
lsblk -d -o NAME,ROTA,TYPE,MODEL
اگر نام دیسک nvme0n1 باشد، NVMe واقعی است. نام sda با ROTA برابر صفر یعنی SSD (احتمالاً SATA یا دیسک مجازی)، و ROTA برابر یک یعنی هارد مکانیکی — فرار کنید.
۳) تست سرعت واقعی با fio
apt install -y fio
fio --name=quicktest --filename=fio-test --size=256M --rw=randread --bs=4k --iodepth=32 --ioengine=libaio --direct=1 --runtime=15 --time_based --group_reporting
rm fio-test
به عدد IOPS در خروجی نگاه کنید و با جدول بالا مقایسه کنید: چند صد یعنی HDD، چند ده هزار یعنی SATA SSD، و بالای صد هزار یعنی NVMe سالم. در سرورهای ابری معمولاً سقف منصفانهای روی IOPS هر ماشین گذاشته میشود تا یک همسایه دیسک را قبضه نکند — عدد ثابت و قابل تکرار مهمتر از رکوردشکنی است.
randread و فایل کوچک انجام دهید و فایل تست را حذف کنید. تستهای نوشتنِ سنگین و طولانی هم عمر فلش را میخورند و هم اگر سرورِ در حال کار دارید، سرویستان را کند میکنند.چکلیست خریدار: قبل از پرداخت این ۵ مورد را بپرسید
- نوع مجازیسازی صریح نوشته شده؟ کلمهی «KVM» را در مشخصات پیدا کنید؛ «سرور مجازی پرقدرت» بدون ذکر تکنولوژی، علامت سؤال است.
- رم اختصاصی است یا burst؟ در KVM جواب پیشفرض «اختصاصی» است؛ در OpenVZ حتماً بپرسید.
- دیسک دقیقاً چیست؟ اگر فقط نوشته «SSD»، به احتمال زیاد SATA است. NVMe را با اسم مینویسند، چون مزیت رقابتی است.
- میتوانید ارزان تست کنید؟ بزرگترین مزیت پرداخت ساعتی همین است: در مهران هاست میتوانید یک سرور KVM با دیسک NVMe بسازید، همین سه دستور را اجرا کنید و اگر اعداد راضیتان نکرد، سرور را حذف کنید — کل هزینهی آزمایش، چند ساعت است نه یک ماه.
- بعد از تحویل، حرف فروشنده را چک کنید.
systemd-detect-virtوlsblkسی ثانیه وقت میگیرند.
قدم بعدی
حالا که میدانید مجازیسازی KVM چیست و پشت اعداد IOPS چه خبر است، دیگر هیچ برگهی مشخصاتی نمیتواند گیجتان کند: KVM یعنی منابع واقعی، NVMe یعنی دیسکی که دیتابیس را معطل نمیکند. اگر میخواهید همین امروز این دو را با چشم خودتان محک بزنید، یک سرور ساعتی بسازید و دستورهای این مقاله را رویش اجرا کنید. برای آشنایی با مدل پرداخت ساعتی هم مقالهی سرور ابری ساعتی چیست را بخوانید.