Virtualization به یک سیستم فیزیکی اجازه می دهد چند محیط محاسباتی مستقل را همزمان اجرا کند
Virtualization چیست و CPU چگونه اجرای ماشین های مجازی را ممکن می کند؟
در یک سیستم معمولی،
Operating System
مستقیماً منابع Hardware
مانند CPU،
Memory
و Deviceها
را مدیریت می کند.
Virtualization
یک لایه جدید
به این ساختار
اضافه می کند.
این لایه اجازه می دهد
چند Operating System
یا محیط مستقل
روی یک Hardware فیزیکی
اجرا شوند.
Physical Hardware
→
Hypervisor
→
Virtual Machines
هر Virtual Machine
می تواند تصور کند
CPU،
Memory،
Storage
و Deviceهای مخصوص
خودش را در اختیار دارد.
در این فصل چه چیزهایی یاد می گیریم؟
- Virtualization چیست.
- Virtual Machine یا VM چیست.
- Hypervisor چیست.
- Type 1 و Type 2 Hypervisor چه تفاوتی دارند.
- Host و Guest چیستند.
- vCPU چیست.
- CPU چگونه بین VMها تقسیم می شود.
- Privilege Level چیست.
- Ring 0 و Ring 3 چه هستند.
- چرا Virtualization اولیه دشوار بود.
- Hardware-Assisted Virtualization چیست.
- Intel VT-x چیست.
- AMD-V چیست.
- VM Entry و VM Exit چیست.
- Trap چیست.
- Nested Paging چیست.
- EPT و NPT چیستند.
- Nested Virtualization چیست.
- Virtualization و Emulation چه تفاوتی دارند.
- Virtualization چه Performance Overheadی دارد.
- برای انتخاب CPU مناسب Virtualization چه چیزهایی مهم هستند.
Virtualization چیست؟
مجازی سازی — Virtualization
Virtualization
روشی برای ایجاد
نسخه های منطقی
یا مجازی
از منابع محاسباتی است.
به جای اینکه
یک Operating System
تمام Hardware
را به صورت انحصاری
استفاده کند،
منابع می توانند
بین چند Environment
تقسیم شوند.
برای مثال
یک Server فیزیکی
می تواند همزمان
چند VM
را اجرا کند.
Virtual Machine یا VM چیست؟
Virtual Machine
یک محیط محاسباتی
ایزوله شده است
که از دید Software
شبیه یک Computer
مستقل رفتار می کند.
VM معمولاً دارای:
- Virtual CPU یا vCPU،
- Virtual Memory،
- Virtual Storage،
- Virtual Network Adapter،
- و سایر Virtual Deviceها
است.
Host و Guest چه هستند؟
در Virtualization
معمولاً دو اصطلاح
مهم وجود دارد.
Host
سیستم یا محیطی است
که منابع فیزیکی
را فراهم می کند.
Guest
Operating System
یا Environmentی است
که داخل VM
اجرا می شود.
Host
→
Hypervisor
→
Guest VM
Hypervisor چیست؟
Hypervisor
Hypervisor
لایه ای است
که Virtual Machineها
و دسترسی آنها
به منابع Hardware
را مدیریت می کند.
Hypervisor
باید منابعی مانند:
- CPU Time،
- Memory،
- Interruptها،
- Storage،
- Network،
- و Device Access
را بین VMها
مدیریت کند.
Type 1 Hypervisor چیست؟
Type 1 Hypervisor
مستقیماً روی
Hardware
یا در سطح بسیار نزدیک
به Hardware
اجرا می شود.
Hardware
↓
Hypervisor
↓
Virtual Machines
این معماری
معمولاً در:
- Serverها،
- Data Centerها،
- Cloud Infrastructure،
- و محیط های Enterprise
اهمیت زیادی دارد.
Type 2 Hypervisor چیست؟
Type 2 Hypervisor
روی یک Operating System
میزبان اجرا می شود.
Hardware
↓
Host Operating System
↓
Virtualization Software
↓
Guest VM
این مدل
برای:
- آموزش،
- Development،
- Software Testing،
- اجرای سیستم عامل دوم،
- و Labهای شخصی
بسیار رایج است.
| ویژگی | Type 1 | Type 2 |
|---|---|---|
| محل اجرا | روی Hardware یا لایه نزدیک به آن | روی Host OS |
| کاربرد رایج | Server و Data Center | Desktop، Development و Lab |
| ساختار | Hardware → Hypervisor → VM | Hardware → OS → Hypervisor → VM |
| تمرکز اصلی | Scale، Isolation و مدیریت Infrastructure | سادگی استفاده و محیط شخصی |
vCPU چیست؟
Virtual CPU
یا vCPU
CPU منطقی
ارائه شده
به Virtual Machine
است.
اگر به یک VM
چهار vCPU
اختصاص داده شود،
Guest OS
معمولاً چهار
Logical Processor
قابل استفاده
مشاهده می کند.
اما:
1 vCPU
≠
Necessarily 1 Dedicated Physical Core
Hypervisor
می تواند vCPUها
را روی Logical CPUهای
فیزیکی Schedule کند.
Hypervisor چگونه CPU را بین VMها تقسیم می کند؟
هر VM
ممکن است چند vCPU
داشته باشد.
Hypervisor Scheduler
تصمیم می گیرد
هر vCPU
چه زمانی
روی یک Physical Logical Processor
اجرا شود.
VM vCPU
→
Hypervisor Scheduler
→
Physical Logical CPU
این فرایند
از نظر مفهومی
شبیه Scheduling Threadها
توسط Operating System است،
اما یک لایه
Virtualization نیز
به آن اضافه شده است.
CPU Overcommit چیست؟
Hypervisor
می تواند مجموع vCPUهای
تعریف شده برای VMها
را بیشتر از تعداد
Logical CPUهای فیزیکی
در نظر بگیرد.
برای مثال:
Physical Logical CPUs = 16
Total Allocated vCPUs = 32
این وضعیت
الزاماً مشکل نیست،
اگر تمام VMها
همزمان CPU
زیادی درخواست نکنند.
اما Overcommit شدید
زیر Load همزمان
می تواند باعث:
- CPU Contention،
- Latency بیشتر،
- و کاهش Performance VMها
شود.
Privilege Level چیست؟
همه Softwareها
نباید اجازه داشته باشند
هر Instruction
یا Hardware Resource
را مستقیماً کنترل کنند.
CPU Architecture
سطوح دسترسی
یا Privilege Level
تعریف می کند.
Code با Privilege بالا
می تواند عملیات
حساس تری انجام دهد.
Ring 0 و Ring 3 چیست؟
در معماری x86
مفهوم Ring
برای Privilege Level
استفاده می شود.
در مدل رایج:
Ring 0
=
High Privilege
Ring 3
=
User Applications
Operating System Kernel
معمولاً در سطح
Privilege بالاتر
از Applicationهای عادی
اجرا می شود.
چرا اجرای Guest OS از نظر Privilege دشوار است؟
Guest Operating System
تصور می کند
Kernel آن
بالاترین سطح کنترل
را دارد.
اما در سیستم Virtualized،
Hypervisor
باید کنترل نهایی
Hardware
را حفظ کند.
Guest Thinks:
“I Control The Machine”
Hypervisor Must Ensure:
“You Control Only Your Virtual Machine”
حل کارآمد این مسئله
یکی از اهداف اصلی
Hardware-Assisted Virtualization
است.
Hardware-Assisted Virtualization چیست؟
CPUهای مدرن
Extensionهایی دارند
که اجرای Hypervisor
و Guest OS
را ساده تر
و کارآمدتر می کنند.
دو نام شناخته شده:
- Intel VT-x،
- AMD-V.
این فناوری ها
امکانات Architecture-Level
برای Virtualization
فراهم می کنند.
Intel VT-x چیست؟
Intel VT-x
مجموعه قابلیت های
Hardware Virtualization
در پردازنده های
پشتیبانی شده Intel است.
این قابلیت
به Hypervisor
اجازه می دهد
Guest OS
را با کمک
Mechanismهای سخت افزاری
کنترل کند.
AMD-V چیست؟
AMD-V
مجموعه قابلیت های
Virtualization
در پردازنده های
پشتیبانی شده AMD است.
هدف کلی
مشابه است:
فراهم کردن
Hardware Support
برای اجرای کارآمد
Virtual Machineها
و Hypervisor.
چرا گاهی Virtualization باید در BIOS یا UEFI فعال شود؟
ممکن است CPU
از Virtualization
پشتیبانی کند،
اما قابلیت مربوطه
در Firmware
غیرفعال باشد.
بسته به سیستم
گزینه هایی مانند:
- Intel Virtualization Technology،
- VT-x،
- SVM Mode،
- AMD-V
ممکن است
در BIOS یا UEFI
دیده شوند.
نام دقیق گزینه
به Manufacturer
و Firmware
بستگی دارد.
VM Entry و VM Exit چیست؟
هنگام اجرای
Virtual Machine،
CPU می تواند
بین Context مربوط
به Hypervisor
و Guest
جابه جا شود.
ورود به اجرای Guest
معمولاً با مفهوم:
VM Entry
و بازگشت کنترل
از Guest
به Hypervisor
با:
VM Exit
توصیف می شود.
چرا VM Exit رخ می دهد؟
بعضی Eventها
یا عملیات Guest
نیازمند دخالت
Hypervisor هستند.
بسته به Configuration
این موارد می توانند
شامل:
- بعضی Privileged Operationها،
- بعضی Interruptها،
- بعضی I/O Operationها،
- Access به Resourceهای کنترل شده،
- و Eventهای مشخص شده توسط Hypervisor
باشند.
Guest Running
→
Intercepted Event
→
VM Exit
→
Hypervisor
Trap در Virtualization چیست؟
Trap
به انتقال کنترل
در نتیجه
یک Event
یا Instruction خاص
اشاره می کند.
Hypervisor
می تواند برخی عملیات
Guest
را Intercept کند
و رفتار مناسب
را برای Virtual Machine
ایجاد کند.
چرا VM Exit می تواند Performance را کاهش دهد؟
VM Exit
رایگان نیست.
CPU باید
اجرای Guest
را متوقف کند،
State لازم
را مدیریت کند
و کنترل را
به Hypervisor
منتقل کند.
سپس برای ادامه Guest
دوباره VM Entry
انجام می شود.
Too Many VM Exits
→
More Virtualization Overhead
به همین دلیل
Hardware و Hypervisorهای مدرن
تلاش می کنند
عملیات رایج Guest
تا حد ممکن
بدون Exit غیرضروری
اجرا شوند.
Virtualization حافظه چرا پیچیده است؟
Guest OS
تصور می کند
Page Tableهای خودش
Memory را مدیریت می کنند.
اما Hypervisor
نیز باید مشخص کند
Memory مجازی Guest
در نهایت
به کدام Physical Memory
واقعی Host
متصل شود.
در نتیجه
چند سطح
Address Translation
وجود دارد.
Second-Level Address Translation چیست؟
CPUهای مدرن
قابلیت هایی دارند
که Translation
حافظه VM
را با کمک Hardware
انجام دهند.
این فناوری
به صورت کلی:
Second-Level Address Translation
=
SLAT
نامیده می شود.
دو نام رایج
در Platformهای x86:
- Intel EPT،
- AMD NPT.
Intel EPT چیست؟
EPT
مخفف:
Extended Page Tables
است.
EPT
Hardware Support
برای Translation
میان Address Space
مربوط به Guest
و Physical Memory
واقعی فراهم می کند.
AMD NPT چیست؟
NPT
معمولاً به:
Nested Page Tables
اشاره دارد.
هدف آن
Hardware-Assisted Translation
برای Memory Virtualization
در Platformهای AMD است.
آدرس حافظه در VM چگونه ترجمه می شود؟
به صورت ساده شده:
Guest Virtual Address
↓
Guest Physical Address
↓
Host Physical Address
Hardware Support
مانند EPT یا NPT
کمک می کند
این Translation
بسیار کارآمدتر
از روش های کاملاً
Software-Based
انجام شود.
TLB در Virtualization چه اهمیتی دارد؟
Address Translation
چندمرحله ای
می تواند هزینه
زیادی داشته باشد.
TLB
Translationهای اخیر
را Cache می کند
تا CPU مجبور نباشد
برای هر Memory Access
تمام مراحل Page Walk
را دوباره انجام دهد.
بنابراین TLB
در Performance
Virtualized Workloadها
اهمیت زیادی دارد.
Nested Virtualization چیست؟
Nested Virtualization
یعنی اجرای Hypervisor
داخل یک Virtual Machine.
ساختار مفهومی:
Physical Hardware
↓
Hypervisor L0
↓
VM / Hypervisor L1
↓
Nested VM L2
این قابلیت
در:
- Cloud Lab،
- Training،
- Hypervisor Development،
- CI/CD،
- و Test Environmentها
کاربرد دارد.
Virtualization و Emulation چه تفاوتی دارند؟
این دو مفهوم
یکسان نیستند.
در Virtualization،
Guest معمولاً
از Architecture
سازگار با Host
استفاده می کند
و بخش زیادی
از Instructionها
می توانند روی CPU واقعی
اجرا شوند.
در Emulation،
ممکن است Architecture
متفاوتی
شبیه سازی شود.
برای مثال:
x86 Host
→
Emulated ARM Machine
در این حالت
Instruction Translation
یا Simulation
بیشتری لازم است.
| ویژگی | Virtualization | Emulation |
|---|---|---|
| Architecture | معمولاً سازگار با Host | می تواند متفاوت باشد |
| اجرای Instruction | بخش زیادی می تواند مستقیم روی CPU اجرا شود | ممکن است Translation یا Simulation لازم باشد |
| Performance | معمولاً نزدیک تر به Native | معمولاً Overhead بیشتر |
| کاربرد | Server، Cloud، Lab و Isolation | اجرای Architecture یا Platform متفاوت |
Virtual Machine و Container چه تفاوتی دارند؟
VM
معمولاً Guest OS
مستقل خود را دارد.
Containerها
معمولاً Kernel
سیستم میزبان
را به اشتراک می گذارند
و Isolation
در سطح دیگری
انجام می شود.
VM:
Virtual Hardware
+
Guest OS
+
Applications
Container:
Shared Kernel
+
Isolated User Space
بنابراین Containerization
و Hardware Virtualization
مفاهیم مرتبط،
اما یکسان نیستند.
آیا Virtualization باعث افت Performance می شود؟
مقداری Overhead
ممکن است وجود داشته باشد،
اما مقدار آن
کاملاً به Workload
و Configuration
وابسته است.
عوامل مهم:
- VM Exit Frequency،
- Memory Translation،
- I/O Virtualization،
- CPU Scheduling،
- Resource Contention،
- NUMA Placement،
- Storage،
- Network،
- و Hypervisor Design.
آیا اختصاص vCPU بیشتر همیشه VM را سریع تر می کند؟
خیر.
افزایش vCPU
فقط زمانی مفید است
که Workload
بتواند از Parallelism
بیشتر استفاده کند
و Host
نیز منابع کافی
داشته باشد.
اختصاص بیش از حد vCPU
می تواند Scheduling
را دشوارتر کند
و در بعضی Workloadها
حتی Performance
را کاهش دهد.
Core Count در Virtualization چقدر مهم است؟
اگر چند VM
همزمان Workload
فعال داشته باشند،
Core Count
اهمیت زیادی پیدا می کند.
CPU با Core بیشتر
می تواند ظرفیت
بیشتری برای
اجرای همزمان vCPUها
فراهم کند.
اما Core Count
تنها معیار نیست.
باید مواردی مانند:
- Single-Core Performance،
- Memory Capacity،
- Memory Bandwidth،
- Cache،
- NUMA،
- I/O،
- و Power Budget
نیز بررسی شوند.
چرا RAM برای Virtualization بسیار مهم است؟
هر VM
معمولاً بخشی از
Memory سیستم
را مصرف می کند.
ممکن است CPU
هنوز ظرفیت زیادی
داشته باشد،
اما RAM
به محدودیت اصلی
تبدیل شود.
برای مثال:
4 VMs
×
8 GB RAM
=
32 GB
و Host
نیز برای خودش
Memory نیاز دارد.
بنابراین انتخاب سیستم
برای Virtualization
نباید فقط
براساس CPU باشد.
Storage چه تاثیری بر VM دارد؟
اگر چند VM
همزمان
Disk I/O
زیادی ایجاد کنند،
Storage
می تواند Bottleneck
شود.
Latency پایین
و Random I/O Performance
برای بسیاری از
Virtualized Workloadها
اهمیت زیادی دارد.
بنابراین SSD
و مخصوصاً Storage
مناسب Workload
می تواند تجربه VM
را به شکل محسوسی
تغییر دهد.
NUMA در Virtualization چه اهمیتی دارد؟
در سیستم های
Multi-Socket
یا Platformهای NUMA،
همه Memory Accessها
هزینه یکسانی ندارند.
اگر vCPU
روی یک NUMA Node
اجرا شود،
اما Memory آن
بیشتر در Node دیگری
قرار گرفته باشد،
Latency
می تواند افزایش یابد.
Local NUMA Memory
→
Lower Latency
Remote NUMA Memory
→
Higher Latency
به همین دلیل
NUMA Awareness
در Virtualization
Serverهای بزرگ
اهمیت زیادی دارد.
آیا Virtualization فقط مربوط به CPU است؟
خیر.
Deviceهای دیگر
نیز می توانند
Virtualize
یا به VM
اختصاص داده شوند.
برای مثال:
- Network Adapter،
- Storage Controller،
- USB Device،
- و GPU.
روش مورد استفاده
می تواند از
Device Emulation
تا Direct Assignment
متفاوت باشد.
IOMMU چیست و چه ارتباطی با Virtualization دارد؟
IOMMU
برای Memory Access
مربوط به I/O Deviceها
نقشی مشابه
Memory Management Unit
برای CPU
ایفا می کند.
در Virtualization
این قابلیت
می تواند به Isolation
و Device Assignment
کمک کند.
در Platformهای مختلف
نام هایی مانند:
- Intel VT-d،
- AMD IOMMU / AMD-Vi
دیده می شوند.
خیر.
به صورت ساده:
VT-x
→
CPU Virtualization
VT-d
→
I/O Virtualization / Device Assignment Support
این دو قابلیت
اهداف متفاوتی دارند،
هرچند هر دو
در Virtualized Platformها
مهم هستند.
Virtualization در چه کارهایی استفاده می شود؟
- اجرای چند Server روی یک سیستم فیزیکی.
- Cloud Computing.
- Development Environment.
- Software Testing.
- Cybersecurity Lab.
- Network Lab.
- اجرای Linux داخل Windows یا برعکس.
- آموزش System Administration.
- Testing سیستم عامل.
- Legacy Software Environment.
- Infrastructure Consolidation.
- Disaster Recovery.
- Sandboxing بعضی Workloadها.
- CI/CD Infrastructure.
- Virtual Desktop Infrastructure.
برای خرید سیستم استوک جهت Virtualization چه CPUای مناسب است؟
ابتدا باید
نوع Workload
مشخص شود.
برای Lab سبک
ممکن است
یک CPU چند هسته ای
معمولی
کاملاً کافی باشد.
اما برای:
- چند VM همزمان،
- Server Lab،
- Active Directory Lab،
- Network Simulation،
- Development Environment،
- Database VM،
- یا Nested Virtualization
منابع بیشتری
لازم خواهد بود.
هنگام انتخاب سیستم برای Virtualization چه مواردی را بررسی کنیم؟
- تعداد Core و Thread پردازنده را بررسی کنید.
- پشتیبانی CPU از Hardware Virtualization را بررسی کنید.
- فعال بودن Virtualization در BIOS/UEFI را بررسی کنید.
- حداکثر ظرفیت RAM سیستم را بررسی کنید.
- تعداد Slotهای RAM را بررسی کنید.
- Memory Bandwidth را متناسب با Workload در نظر بگیرید.
- SSD و ظرفیت Storage را بررسی کنید.
- برای VMهای متعدد Random I/O را جدی بگیرید.
- در Server و Workstation به NUMA توجه کنید.
- در صورت نیاز به Passthrough، IOMMU را بررسی کنید.
- پشتیبانی Hypervisor مورد نظر از Hardware را بررسی کنید.
- Cooling را برای Load طولانی بررسی کنید.
- Power Consumption را در سیستم های همیشه روشن در نظر بگیرید.
- برای سیستم استوک Stability Test انجام دهید.
لپ تاپ، Desktop، Workstation یا Server؛ کدام برای Virtualization بهتر است؟
| Platform | مزیت اصلی | محدودیت رایج | کاربرد مناسب |
|---|---|---|---|
| Laptop | قابل حمل و کم مصرف | RAM، Cooling و Upgrade محدودتر | Lab سبک و Development |
| Desktop | ارتقاپذیری و قیمت مناسب | ظرفیت کمتر از Serverهای بزرگ | Home Lab و چند VM متوسط |
| Workstation | Core، RAM و Expansion بیشتر | مصرف و قیمت بالاتر | Lab حرفه ای و Workload سنگین |
| Server | ظرفیت، RAS و مدیریت حرفه ای | Noise، Power و Complexity | Virtualization گسترده و Infrastructure |
| Mini PC | مصرف پایین و ابعاد کوچک | Expansion محدود | Home Lab کم مصرف و Cluster کوچک |
زیرساخت فنی — وقتی یک Instruction داخل VM اجرا می شود چه اتفاقی می افتد؟
تصور کنید
یک Application
داخل Guest OS
در حال اجراست.
بسیاری از Instructionهای عادی
می توانند مستقیماً
توسط CPU واقعی
اجرا شوند.
Guest Application
↓
Guest OS
↓
Virtual CPU
↓
Physical CPU
اگر Guest
عملیاتی انجام دهد
که Hypervisor
آن را Intercept
کرده باشد،
CPU می تواند
اجرای Guest
را متوقف کند.
Guest Instruction
↓
Intercept Condition
↓
VM Exit
↓
Hypervisor
Hypervisor
وضعیت را بررسی می کند
و عملیات لازم
را انجام می دهد.
سپس:
Hypervisor
↓
VM Entry
↓
Guest Continues
هرچه تعداد
این Transitionها
کمتر باشد،
امکان نزدیک شدن
Performance VM
به Native Execution
بیشتر می شود.
Memory Access
نیز ممکن است
از Translation
چندمرحله ای عبور کند:
Guest Virtual Address
↓
Guest Page Tables
↓
Guest Physical Address
↓
EPT / NPT
↓
Host Physical Memory
TLB
بسیاری از Translationهای
اخیر را نگه می دارد
تا این مسیر
برای هر Access
از ابتدا طی نشود.
فرض کنید
یک Workstation
پردازنده 16 هسته ای
بسیار قدرتمندی دارد،
اما فقط
16GB RAM
روی آن نصب شده است.
اگر هر VM
به 8GB RAM
نیاز داشته باشد،
محدودیت اصلی
خیلی زود
Memory خواهد شد.
در سیستم دیگری
ممکن است RAM کافی باشد،
اما Storage
هنگام اجرای چند VM
به Bottleneck
تبدیل شود.
Virtualization Capacity
≠
CPU Performance Alone
ظرفیت واقعی
حاصل تعادل میان:
CPU
+
RAM
+
Storage
+
Network
+
I/O
است.
کند بودن VM
همیشه به معنی
ضعیف بودن CPU
نیست.
برای مثال:
Too Many vCPUs
→
Scheduling Contention
Low RAM
→
Memory Pressure
Slow Storage
→
High I/O Latency
Poor NUMA Placement
→
Remote Memory Access
Frequent VM Exits
→
CPU Overhead
بنابراین Performance Analysis
در Virtualization
باید کل Platform
را بررسی کند.
- فرض اینکه یک vCPU همیشه برابر یک Physical Core اختصاصی است.
- اختصاص vCPU زیاد به هر VM بدون نیاز واقعی.
- نادیده گرفتن RAM هنگام انتخاب CPU.
- نادیده گرفتن Storage Performance.
- اشتباه گرفتن Virtualization با Emulation.
- اشتباه گرفتن VM با Container.
- یکسان دانستن VT-x و VT-d.
- فرض اینکه وجود VT-x به معنی فعال بودن آن در BIOS است.
- نادیده گرفتن AMD-V یا SVM در Platformهای AMD.
- نادیده گرفتن EPT یا NPT در Workloadهای VM.
- فرض اینکه Core Count تنها معیار CPU برای Virtualization است.
- نادیده گرفتن Single-Core Performance.
- نادیده گرفتن NUMA در Workstation و Server.
- Overcommit شدید بدون بررسی CPU Utilization.
- نادیده گرفتن I/O Bottleneck.
- فرض اینکه Virtualization هیچ Overheadی ندارد.
- فرض اینکه VM همیشه بسیار کندتر از Native است.
- نادیده گرفتن Hypervisor Compatibility.
- نادیده گرفتن Cooling در Server یا Workstation تحت Load طولانی.
- خرید CPU بسیار قوی همراه با RAM ناکافی برای VMها.
سوالات متداول درباره CPU و Virtualization
VT-x چیست؟
مجموعه قابلیت های
Hardware Virtualization
در پردازنده های
پشتیبانی شده Intel است.
AMD-V چیست؟
مجموعه قابلیت های
Hardware Virtualization
در پردازنده های
پشتیبانی شده AMD است.
آیا برای Virtual Machine حتماً باید Virtualization در BIOS فعال باشد؟
بسیاری از Hypervisorها
و قابلیت های مدرن
به Hardware Virtualization
نیاز دارند یا
با فعال بودن آن
عملکرد و قابلیت های
بسیار بهتری ارائه می دهند.
آیا vCPU همان Core است؟
خیر.
vCPU یک Processor
منطقی ارائه شده
به VM است
که Hypervisor
آن را روی منابع CPU
فیزیکی Schedule می کند.
آیا vCPU بیشتر همیشه بهتر است؟
خیر.
Workload باید
بتواند از Parallelism
استفاده کند
و Host نیز
ظرفیت کافی داشته باشد.
برای Virtualization تعداد Core مهم تر است یا RAM؟
هر دو مهم هستند
و Bottleneck
به Workload بستگی دارد.
در محیط های دارای
VMهای متعدد،
RAM اغلب یکی از
اولین محدودیت های
عملی سیستم است.
Nested Virtualization چیست؟
اجرای یک Hypervisor
داخل Virtual Machine
و سپس اجرای VM دیگری
درون آن است.
Virtualization و Emulation یکی هستند؟
خیر.
Virtualization
معمولاً از Hardware
سازگار Host
برای اجرای Guest
استفاده می کند،
در حالی که Emulation
می تواند Architecture
متفاوتی را شبیه سازی کند.
واژه های جدید این فصل برای واژه نامه نهایی کتاب
- Virtualization: مجازی سازی منابع Hardware برای ایجاد محیط های مستقل.
- Virtual Machine: سیستم محاسباتی مجازی و ایزوله شده.
- Hypervisor: لایه مدیریت Virtual Machineها و منابع Hardware.
- Host: سیستم یا محیط فراهم کننده منابع فیزیکی.
- Guest: سیستم عامل یا Environment داخل VM.
- vCPU: CPU منطقی ارائه شده به Virtual Machine.
- CPU Overcommit: تخصیص مجموع vCPU بیشتر از Logical CPUهای فیزیکی.
- Privilege Level: سطح مجوز اجرای عملیات حساس در CPU.
- VM Entry: انتقال CPU به اجرای Guest.
- VM Exit: بازگشت کنترل از Guest به Hypervisor.
- VT-x: فناوری Hardware Virtualization پردازنده های Intel.
- AMD-V: فناوری Hardware Virtualization پردازنده های AMD.
- SLAT: Second-Level Address Translation.
- EPT: Extended Page Tables در Intel.
- NPT: Nested Page Tables در AMD.
- Nested Virtualization: اجرای Hypervisor داخل VM.
- Emulation: شبیه سازی Hardware یا Architecture در Software یا ترکیبی از Software و Hardware.
- IOMMU: واحد مدیریت Address Translation و Isolation برای I/O Deviceها.
- VT-d: فناوری Intel برای قابلیت های مرتبط با I/O Virtualization.
- NUMA: معماری حافظه با Latency متفاوت براساس محل CPU و Memory.
خلاصه فصل
Virtualization
اجازه می دهد
چند Environment مستقل
روی یک سیستم فیزیکی
اجرا شوند.
Hypervisor
منابع:
- CPU،
- Memory،
- Storage،
- Network،
- و I/O
را میان VMها
مدیریت می کند.
Hardware Support
مانند:
Intel VT-x
/
AMD-V
اجرای Guest OS
را کارآمدتر می کند.
EPT و NPT
نیز برای
Memory Virtualization
اهمیت زیادی دارند.
Performance VM
فقط به قدرت CPU
وابسته نیست.
VM Performance
=
CPU
+
Memory
+
Storage
+
I/O
+
Hypervisor
+
Workload
در سیستم های بزرگ تر
NUMA،
CPU Scheduling
و Resource Contention
نیز اهمیت زیادی پیدا می کنند.
برای انتخاب یک سیستم مناسب Virtualization،
تعداد Core را به تنهایی معیار قرار ندهید؛
ظرفیت RAM، سرعت Storage، قابلیت های Virtualization،
I/O، Cooling و نوع Workload باید در کنار CPU بررسی شوند.
CPU فقط محاسبه نمی کند؛ یکی از مهم ترین اجزای اجرای مرزهای امنیتی سیستم نیز هست
امنیت پردازنده چگونه کار می کند و CPU چگونه از سیستم محافظت می کند؟
اگر تمام برنامه های یک سیستم
اجازه داشتند هر بخش از Memory،
هر Device
و هر Instruction حساسی را
بدون محدودیت استفاده کنند،
جداسازی امن برنامه ها
تقریباً غیرممکن می شد.
CPUهای مدرن مجموعه بزرگی از
Mechanismهای سخت افزاری دارند
که Operating System
از آنها برای ایجاد
مرزهای امنیتی استفاده می کند.
CPU Security
=
Privilege
+
Isolation
+
Memory Protection
+
Access Control
+
Execution Control
در این فصل چه چیزهایی یاد می گیریم؟
- Privilege Level چیست.
- User Mode و Kernel Mode چه تفاوتی دارند.
- Ringهای x86 چه هستند.
- Privileged Instruction چیست.
- System Call چگونه مرز User و Kernel را عبور می دهد.
- Memory Protection چگونه انجام می شود.
- Page Permission چیست.
- Read / Write / Execute Permission چه معنایی دارد.
- NX و XD Bit چه هستند.
- DEP چیست.
- SMEP و SMAP چه هستند.
- Supervisor و User Page چه تفاوتی دارند.
- Memory Isolation چرا مهم است.
- ASLR چه ارتباطی با CPU و Memory Management دارد.
- TEE چیست.
- Trusted Execution Environment چه کاربردی دارد.
- Secure Enclave چیست.
- Secure Boot چه ارتباطی با زنجیره اعتماد دارد.
- Side-Channel Attack چیست.
- Spectre و Meltdown در سطح مفهومی چه هستند.
- چرا Performance Optimization گاهی پیامد امنیتی دارد.
Security Boundary چیست؟
مرز امنیتی — Security Boundary
Security Boundary
مرزی منطقی یا سخت افزاری است
که مشخص می کند
چه Componentی
به چه Resourceهایی
اجازه دسترسی دارد.
برای مثال
یک Application عادی
نباید بتواند
Memory مربوط به Kernel
را آزادانه بخواند.
Application A
≠
Unlimited Access
To
Application B / Kernel
Privilege چیست؟
Privilege
مشخص می کند
Code در حال اجرا
چه سطحی از اختیار
روی سیستم دارد.
عملیات حساس
معمولاً فقط
در سطح Privilege مناسب
قابل انجام هستند.
این کار مانع می شود
یک Application معمولی
مستقیماً کنترل کامل
Hardware
را به دست بگیرد.
User Mode و Kernel Mode چه تفاوتی دارند؟
Applicationهای معمولی
عمدتاً در User Mode
اجرا می شوند.
Operating System Kernel
در سطح Privilege بالاتری
اجرا می شود.
| ویژگی | User Mode | Kernel Mode |
|---|---|---|
| سطح دسترسی | محدود | بسیار بالا |
| Application عادی | بله | معمولاً خیر |
| دسترسی مستقیم به منابع حساس | محدود | بسته به Architecture و OS گسترده تر |
| خرابی Code | معمولاً محدودتر | می تواند کل سیستم را تحت تاثیر قرار دهد |
Ringهای امنیتی در x86 چیستند؟
معماری x86
چند Privilege Level
تعریف می کند
که معمولاً با Ring
بیان می شوند.
Ring 0
→
Highest Privilege
Ring 3
→
Lowest Traditional x86 Privilege
Operating Systemهای مدرن
عمدتاً Kernel
را در Ring 0
و Applicationهای User
را در Ring 3
اجرا می کنند.
Privileged Instruction چیست؟
بعضی Instructionها
می توانند وضعیت حساس
Processor یا سیستم
را تغییر دهند.
اجرای چنین Instructionهایی
برای Code عادی
محدود می شود.
اگر Application
بتواند آزادانه
تمام عملیات Privileged
را انجام دهد،
Isolation
میان Application
و Operating System
از بین می رود.
اگر Application دسترسی محدودی دارد، چگونه از خدمات Kernel استفاده می کند؟
Application
برای انجام بسیاری از عملیات
از Operating System
درخواست سرویس می کند.
این درخواست
از مسیر کنترل شده ای
مانند System Call
انجام می شود.
User Application
↓
System Call
↓
Kernel
↓
Validation
↓
Requested Operation
بنابراین Application
به جای کنترل مستقیم
Hardware،
از Kernel
درخواست انجام عملیات
را می کند.
CPU چگونه Memory را محافظت می کند؟
Memory Management Unit
فقط برای ترجمه Address
استفاده نمی شود.
Page Tableها
می توانند اطلاعات
Permission
نیز داشته باشند.
CPU هنگام Memory Access
بررسی می کند
آیا Access
با Permissionهای Page
سازگار است یا خیر.
Page Permission چیست؟
Memory Pageها
می توانند Permissionهای
متفاوتی داشته باشند.
برای مثال:
- Readable،
- Writable،
- Executable،
- User Accessible،
- Supervisor Only.
ترکیب این Permissionها
یکی از پایه های
Memory Protection
در سیستم مدرن است.
Read، Write و Execute چه تفاوتی دارند؟
| Permission | معنا |
|---|---|
| Read | خواندن Data از Memory |
| Write | تغییر Data موجود در Memory |
| Execute | اجرای Instruction از آن Memory Region |
نکته مهم این است
که Data
الزاماً نباید
Executable باشد.
NX یا XD Bit چیست؟
No-Execute / Execute Disable
NX یا XD
به سیستم اجازه می دهد
بعضی Memory Pageها
به عنوان غیرقابل اجرا
علامت گذاری شوند.
در نتیجه
CPU می تواند
اجازه خواندن یا نوشتن
Data را بدهد،
اما اجرای Instruction
از همان Region
را ممنوع کند.
Data Page
=
Read / Write
+
No Execute
چرا NX مهم است؟
اگر Data
وارد یک Memory Buffer شود،
نباید لزوماً
بتوان آن را
به عنوان Machine Code
اجرا کرد.
NX
اجرای Code
از Memory Regionهایی
را که برای Data
در نظر گرفته شده اند
محدود می کند.
این مکانیزم
به تنهایی
تمام حملات Memory Corruption
را متوقف نمی کند،
اما یکی از لایه های
مهم دفاعی است.
DEP چیست؟
DEP
مخفف:
Data Execution Prevention
است.
Operating System
می تواند با استفاده
از قابلیت های Hardware
مانند NX/XD
اجرای Code
از بعضی Memory Regionها
را محدود کند.
چرا سیاست Write XOR Execute مهم است؟
یک اصل امنیتی رایج
این است که
Memory Region
تا حد امکان
همزمان Writable
و Executable نباشد.
Writable
XOR
Executable
هدف این است
که مهاجم نتواند
به سادگی Code
را در Memory بنویسد
و همان Memory
را اجرا کند.
User Page و Supervisor Page چه تفاوتی دارند؟
Page Table
می تواند مشخص کند
یک Page
برای User Mode
قابل دسترسی است
یا فقط Code
با Privilege بالاتر
باید به آن
دسترسی داشته باشد.
User Page
→
User Access Possible
Supervisor Page
→
Privileged Access
SMEP چیست؟
SMEP
مخفف:
Supervisor Mode Execution Prevention
است.
این قابلیت
برای جلوگیری از اجرای
Code موجود در
User-Space Pageها
توسط Supervisor Mode
طراحی شده است.
هدف این است
که حتی اگر مهاجم
بتواند Control Flow
سطح Kernel
را منحرف کند،
اجرای مستقیم
Code قرار گرفته
در User Space
دشوارتر شود.
SMAP چیست؟
SMAP
مخفف:
Supervisor Mode Access Prevention
است.
SMAP
دسترسی Supervisor Mode
به User-Space Memory
را محدود می کند،
مگر زمانی که Kernel
به صورت کنترل شده
چنین دسترسی ای
را مجاز کند.
| قابلیت | تمرکز اصلی |
|---|---|
| NX / XD | جلوگیری از اجرای Code از Pageهای غیرقابل اجرا |
| SMEP | جلوگیری از اجرای User-Space Code توسط Supervisor |
| SMAP | محدود کردن Access سطح Supervisor به User-Space Data |
ASLR چیست و چه ارتباطی با CPU دارد؟
ASLR
مخفف:
Address Space Layout Randomization
است.
ASLR
یک تکنیک عمدتاً
Software / OS-Level
است که محل قرارگیری
بخش های مختلف
Address Space
را تغییر می دهد.
CPU
ASLR را به تنهایی
ایجاد نمی کند،
اما Virtual Memory
و Address Translation
سخت افزاری
زیرساخت لازم
برای چنین تکنیک هایی
را فراهم می کنند.
چرا یک قابلیت امنیتی به تنهایی کافی نیست؟
Security
معمولاً بر پایه
Defense in Depth
طراحی می شود.
یعنی چند لایه
مستقل یا نیمه مستقل
کنار هم قرار می گیرند.
Privilege Separation
+
NX
+
SMEP
+
SMAP
+
ASLR
+
OS Mitigations
=
Stronger Defense
عبور از یک لایه
نباید الزاماً
به معنی کنترل کامل
سیستم باشد.
Trusted Execution Environment یا TEE چیست؟
Trusted Execution Environment
TEE
محیطی با Isolation
و ویژگی های امنیتی
ویژه است
که برای محافظت
از Code یا Data حساس
طراحی می شود.
هدف کلی
ایجاد محیطی است
که حتی در حضور
Softwareهای دیگر
بتواند سطح مشخصی
از Confidentiality
یا Integrity
را حفظ کند.
Secure Enclave چیست؟
واژه Enclave
در بعضی فناوری ها
به Environment
یا Memory Region
محافظت شده ای
اشاره دارد
که برای اجرای
عملیات حساس
طراحی شده است.
پیاده سازی دقیق
میان Vendorها
و Architectureها
متفاوت است.
بنابراین:
“Secure Enclave”
≠
One Universal CPU Mechanism
Confidential Computing چیست؟
یکی از جهت گیری های
مهم سیستم های مدرن
محافظت از Data
نه فقط هنگام Storage
یا Network Transfer،
بلکه هنگام Processing
است.
این حوزه
معمولاً با مفهوم:
Data in Use Protection
مرتبط است.
Hardware Isolation
و قابلیت های امنیتی CPU
می توانند
بخشی از زیرساخت
Confidential Computing
باشند.
Secure Boot چیست و آیا قابلیت CPU است؟
Secure Boot
صرفاً یک قابلیت
داخل CPU نیست.
این مفهوم
بخشی از زنجیره
Boot Security
سیستم است
و Firmware،
Platform
و Cryptographic Verification
در آن نقش دارند.
هدف کلی
جلوگیری از اجرای
Boot Componentهای
غیرمجاز
یا دستکاری شده است.
Chain of Trust چیست؟
در یک Chain of Trust،
هر مرحله
قبل از واگذاری کنترل
به مرحله بعد،
اعتبار آن را
بررسی می کند.
Trusted Root
↓
Firmware
↓
Bootloader
↓
Operating System
↓
Security Services
جزئیات واقعی
به Platform
و Architecture
بستگی دارد.
چرا Speculative Execution وارد بحث امنیت CPU شد؟
CPUهای مدرن
برای افزایش Performance
تلاش می کنند
Instructionهای آینده
را پیش بینی
و زودتر اجرا کنند.
اگر Prediction
اشتباه باشد،
نتیجه معماری
عملیات اشتباه
کنار گذاشته می شود.
اما تحقیقات امنیتی
نشان دادند
بعضی اثرهای
Microarchitectural
ممکن است پس از
Speculation باقی بمانند
و از طریق Side Channel
قابل مشاهده باشند.
Side-Channel Attack چیست؟
حمله کانال جانبی — Side-Channel Attack
در Side-Channel Attack
مهاجم به جای
خواندن مستقیم
Secret،
اثرهای جانبی
محاسبه را اندازه گیری
یا تحلیل می کند.
این اثرها
می توانند شامل:
- Timing،
- Cache Behavior،
- Branch Predictor State،
- Power Consumption،
- Electromagnetic Effects،
- یا سایر نشانه های جانبی
باشند.
Cache چگونه می تواند اطلاعات جانبی ایجاد کند؟
Cache Hit
معمولاً سریع تر
از Cache Miss است.
Cache Hit
→
Low Latency
Cache Miss
→
Higher Latency
بنابراین Timing
بعضی Memory Accessها
می تواند اطلاعاتی
درباره وضعیت Cache
آشکار کند.
همین تفاوت زمانی
یکی از پایه های
برخی Cache Side Channelهاست.
Spectre چیست؟
Spectre
نام خانواده ای
از ضعف های
Microarchitectural
مرتبط با
Speculative Execution
و Prediction
است.
ایده اصلی
در سطح مفهومی
این است که
Speculative Execution
می تواند اثری
روی Microarchitectural State
باقی بگذارد.
سپس این اثر
ممکن است
از طریق Side Channel
اطلاعاتی را
آشکار کند.
Speculation
→
Microarchitectural Effect
→
Side Channel
→
Information Leakage
Meltdown چیست؟
Meltdown
یک کلاس مشهور
از آسیب پذیری های
Microarchitectural
است که نشان داد
در بعضی Processorها
رفتار اجرای گذرا
می تواند
با مرزهای
Memory Privilege
تعامل خطرناکی داشته باشد.
تفاوت دقیق
Meltdown و Spectre
پیچیده است،
اما در سطح آموزشی:
Spectre
→
Manipulating Speculation / Prediction
Meltdown
→
Transient Execution Across Certain Privilege Boundaries
Architectural State و Microarchitectural State چه تفاوتی دارند؟
Architectural State
بخشی از وضعیت CPU است
که Architecture
به Software
تعریف و نمایش می دهد.
Microarchitectural State
شامل جزئیات داخلی
Implementation
مانند برخی وضعیت های:
- Cache،
- Predictor،
- Execution Structures،
- و Bufferهای داخلی
است.
Speculative Result
ممکن است از
Architectural State
حذف شود،
اما بعضی اثرهای
Microarchitectural
می توانند
قابل مشاهده باقی بمانند.
آسیب پذیری های CPU چگونه Mitigate می شوند؟
Mitigation
می تواند در چند سطح
انجام شود.
- Microcode Update،
- Firmware Update،
- Operating System Update،
- Compiler Technique،
- Application Change،
- Hypervisor Update،
- و تغییرات Microarchitecture در نسل های جدید.
بنابراین Security
فقط ویژگی خود Silicon
نیست.
Platform Security
=
CPU
+
Firmware
+
OS
+
Hypervisor
+
Software
+
Configuration
Microcode Update چه نقشی در امنیت CPU دارد؟
در برخی Processorها
بخشی از رفتار داخلی
می تواند از طریق
Microcode Update
اصلاح یا کنترل شود.
Vendor
ممکن است برای:
- Errata،
- Security Mitigation،
- یا تغییر بعضی رفتارهای داخلی
Microcode جدید
منتشر کند.
Microcode
می تواند از طریق
BIOS/UEFI
یا در بعضی Platformها
هنگام Boot توسط OS
Load شود.
آیا Security Mitigation می تواند Performance را کاهش دهد؟
بله،
بعضی Mitigationها
می توانند Overhead
ایجاد کنند.
مقدار اثر
به:
- CPU Generation،
- نوع Vulnerability،
- Operating System،
- Workload،
- Hypervisor،
- و نوع Mitigation
بستگی دارد.
بنابراین نمی توان
یک درصد ثابت
برای همه سیستم ها
اعلام کرد.
آیا پردازنده قدیمی از نظر امنیتی لزوماً ناامن است؟
سن CPU
به تنهایی
پاسخ این سوال را
مشخص نمی کند.
باید بررسی شود:
- CPU هنوز Microcode Update دریافت می کند یا خیر.
- Firmware سیستم به روز است یا خیر.
- Operating System از CPU پشتیبانی می کند یا خیر.
- قابلیت های امنیتی مورد نیاز وجود دارند یا خیر.
- Vulnerabilityهای شناخته شده چه Mitigationهایی دارند.
- نوع استفاده سیستم چیست.
برای یک سیستم Offline
با یک Server عمومی اینترنتی،
Threat Model
یکسان نیست.
هنگام خرید سیستم استوک از نظر امنیت CPU چه چیزهایی مهم هستند؟
- مدل دقیق CPU را شناسایی کنید.
- نسل و Architecture پردازنده را مشخص کنید.
- وضعیت پشتیبانی سیستم عامل مورد نظر را بررسی کنید.
- آخرین BIOS/UEFI قابل ارائه برای دستگاه را بررسی کنید.
- وجود Firmware Updateهای امنیتی را بررسی کنید.
- فعال بودن NX/XD را بررسی کنید.
- در صورت نیاز قابلیت های Virtualization Security را بررسی کنید.
- Secure Boot را متناسب با Platform بررسی کنید.
- TPM و قابلیت های امنیتی Platform را جدا از CPU بررسی کنید.
- برای کاربردهای حساس فقط Benchmark را معیار خرید قرار ندهید.
- دوره پشتیبانی Vendor را در نظر بگیرید.
- Threat Model واقعی کاربر را مشخص کنید.
چرا Security و Performance گاهی با یکدیگر در تنش هستند؟
بسیاری از تکنیک های
Performance
تلاش می کنند
محدودیت زمان
و انتظار را کاهش دهند.
برای مثال:
- Speculative Execution،
- Out-of-Order Execution،
- Cache Sharing،
- Simultaneous Multithreading،
- و Prediction.
این قابلیت ها
Performance بسیار زیادی
ایجاد کرده اند،
اما Complexity
بیشتر می تواند
سطح حمله جدیدی
نیز ایجاد کند.
More Optimization
→
More Microarchitectural State
→
Potential New Security Interactions
زیرساخت فنی — وقتی یک برنامه به Memory غیرمجاز دسترسی پیدا می کند چه اتفاقی می افتد؟
تصور کنید
Application
در User Mode
در حال اجراست.
برنامه تلاش می کند
به Virtual Address
خاصی دسترسی پیدا کند.
Application
↓
Virtual Address
↓
TLB / Page Table Translation
CPU فقط Translation
را بررسی نمی کند.
Permissionهای Page
نیز بررسی می شوند.
Page Present?
↓
User Access Allowed?
↓
Read / Write Allowed?
↓
Execute Allowed?
اگر Access
با Permissionها
سازگار باشد،
عملیات ادامه پیدا می کند.
اگر Permission
اجازه ندهد:
Illegal Access
↓
CPU Exception
↓
Operating System
سپس OS
براساس شرایط
تصمیم می گیرد
چگونه با Fault
برخورد کند.
بنابراین Memory Protection
صرفاً یک قرارداد
نرم افزاری نیست.
CPU
در اجرای این مرز
نقش مستقیم دارد.
وجود یک قابلیت
در Datasheet پردازنده
به این معنی نیست
که سیستم عملاً
از آن استفاده می کند.
برای مثال
ممکن است CPU
قابلیت امنیتی مشخصی
داشته باشد،
اما:
- Firmware آن را فعال نکرده باشد،
- OS از آن استفاده نکند،
- Configuration آن را غیرفعال کرده باشد،
- یا Software Stack قدیمی باشد.
Hardware Capability
≠
Effective Protection
حفاظت واقعی
نتیجه همکاری
تمام Platform است.
بعضی Security Mechanismها
تقریباً اثر قابل توجهی
روی Workload عادی ندارند.
اما برخی Mitigationها
می توانند:
- Context Transition را گران تر کنند،
- Speculation را محدود کنند،
- Cache Behavior را تغییر دهند،
- یا Synchronization بیشتری ایجاد کنند.
اثر واقعی
باید با Benchmark
مناسب همان Workload
اندازه گیری شود.
Security Cost
Is
Workload Dependent
- فرض اینکه Antivirus جایگزین Hardware Security است.
- فرض اینکه Hardware Security جایگزین OS Security است.
- یکسان دانستن User Mode و Kernel Mode.
- فرض اینکه Kernel هیچ محدودیت سخت افزاری ندارد.
- نادیده گرفتن Page Permissionها.
- اشتباه گرفتن Read Permission با Execute Permission.
- فرض اینکه Data باید همیشه Executable باشد.
- غیرفعال کردن NX/XD بدون دلیل فنی.
- یکسان دانستن NX، SMEP و SMAP.
- فرض اینکه ASLR یک قابلیت مستقل داخل CPU است.
- یکسان دانستن Secure Boot با CPU Security.
- یکسان دانستن TPM با CPU.
- فرض اینکه Secure Enclave یک فناوری واحد در تمام CPUهاست.
- فرض اینکه Spectre و Meltdown دقیقاً یک آسیب پذیری هستند.
- فرض اینکه Speculative Execution ذاتاً یک قابلیت مخرب است.
- نادیده گرفتن Microcode Update.
- نادیده گرفتن BIOS/UEFI Update.
- نادیده گرفتن OS Update.
- قضاوت امنیت فقط براساس سال تولید CPU.
- قضاوت امنیت فقط براساس Benchmark پردازنده.
لایه های مختلف امنیت سیستم در یک نگاه
| لایه | نمونه قابلیت | وظیفه کلی |
|---|---|---|
| CPU | Privilege، NX، SMEP، SMAP | اجرای محدودیت های سخت افزاری |
| Memory Management | Page Permissions | کنترل Access به Memory |
| Firmware | Secure Boot Infrastructure | کنترل زنجیره Boot |
| Operating System | ASLR، DEP، Isolation | اعمال Policy امنیتی |
| Microcode | CPU Mitigations | اصلاح یا کنترل برخی رفتارهای Processor |
| Application | Sandbox، Validation | کاهش سطح حمله Software |
سوالات متداول درباره امنیت پردازنده
NX یا XD چیست؟
قابلیتی برای علامت گذاری
بعضی Memory Pageها
به عنوان غیرقابل اجراست
تا CPU اجازه اجرای
Instruction از آنها را ندهد.
آیا DEP همان NX است؟
دقیقاً نه.
DEP یک مکانیزم
در سطح سیستم عامل است
که می تواند از قابلیت
Hardware NX/XD
برای جلوگیری از اجرای
Code از Data Pageها
استفاده کند.
SMEP چیست؟
مکانیزمی برای جلوگیری
از اجرای Code
موجود در User-Space Pageها
توسط Supervisor Mode است.
SMAP چیست؟
مکانیزمی برای محدود کردن
Access سطح Supervisor
به Memory مربوط
به User Space است.
آیا Secure Boot داخل CPU قرار دارد؟
Secure Boot
یک قابلیت صرفاً CPU-Level نیست
و بخشی از معماری امنیتی
Firmware و Platform است.
Spectre چیست؟
خانواده ای از ضعف های
Microarchitectural
مرتبط با Speculative Execution
و Side Channelهاست.
Meltdown و Spectre یکی هستند؟
خیر.
هر دو با رفتارهای
Microarchitectural
و اجرای گذرا مرتبط هستند،
اما Mechanism
و شرایط Exploitation
آنها یکسان نیست.
آیا Update BIOS برای امنیت CPU مهم است؟
بله.
Firmware Update
می تواند شامل
Microcode Update
یا تغییرات امنیتی
مرتبط با Platform باشد.
واژه های جدید این فصل برای واژه نامه نهایی کتاب
- Security Boundary: مرز کنترل دسترسی میان اجزای سیستم.
- Privilege: سطح اختیار Code در سیستم.
- User Mode: محیط اجرای محدود Applicationها.
- Kernel Mode: سطح اجرای دارای Privilege بالا برای Kernel.
- Privileged Instruction: Instruction دارای محدودیت سطح دسترسی.
- System Call: مسیر کنترل شده درخواست سرویس از Kernel.
- Memory Protection: محدود کردن Access به Memory براساس Permission.
- NX: No-Execute.
- XD: Execute Disable.
- DEP: Data Execution Prevention.
- SMEP: Supervisor Mode Execution Prevention.
- SMAP: Supervisor Mode Access Prevention.
- ASLR: Address Space Layout Randomization.
- TEE: Trusted Execution Environment.
- Side Channel: استخراج اطلاعات از اثرهای جانبی محاسبه.
- Microarchitectural State: وضعیت داخلی Implementation پردازنده.
- Transient Execution: اجرای موقتی که الزاماً Commit نمی شود.
- Spectre: خانواده ای از ضعف های مرتبط با Speculation و Side Channel.
- Meltdown: کلاس آسیب پذیری مرتبط با اجرای گذرا و بعضی مرزهای Privilege.
- Defense in Depth: استفاده همزمان از چند لایه دفاعی.
- Chain of Trust: زنجیره اعتبارسنجی مرحله به مرحله اجزای سیستم.
خلاصه فصل
امنیت سیستم
فقط مسئولیت
Antivirus
یا Operating System نیست.
CPU
یکی از مهم ترین
اجزای اجرای
Security Boundaryهاست.
قابلیت هایی مانند:
- Privilege Level،
- Memory Permission،
- NX/XD،
- SMEP،
- SMAP،
- و Hardware Isolation
به Operating System
اجازه می دهند
دسترسی Code
به Resourceهای حساس
را کنترل کند.
در عین حال
تکنیک های Performance
مانند Speculative Execution
نشان داده اند
که تفاوت میان
Architectural State
و Microarchitectural State
می تواند
پیامد امنیتی داشته باشد.
Secure System
≠
Secure CPU Alone
Secure System
=
CPU
+
Firmware
+
OS
+
Software
+
Updates
+
Correct Configuration
بنابراین هنگام ارزیابی امنیت یک کامپیوتر،
لپ تاپ، Workstation یا Server،
نباید فقط مدل CPU را بررسی کرد؛
Firmware، سیستم عامل، Microcode،
تنظیمات امنیتی و وضعیت پشتیبانی Platform
همگی بخشی از تصویر واقعی امنیت هستند.
درصد استفاده از CPU به تنهایی نمی گوید پردازنده واقعاً وقت خود را کجا صرف می کند
id=”cpu-real-performance-monitoring-title”
Performance Monitoring در CPU چیست و چگونه Bottleneck واقعی پردازنده را پیدا می کنیم؟
وقتی یک برنامه کند اجرا می شود،
اولین چیزی که بسیاری از کاربران
بررسی می کنند
CPU Usage است.
اما CPU Usage
فقط بخش کوچکی
از داستان Performance
را نشان می دهد.
دو پردازنده ممکن است
هر دو 100 درصد
درگیر باشند،
اما یکی بیشتر زمان خود را
صرف اجرای مفید Instructionها کند
و دیگری بخش زیادی از زمان را
منتظر Data،
Cache،
Memory
یا رفع Branch Misprediction باشد.
High CPU Usage
≠
High CPU Efficiency
برای فهمیدن آنچه
واقعاً داخل پردازنده رخ می دهد،
CPUهای مدرن
مکانیزم هایی برای
Performance Monitoring
در اختیار Software
قرار می دهند.
در این فصل چه چیزهایی یاد می گیریم؟
- Performance Monitoring چیست.
- PMU چیست.
- Hardware Performance Counter چیست.
- Performance Event چیست.
- Instruction Retired چیست.
- CPU Cycle چیست.
- IPC چیست.
- CPI چیست.
- چرا IPC به تنهایی Benchmark نیست.
- Cache Hit و Cache Miss چگونه اندازه گیری می شوند.
- Branch Misprediction چه تاثیری دارد.
- Pipeline Stall چیست.
- Front-End Bound چیست.
- Back-End Bound چیست.
- Memory Bound چیست.
- Core Bound چیست.
- Bad Speculation چیست.
- Retiring چیست.
- Top-Down Performance Analysis چیست.
- Sampling و Counting چه تفاوتی دارند.
- چگونه Bottleneck واقعی CPU را تشخیص دهیم.
Performance Monitoring چیست؟
Performance Monitoring
مجموعه روش ها
و قابلیت هایی است
که برای مشاهده،
اندازه گیری
و تحلیل رفتار
Hardware و Software
هنگام اجرای Workload
استفاده می شوند.
هدف فقط دانستن
سریع یا کند بودن
برنامه نیست.
هدف مهم تر این است:
Why Is The Program Slow?
برای پاسخ به این سوال
باید بدانیم
CPU زمان و منابع خود را
چگونه مصرف می کند.
PMU چیست؟
Performance Monitoring Unit — PMU
PMU
مجموعه قابلیت های سخت افزاری
داخل پردازنده است
که امکان شمارش
یا نمونه برداری
از Eventهای مرتبط
با Performance
را فراهم می کند.
PMU
می تواند اطلاعاتی
درباره رفتارهایی مانند:
- CPU Cycles،
- Retired Instructions،
- Cache Misses،
- Branch Instructions،
- Branch Mispredictions،
- و بسیاری از Microarchitectural Eventها
فراهم کند.
Hardware Performance Counter چیست؟
Performance Counter
یک شمارنده سخت افزاری
است که می تواند
وقوع Event مشخصی
را ثبت کند.
برای مثال
می توان شمارنده ای
را برای اندازه گیری:
CPU Cycles
و شمارنده دیگری را
برای:
Instructions Retired
استفاده کرد.
سپس نسبت این مقادیر
اطلاعات بسیار مفیدی
درباره Efficiency
اجرای Workload
می دهد.
Performance Event چیست؟
Event
رویدادی داخل CPU
یا بخش های مرتبط
با اجرای Instruction است
که PMU
می تواند آن را
اندازه گیری کند.
نوع Eventهای قابل اندازه گیری
به Architecture
و مدل پردازنده
وابسته است.
بنابراین:
Available PMU Events
≠
Identical On Every CPU
Instruction Retired یعنی چه؟
در CPUهای Out-of-Order
ممکن است Instructionهای زیادی
وارد Pipeline شوند،
اجرا شوند
یا حتی Speculatively
پردازش شوند.
اما همه آنها
الزاماً به نتیجه نهایی
برنامه تبدیل نمی شوند.
Retired Instruction
به Instructionی اشاره می کند
که اجرای آن
به صورت معماری
پذیرفته و Commit شده است.
Executed
≠
Necessarily Retired
CPU Cycle در Performance Monitoring چیست؟
Cycle
واحدی مرتبط
با Clock پردازنده است.
شمارش Cycleها
به ما اجازه می دهد
مقدار کار انجام شده
را نسبت به
زمان پردازشی CPU
تحلیل کنیم.
یکی از مهم ترین نسبت هایی
که از Cycles
و Retired Instructions
ساخته می شود
IPC است.
IPC چیست؟
Instructions Per Cycle — IPC
IPC
نشان می دهد
به طور متوسط
چند Instruction
در هر Cycle
Retire شده است.
IPC
=
Instructions Retired
/
CPU Cycles
برای مثال اگر:
Instructions = 4,000,000,000
Cycles = 2,000,000,000
آنگاه:
IPC = 2
CPI چیست؟
CPI
مخفف:
Cycles Per Instruction
است.
CPI
تقریباً نگاه معکوس
IPC به Performance
است.
CPI
=
CPU Cycles
/
Instructions Retired
بنابراین:
CPI
=
1 / IPC
در شرایط ساده
IPC بیشتر
یا CPI کمتر
می تواند نشانه
استفاده موثرتر
از Cycleها باشد،
اما مقایسه باید
با احتیاط انجام شود.
آیا IPC بیشتر همیشه به معنی CPU سریع تر است؟
خیر.
IPC
به عوامل زیادی
وابسته است:
- نوع Workload،
- Instruction Mix،
- Compiler،
- Dataset،
- Cache Behavior،
- Memory Latency،
- Branch Behavior،
- Microarchitecture،
- و Clock Frequency.
بنابراین IPC
یک Benchmark مستقل
برای مقایسه تمام CPUها
نیست.
IPC و Frequency چگونه با هم Performance را می سازند؟
در یک مدل بسیار ساده:
Work Per Second
≈
IPC
×
Clock Frequency
اما Performance واقعی
علاوه بر این دو
به Parallelism،
Memory،
Cache،
Software
و عوامل دیگر
نیز وابسته است.
بنابراین مقایسه صرف
GHz
یا صرف IPC
کافی نیست.
Cache Hit و Cache Miss چه اطلاعاتی درباره Performance می دهند؟
اگر Data
در Cache مناسب
پیدا شود،
CPU می تواند
سریع تر به آن
دسترسی پیدا کند.
Cache Hit
→
Lower Access Cost
اگر Data
در آن Cache
موجود نباشد:
Cache Miss
→
Search Lower Cache Level
Or
Memory
افزایش Missهای مهم
می تواند باعث شود
Execution Unitها
منتظر Data بمانند.
Cache Miss Rate چیست؟
Miss Rate
نسبت Missها
به تعداد Accessهای
مربوطه است.
Cache Miss Rate
=
Cache Misses
/
Cache Accesses
اما فقط تعداد Miss
مهم نیست.
باید بدانیم
Miss در کدام سطح Cache
رخ داده
و هزینه آن
برای Workload
چقدر بوده است.
MPKI چیست؟
یکی از روش های
Normalize کردن
تعداد Missها
استفاده از:
Misses Per Kilo Instructions
یا MPKI است.
MPKI
=
Misses
/
Instructions
×
1000
این معیار
می تواند برای مقایسه
رفتار Memory Hierarchy
در اجرای یک Workload
مفید باشد.
Branch Prediction چگونه اندازه گیری می شود؟
PMU
می تواند Eventهایی
مرتبط با:
- Branch Instructions،
- Predicted Branches،
- و Branch Mispredictions
در اختیار ابزارهای
Performance Analysis
قرار دهد.
Branch Misprediction
می تواند باعث شود
بخشی از کار Speculative
کنار گذاشته شود.
Branch Misprediction Rate چیست؟
به صورت ساده:
Branch Misprediction Rate
=
Mispredicted Branches
/
Branches
مقدار بالاتر
می تواند نشان دهد
Control Flow برنامه
برای Predictor
دشوارتر است.
اما اثر Performance
به Architecture
و هزینه Recovery
نیز وابسته است.
Pipeline Stall چیست؟
Stall
زمانی رخ می دهد
که بخشی از Pipeline
نتواند با نرخ مطلوب
کار خود را ادامه دهد.
علت می تواند:
- نبود Instruction،
- نبود Data،
- Dependency،
- کمبود Execution Resource،
- Cache Miss،
- Memory Latency،
- یا محدودیت های دیگر
باشد.
Front-End Bound چیست؟
Front End
مسئول آماده کردن
Instructionها
برای بخش Execution
است.
اگر Front End
نتواند به اندازه کافی
Micro-Operation
یا Instruction
در اختیار Back End
قرار دهد،
CPU می تواند
Front-End Bound شود.
Insufficient Instruction Supply
→
Front-End Bound
علت های احتمالی
می توانند شامل:
- Instruction Cache Miss،
- Instruction TLB Miss،
- Decode Bottleneck،
- Fetch Limitation،
- و بعضی Control-Flow Effects
باشند.
Back-End Bound چیست؟
در Back-End Bound
Front End
ممکن است Instruction کافی
فراهم کند،
اما Execution
نمی تواند آنها را
با سرعت مطلوب
پردازش کند.
Instructions Available
+
Execution Cannot Keep Up
→
Back-End Bound
Back-End Bottleneck
می تواند از:
- Memory،
- Cache،
- Execution Ports،
- Functional Units،
- Dependencies،
- یا Resource Pressure
ایجاد شود.
Memory Bound چیست؟
Workload زمانی
Memory Bound
محسوب می شود
که Performance آن
به شکل قابل توجهی
توسط دسترسی به
Memory Hierarchy
محدود شود.
ممکن است CPU
Execution Resource آزاد
داشته باشد،
اما Instructionها
منتظر Data باشند.
CPU Ready
+
Data Not Ready
=
Memory Related Stall
Memory Latency Bound و Memory Bandwidth Bound چه تفاوتی دارند؟
این دو
یک مشکل واحد نیستند.
در Latency Bound:
Waiting For Individual Memory Requests
اهمیت زیادی دارد.
در Bandwidth Bound:
Too Much Data Transfer Demand
→
Available Bandwidth Saturated
بنابراین افزایش
Memory Bandwidth
الزاماً مشکل
Latency-Bound Workload
را حل نمی کند.
Core Bound چیست؟
Core Bound
به شرایطی اشاره می کند
که محدودیت اصلی
بیشتر از منابع Execution
داخل Core
ناشی می شود،
نه انتظار طولانی
برای Memory.
برای مثال
Workload ممکن است
فشار زیادی روی
مجموعه مشخصی از:
- Execution Units،
- Ports،
- Arithmetic Resources،
- یا Dependency Chains
ایجاد کند.
Bad Speculation چیست؟
CPU ممکن است
کارهایی را
Speculatively
انجام دهد
که بعداً مشخص شود
در مسیر صحیح
برنامه نبوده اند.
در این حالت
بخشی از ظرفیت Execution
صرف کاری شده
که در نهایت
Retire نمی شود.
Work Executed
–
Work Retired
=
Potential Wasted Work
Branch Misprediction
یکی از عوامل مهم
Bad Speculation است.
Retiring در Performance Analysis چیست؟
Retiring
نشان دهنده بخشی
از ظرفیت CPU است
که صرف کاری شده
که واقعاً
به نتیجه معماری
برنامه تبدیل شده است.
به صورت مفهومی:
Useful Work
→
Retiring
البته Retiring بالا
همیشه به معنی
بهینه بودن کامل
Algorithm نیست.
ممکن است برنامه
مقدار زیادی
Instruction غیرضروری
را نیز با موفقیت
Retire کند.
Top-Down Performance Analysis چیست؟
یکی از روش های
تحلیل Microarchitecture
دسته بندی ظرفیت
Pipeline
در چند گروه اصلی است.
در یک مدل مفهومی:
- Retiring،
- Bad Speculation،
- Front-End Bound،
- Back-End Bound.
Pipeline Slots
→
Retiring
+
Bad Speculation
+
Front-End Bound
+
Back-End Bound
این دسته بندی
کمک می کند
به جای بررسی
صدها Counter
از ابتدا،
ابتدا نوع کلی
Bottleneck
مشخص شود.
| دسته | معنای کلی | سوال اصلی |
|---|---|---|
| Retiring | ظرفیت صرف کار معماری مفید شده است | آیا Algorithm و Instruction Mix مناسب هستند؟ |
| Bad Speculation | کار انجام شده ولی Retire نشده است | آیا Prediction یا Speculation مشکل دارد؟ |
| Front-End Bound | Instruction کافی به Execution نمی رسد | Fetch/Decode/Instruction Delivery محدود است؟ |
| Back-End Bound | Execution نمی تواند کار آماده را سریع پردازش کند | Memory یا Core Resource محدود است؟ |
Counting و Sampling چه تفاوتی دارند؟
در Counting
هدف شمارش تعداد
Eventها در یک بازه است.
Counting
→
How Many Events Happened?
در Sampling
سیستم در نقاطی
از اجرای برنامه
نمونه جمع آوری می کند
تا مشخص شود
Eventها بیشتر
در کدام Code Region
رخ می دهند.
Sampling
→
Where Did The Events Happen?
این دو روش
مکمل یکدیگر هستند.
Hotspot چیست؟
Hotspot
بخشی از Code
است که سهم قابل توجهی
از Execution Time
یا Eventهای Performance
را به خود اختصاص می دهد.
بهینه سازی بخش هایی
که تقریباً هیچ زمانی
در آنها صرف نمی شود،
معمولاً اثر کمی
روی Performance نهایی دارد.
Optimize
What Actually Matters
چرا CPU Usage معیار کافی برای Performance نیست؟
CPU Usage بالا
نشان می دهد
CPU زمان زیادی
در حال اجرای Work
بوده است.
اما مشخص نمی کند
این زمان
چقدر موثر بوده است.
یک Core می تواند
تقریباً 100 درصد
Busy باشد،
اما بخش زیادی
از Pipeline
به دلیل Cache Miss
یا Dependency
استفاده نشده باشد.
Busy
≠
Efficient
چرا هنگام Performance Analysis باید Frequency واقعی را بررسی کنیم؟
CPU ممکن است
همیشه با Clock
اسمی یا Maximum Turbo
کار نکند.
Frequency واقعی
می تواند تحت تاثیر:
- Power Limit،
- Temperature،
- Current Limit،
- Workload Type،
- Core Utilization،
- و Firmware Policy
تغییر کند.
بنابراین Performance پایین
ممکن است
از Microarchitecture نباشد
و علت اصلی
کاهش Frequency باشد.
چگونه Throttling را از Bottleneck معماری جدا کنیم؟
اگر CPU
به دلیل Temperature
یا Power Limit
Frequency خود را کاهش دهد،
Performance کاهش پیدا می کند.
در چنین حالتی
قبل از تحلیل عمیق
Cache و Pipeline
باید شرایط عملیاتی
CPU بررسی شود.
Step 1
→
Verify Frequency / Temperature / Power
Step 2
→
Analyze Microarchitectural Bottlenecks
Performance Counterها در برنامه های Multi-Threaded چه چالشی دارند؟
در Workload چند Threadی
باید مشخص شود
Event مربوط به:
- یک Thread،
- یک Process،
- یک Core،
- یک Logical Processor،
- یا کل سیستم
است.
Scheduling
و جابه جایی Threadها
میان Coreها
می تواند تحلیل
را پیچیده تر کند.
SMT چه تاثیری بر تحلیل Performance دارد؟
در SMT
دو یا چند Logical Thread
ممکن است
بخشی از Resourceهای
یک Physical Core
را به اشتراک بگذارند.
بنابراین رفتار
یک Thread
می تواند تحت تاثیر
Thread همزمان
روی همان Core
قرار گیرد.
Shared Core Resources
→
Possible Contention
برای Benchmark دقیق
باید وضعیت SMT
و Thread Placement
مشخص باشد.
NUMA چگونه می تواند Performance Counterها را توضیح دهد؟
در سیستم NUMA
Memory Access
می تواند Local
یا Remote باشد.
اگر Thread
روی یک Node
اجرا شود
ولی Data
در Node دیگری باشد،
Memory Latency
افزایش پیدا می کند.
Remote NUMA Access
→
Higher Memory Cost
بنابراین Memory Bound بودن
یک Workload
ممکن است
از Placement نامناسب
ناشی شده باشد.
آیا Hardware Counterها کاملاً دقیق هستند؟
Counterها ابزار بسیار قدرتمندی هستند،
اما باید با درک
محدودیت های آنها
استفاده شوند.
مواردی مانند:
- Event Definition،
- CPU Model،
- Counter Availability،
- Multiplexing،
- Sampling Error،
- OS Scheduling،
- Virtualization،
- و Measurement Overhead
می توانند روی نتیجه
اثر بگذارند.
PMU Multiplexing چیست؟
تعداد Hardware Counterهای
فیزیکی محدود است.
اگر بخواهیم
Eventهای بیشتری
از Counterهای موجود
اندازه گیری کنیم،
Software می تواند
Eventها را
در طول زمان
بین Counterها
جابه جا کند.
Many Requested Events
>
Available Counters
→
Multiplexing
در این حالت
برخی مقادیر
تخمین زده
یا Scale می شوند
و باید با احتیاط
تفسیر شوند.
برای پیدا کردن Bottleneck واقعی CPU از کجا شروع کنیم؟
- ابتدا یک Workload واقعی و قابل تکرار تعریف کنید.
- زمان اجرای Baseline را اندازه گیری کنید.
- CPU Utilization را بررسی کنید.
- Frequency واقعی CPU را بررسی کنید.
- Temperature و Power Limit را بررسی کنید.
- تعداد Core و Thread فعال را بررسی کنید.
- Instructions و Cycles را اندازه گیری کنید.
- IPC یا CPI را محاسبه کنید.
- Branch Misprediction را بررسی کنید.
- Cache Behavior را بررسی کنید.
- Memory Latency و Bandwidth را بررسی کنید.
- Front-End و Back-End Bound بودن را بررسی کنید.
- در Back-End، Memory Bound و Core Bound را تفکیک کنید.
- Hotspotهای Code را با Sampling پیدا کنید.
- فقط بخش دارای سهم واقعی در Bottleneck را بهینه کنید.
- پس از تغییر، همان Benchmark را دوباره اجرا کنید.
مثال: چرا یک برنامه با CPU Usage صددرصد هنوز کند است؟
فرض کنید
یک Application
یک Core را
کاملاً درگیر کرده است.
CPU Usage = 100%
در نگاه اول
ممکن است تصور کنیم
Core با حداکثر Efficiency
کار می کند.
اما Performance Counterها
نشان می دهند:
IPC = Low
Last-Level Cache Misses = High
Back-End Memory Bound = High
در این شرایط
مشکل اصلی
کمبود CPU Usage نیست.
Core مشغول است،
اما بخش زیادی از زمان
منتظر رسیدن Data
از Memory Hierarchy
می ماند.
100% Busy
+
Low IPC
+
High Memory Stalls
→
Memory Bottleneck
مثال: CPU سریع است اما Branch Misprediction زیاد است
در Workload دیگری
ممکن است Cache Behavior
مناسب باشد،
اما Branch Predictor
مرتباً Prediction اشتباه
انجام دهد.
High Branch Misprediction
→
Pipeline Recovery
→
Wasted Speculative Work
در این حالت
Bad Speculation
می تواند سهم قابل توجهی
از ظرفیت Pipeline
را مصرف کند.
Benchmark و Performance Counter چه تفاوتی دارند؟
Benchmark
معمولاً به ما می گوید:
How Fast?
Performance Counterها
بیشتر کمک می کنند بفهمیم:
Why?
بهترین تحلیل
معمولاً از ترکیب
این دو حاصل می شود.
Benchmark
+
Hardware Counters
=
Better Performance Diagnosis
Performance Monitoring برای بررسی سیستم استوک چه کاربردی دارد؟
در سیستم استوک
پایین بودن Performance
الزاماً به معنی
ضعیف بودن مدل CPU
نیست.
عوامل دیگری
ممکن است باعث شوند
پردازنده به Performance
مورد انتظار نرسد.
- Thermal Throttling،
- Power Limit،
- Cooling ضعیف،
- RAM تک کاناله،
- Memory Frequency پایین،
- Firmware Configuration،
- Background Process،
- و Storage Bottleneck.
بنابراین مقایسه
نتیجه Benchmark
با رفتار داخلی سیستم
می تواند به تشخیص
علت Performance غیرعادی
کمک کند.
برای بررسی Performance یک CPU یا سیستم استوک چه مراحلی مناسب است؟
- مدل دقیق CPU را ثبت کنید.
- تعداد Core و Thread را بررسی کنید.
- Clock Idle و Load را بررسی کنید.
- دمای Idle و Load را ثبت کنید.
- وجود Thermal Throttling را بررسی کنید.
- Power Limit را بررسی کنید.
- یک Benchmark قابل تکرار اجرا کنید.
- نتیجه را با سیستم مشابه مقایسه کنید.
- در صورت اختلاف غیرعادی، IPC و Counterها را بررسی کنید.
- Memory Configuration را بررسی کنید.
- Storage Bottleneck را حذف کنید.
- Background Load را کنترل کنید.
- پس از هر تغییر دوباره Benchmark بگیرید.
زیرساخت فنی — PMU چگونه داستان اجرای یک Workload را بازسازی می کند؟
فرض کنید
یک برنامه
برای ده ثانیه
اجرا می شود.
فقط اندازه گیری
زمان اجرا
به ما می گوید:
Runtime = 10 Seconds
حال PMU
اطلاعات بیشتری
در اختیار ما
قرار می دهد.
Instructions Retired
↓
CPU Cycles
↓
IPC
سپس Eventهای دیگری
بررسی می شوند:
Branches
↓
Branch Mispredictions
Cache Accesses
↓
Cache Misses
Pipeline Slots
↓
Retiring
/
Bad Speculation
/
Front-End Bound
/
Back-End Bound
اگر Back-End Bound
زیاد باشد،
تحلیل عمیق تر
می تواند مشخص کند
محدودیت بیشتر
از Memory
یا Core Resources
ناشی شده است.
Back-End Bound
↓
Memory Bound
OR
Core Bound
در نهایت
Sampling
می تواند مشخص کند
کدام Function
یا Code Region
بیشترین سهم
از Event مشکل ساز
را دارد.
Hardware Event
→
Code Location
→
Root Cause
→
Optimization
یکی از اشتباهات
رایج در Performance Engineering
جمع آوری تعداد بسیار زیادی
Counter بدون داشتن
سوال مشخص است.
صدها عدد
به تنهایی
Root Cause
را مشخص نمی کنند.
روش بهتر:
Question
→
Measurement
→
Hypothesis
→
Test
→
Conclusion
برای مثال:
«آیا برنامه
به دلیل Memory Latency
کند شده است؟»
سپس Counterهای مرتبط
با همان فرضیه
بررسی می شوند.
Performance Analysis
جمع آوری عدد نیست؛
فرایند یافتن
رابطه علت و معلولی است.
فرض کنید
یک برنامه
IPC پایینی دارد.
نتیجه گیری سریع:
Low IPC
=
Bad CPU
اشتباه است.
IPC پایین
می تواند ناشی از:
- Memory Latency،
- Cache Miss،
- Branch Misprediction،
- Dependency Chain،
- Front-End Limitation،
- یا نوع طبیعی Workload
باشد.
بنابراین:
Metric
≠
Diagnosis
Metric
فقط Evidence
برای تشخیص است.
- استفاده از CPU Usage به عنوان تنها معیار Performance.
- فرض اینکه CPU Usage صددرصد یعنی CPU با Efficiency کامل کار می کند.
- فرض اینکه IPC بالاتر همیشه CPU سریع تر را نشان می دهد.
- مقایسه IPC دو Workload متفاوت بدون Context.
- نادیده گرفتن Clock Frequency هنگام مقایسه IPC.
- نادیده گرفتن Thermal Throttling.
- نادیده گرفتن Power Limit.
- فرض اینکه Cache Miss بیشتر همیشه مشکل اصلی است.
- بررسی تعداد Miss بدون Normalize کردن Workload.
- نادیده گرفتن Branch Misprediction.
- یکسان دانستن Front-End Bound و Back-End Bound.
- یکسان دانستن Memory Bound و Core Bound.
- یکسان دانستن Memory Latency و Memory Bandwidth.
- جمع آوری تعداد زیادی Counter بدون Hypothesis.
- نادیده گرفتن محدودیت تعداد Hardware Counterها.
- نادیده گرفتن PMU Multiplexing.
- مقایسه Eventهای Microarchitectureهای متفاوت بدون بررسی Definition.
- نادیده گرفتن SMT هنگام تحلیل Core.
- نادیده گرفتن NUMA Placement.
- بهینه سازی Code بدون پیدا کردن Hotspot واقعی.
سوالات متداول درباره Performance Monitoring پردازنده
PMU چیست؟
Performance Monitoring Unit
مجموعه قابلیت های سخت افزاری
پردازنده برای اندازه گیری
Eventهای مرتبط با Performance است.
IPC چیست؟
Instructions Per Cycle
نشان می دهد به طور متوسط
چند Instruction
در هر Cycle
Retire شده است.
IPC بیشتر همیشه بهتر است؟
خیر.
IPC به Workload،
Architecture،
Instruction Mix،
Memory Behavior
و عوامل متعدد دیگری
وابسته است.
CPI چیست؟
Cycles Per Instruction
تعداد متوسط Cycle
به ازای Instruction Retired
را بیان می کند.
آیا CPU Usage صددرصد یعنی پردازنده کاملاً بهینه کار می کند؟
خیر.
CPU می تواند Busy باشد،
اما بخش زیادی از زمان
منتظر Memory
یا درگیر Stall
و Bad Speculation باشد.
Memory Bound چیست؟
شرایطی است که Performance
Workload به شکل قابل توجهی
توسط Memory Hierarchy
محدود شده باشد.
Front-End Bound چیست؟
حالتی است که Front End
نمی تواند با نرخ کافی
Instruction یا Micro-Operation
برای Execution فراهم کند.
Back-End Bound چیست؟
حالتی است که Instruction
برای اجرا وجود دارد،
اما Memory یا Execution Resources
مانع پردازش سریع تر می شوند.
Benchmark بهتر است یا Hardware Counter؟
این دو مکمل یکدیگرند.
Benchmark سرعت نهایی را نشان می دهد
و Counterها به پیدا کردن
علت رفتار Performance
کمک می کنند.
واژه های جدید این فصل برای واژه نامه نهایی کتاب
- PMU: Performance Monitoring Unit.
- Performance Counter: شمارنده سخت افزاری Eventهای Performance.
- Performance Event: رویداد قابل اندازه گیری در CPU یا Microarchitecture.
- Instruction Retired: Instructionی که نتیجه آن به Architectural State Commit شده است.
- IPC: Instructions Per Cycle.
- CPI: Cycles Per Instruction.
- Cache Miss Rate: نسبت Cache Miss به Access.
- MPKI: Misses Per Kilo Instructions.
- Branch Misprediction: Prediction اشتباه مسیر Branch.
- Pipeline Stall: توقف یا کاهش پیشروی بخشی از Pipeline.
- Front-End Bound: محدودیت ناشی از تامین Instruction برای Execution.
- Back-End Bound: محدودیت ناشی از Memory یا Execution Resources.
- Memory Bound: محدودیت Performance ناشی از Memory Hierarchy.
- Core Bound: محدودیت ناشی از Execution Resources داخل Core.
- Bad Speculation: ظرفیت صرف شده برای کاری که Retire نمی شود.
- Retiring: ظرفیت صرف شده برای کار Commit شده معماری.
- Sampling: نمونه برداری دوره ای برای پیدا کردن محل Eventها.
- Counting: شمارش تعداد وقوع Event.
- Hotspot: بخش Code دارای سهم قابل توجه از هزینه اجرا.
- Multiplexing: اشتراک زمانی Counterهای محدود بین Eventهای بیشتر.
خلاصه فصل
Performance Monitoring
به ما اجازه می دهد
از مشاهده ساده
CPU Usage
عبور کنیم
و رفتار واقعی
پردازنده را بررسی کنیم.
PMU
با استفاده از
Hardware Performance Counterها
می تواند Eventهایی مانند:
- Cycles،
- Instructions Retired،
- Cache Misses،
- Branch Mispredictions،
- و Pipeline Behavior
را اندازه گیری کند.
IPC و CPI
معیارهای مهمی هستند،
اما بدون Context
نباید تفسیر شوند.
مدل Top-Down
کمک می کند
Bottleneck را ابتدا
در چهار گروه کلی:
Retiring
/
Bad Speculation
/
Front-End Bound
/
Back-End Bound
دسته بندی کنیم.
سپس می توان
تحلیل را به سمت
Memory،
Core،
Cache،
Branch
یا بخش های دیگر
هدایت کرد.
Measurement
→
Diagnosis
→
Optimization
→
Re-Measurement
Performance Engineering واقعی
با حدس زدن آغاز نمی شود؛
ابتدا باید اندازه گیری کنیم،
Bottleneck واقعی را پیدا کنیم
و فقط همان بخشی را بهینه کنیم
که واقعاً روی Performance نهایی اثر دارد.
عدد Benchmark زمانی ارزش دارد که بدانیم چگونه، در چه شرایطی و برای اندازه گیری چه چیزی تولید شده است
چگونه CPUها را به شکل علمی Benchmark و با یکدیگر مقایسه کنیم؟
مشاهده یک امتیاز Benchmark
و اعلام اینکه
«پردازنده A از پردازنده B سریع تر است»
بسیار ساده است؛
اما یک مقایسه معتبر
به کنترل متغیرهای بسیار بیشتری نیاز دارد.
CPU Performance
یک عدد ثابت و مستقل
از شرایط سیستم نیست.
نتیجه می تواند تحت تاثیر
Workload،
Cooling،
Power Limit،
RAM،
سیستم عامل،
Background Process،
Compiler،
Firmware
و حتی مدت زمان اجرای Test
قرار گیرد.
Benchmark Score
Without Test Context
=
Incomplete Information
در این فصل چه چیزهایی یاد می گیریم؟
- Benchmark چیست.
- Benchmark خوب چه ویژگی هایی دارد.
- Synthetic Benchmark چیست.
- Real-World Benchmark چیست.
- Microbenchmark چیست.
- Single-Core و Multi-Core Benchmark چه تفاوتی دارند.
- Throughput و Latency Benchmark چه تفاوتی دارند.
- Warm-up چرا مهم است.
- Cold Run و Warm Run چه تفاوتی دارند.
- چرا Benchmark باید چند بار اجرا شود.
- Run-to-Run Variance چیست.
- Mean، Median و Percentile چه هستند.
- Outlier چیست.
- 1% Low چه معنایی دارد و کجا کاربرد دارد.
- چرا Temperature باید کنترل شود.
- Power Limit چگونه نتیجه را تغییر می دهد.
- چرا لپ تاپ ها را نمی توان فقط براساس نام CPU مقایسه کرد.
- چگونه Benchmark گمراه کننده را تشخیص دهیم.
- چگونه CPU استوک را منصفانه آزمایش کنیم.
Benchmark چیست؟
Benchmark
Benchmark
یک Workload یا مجموعه ای
از Workloadهاست
که برای اندازه گیری
Performance یک سیستم
تحت شرایط مشخص
اجرا می شود.
Benchmark می تواند
مدت زمان انجام یک کار،
تعداد عملیات در ثانیه،
Frame Rate،
Latency،
Throughput
یا یک Score ترکیبی
را گزارش کند.
Benchmark
=
Defined Workload
+
Defined Conditions
+
Measurable Result
یک Benchmark خوب چه ویژگی هایی دارد؟
Benchmark مناسب
باید تا حد امکان:
- قابل تکرار باشد.
- شرایط اجرای مشخص داشته باشد.
- Workload آن برای سوال مورد بررسی مرتبط باشد.
- نتایج آن قابل اندازه گیری باشند.
- متغیرهای مزاحم تا حد امکان کنترل شوند.
- روش گزارش نتیجه شفاف باشد.
مهم ترین سوال
قبل از اجرای Benchmark این است:
What Exactly Are We Trying To Measure?
Synthetic Benchmark چیست؟
Synthetic Benchmark
Workloadی است
که عمدتاً برای اندازه گیری
جنبه مشخصی از Performance
طراحی شده است.
چنین Benchmarkهایی
می توانند برای:
- مقایسه سریع CPUها،
- بررسی تغییر Performance،
- آزمایش Subsystem مشخص،
- و ایجاد شرایط قابل تکرار
مفید باشند.
اما امتیاز Synthetic
الزاماً Performance
تمام برنامه های واقعی
را پیش بینی نمی کند.
Real-World Benchmark چیست؟
در Real-World Benchmark
از Application
یا Workflow واقعی
استفاده می شود.
برای مثال:
- Render کردن یک Scene،
- Export کردن Video،
- Compile کردن یک Project،
- فشرده سازی فایل،
- اجرای Simulation،
- پردازش مجموعه ای از تصاویر،
- یا اجرای Game.
این Testها
معمولاً برای پاسخ
به سوال کاربردی:
Which System Is Faster For My Work?
ارزش بیشتری دارند.
| ویژگی | Synthetic Benchmark | Real-World Benchmark |
|---|---|---|
| تکرارپذیری | معمولاً بالا | بسته به Workflow |
| کنترل متغیرها | معمولاً آسان تر | پیچیده تر |
| ارتباط با کار واقعی | متغیر | معمولاً بیشتر |
| تشخیص رفتار خاص Hardware | اغلب مناسب | گاهی دشوارتر |
| ارزش نهایی | مکمل تحلیل | مکمل تحلیل |
Microbenchmark چیست؟
Microbenchmark
تلاش می کند
بخش بسیار مشخصی
از سیستم
یا Microarchitecture
را اندازه گیری کند.
برای مثال:
- Memory Latency،
- Cache Bandwidth،
- Instruction Latency،
- Instruction Throughput،
- Branch Behavior،
- یا Synchronization Cost.
Microbenchmark
برای فهم رفتار داخلی
بسیار مفید است،
اما نتیجه آن
نباید مستقیماً
به Performance کل Application
تعمیم داده شود.
Single-Core Benchmark چه چیزی را اندازه گیری می کند؟
Single-Core Benchmark
تلاش می کند
Performance اجرای Workload
با استفاده محدود
از یک Core
یا یک Execution Thread
را بررسی کند.
نتیجه می تواند
تحت تاثیر:
- IPC،
- Clock Frequency،
- Cache،
- Memory Latency،
- Boost Behavior،
- و نوع Workload
قرار گیرد.
Multi-Core Benchmark چه چیزی را اندازه گیری می کند؟
Multi-Core Benchmark
Workloadی را اجرا می کند
که می تواند
از چند Core
یا Thread
استفاده کند.
Performance آن
علاوه بر سرعت هر Core
به مواردی مانند:
- تعداد Coreها،
- تعداد Threadها،
- Scaling نرم افزار،
- Memory Bandwidth،
- Cache Sharing،
- Power Budget،
- و Thermal Limit
وابسته است.
چرا دو برابر شدن Coreها Performance را دو برابر نمی کند؟
همه بخش های یک برنامه
قابل Parallel شدن نیستند.
علاوه بر آن،
Threadهای بیشتر
می توانند باعث افزایش:
- Synchronization،
- Communication،
- Memory Pressure،
- Cache Contention،
- و Scheduling Overhead
شوند.
2× Cores
≠
Automatically 2× Performance
Latency Benchmark و Throughput Benchmark چه تفاوتی دارند؟
Latency
می پرسد:
How Long Does One Task Take?
Throughput
می پرسد:
How Much Work Can Be Completed Per Unit Of Time?
این دو معیار
می توانند نتیجه گیری های
متفاوتی درباره یک CPU
ایجاد کنند.
یک پردازنده
ممکن است Latency
بسیار خوبی برای
یک Task داشته باشد،
اما CPU دیگری
به دلیل Coreهای بیشتر
Throughput بالاتری
ارائه دهد.
Warm-up چیست و چرا اهمیت دارد؟
اولین اجرای یک Workload
ممکن است با اجراهای بعدی
شرایط یکسانی نداشته باشد.
عواملی مانند:
- Cache State،
- File Cache،
- JIT Compilation،
- Code Loading،
- Dynamic Optimization،
- و Power/Frequency State
می توانند نتیجه
اولین Run
را متفاوت کنند.
به همین دلیل
بعضی Benchmarkها
قبل از Measurement اصلی
Warm-up Run
اجرا می کنند.
Cold Run و Warm Run چه تفاوتی دارند؟
Cold Run
تلاش می کند
شرایط اجرای اولیه
را اندازه گیری کند.
Warm Run
زمانی انجام می شود
که بخشی از State
از اجرای قبلی
باقی مانده است.
Cold Performance
≠
Warm Performance
هیچ کدام
ذاتاً بهتر نیستند.
باید مشخص باشد
Benchmark قصد اندازه گیری
کدام Scenario
را دارد.
چرا یک بار اجرای Benchmark کافی نیست؟
سیستم کامپیوتری
محیط کاملاً ثابت
و بدون Noise نیست.
Scheduler،
Background Process،
Temperature،
Boost،
Interrupt،
Storage
و عوامل دیگر
می توانند نتیجه
هر Run را کمی تغییر دهند.
بنابراین:
One Run
≠
Reliable Conclusion
اجرای چندباره
به ما اجازه می دهد
Variance
را مشاهده کنیم.
Run-to-Run Variance چیست؟
اگر Benchmark
چند بار اجرا شود،
نتایج ممکن است
دقیقاً یکسان نباشند.
میزان پراکندگی
بین Runها
اطلاعات مهمی
درباره Stability
Test می دهد.
برای مثال:
Run 1 = 100
Run 2 = 101
Run 3 = 99
با:
Run 1 = 100
Run 2 = 120
Run 3 = 82
از نظر Reliability
یکسان نیست.
Mean یا میانگین چیست؟
Mean
از جمع نتایج
و تقسیم آن
بر تعداد نمونه ها
به دست می آید.
Mean
=
Sum Of Results
/
Number Of Results
Mean بسیار مفید است،
اما می تواند
تحت تاثیر Outlier
قرار گیرد.
Median یا میانه چیست؟
Median
مقدار میانی
مجموعه مرتب شده
نتایج است.
برای مثال:
98
/
99
/
100
/
101
/
140
Median برابر:
100
است.
Median
نسبت به بعضی Outlierها
مقاوم تر از Mean است.
Outlier چیست؟
Outlier
نتیجه ای است
که به شکل غیرعادی
از سایر نمونه ها
فاصله دارد.
اما نباید
هر نتیجه متفاوتی
را بدون بررسی
حذف کرد.
Outlier ممکن است
نشانه یک مشکل واقعی باشد:
- Thermal Throttling،
- Background Task،
- Power Limit،
- Garbage Collection،
- Storage Activity،
- یا Scheduling Event.
ابتدا علت را بررسی کنید،
سپس درباره حذف نمونه
تصمیم بگیرید.
Percentile چیست؟
Percentile
به ما کمک می کند
توزیع نتایج
یا Latencyها
را بهتر درک کنیم.
برای مثال
در Latency Measurement:
P95 Latency
به طور مفهومی
حدی است که
تقریباً 95 درصد
نمونه ها
در یا پایین تر
از آن قرار می گیرند.
این معیار
برای Workloadهایی
که Consistency
اهمیت دارد
بسیار مفید است.
1% Low چیست؟
1% Low
بیشتر در Benchmarkهای Gaming
و Frame-Time Analysis
دیده می شود.
هدف آن
نمایش رفتار
بخش کندتر تجربه
به جای تمرکز صرف
بر Average FPS است.
روش محاسبه دقیق
می تواند میان ابزارها
یا Review Methodologyها
متفاوت باشد.
بنابراین باید
Methodology منبع
بررسی شود.
Average FPS Alone
≠
Complete Smoothness Picture
چرا Temperature در Benchmark مهم است؟
CPUهای مدرن
رفتار Frequency
و Power خود را
براساس شرایط حرارتی
تغییر می دهند.
دو سیستم
با CPU یکسان
اما Cooling متفاوت
می توانند
Performance متفاوتی
ارائه دهند.
Same CPU
+
Different Cooling
=
Potentially Different Sustained Performance
چرا Benchmark کوتاه و طولانی ممکن است نتیجه متفاوتی بدهند؟
در شروع Workload
ممکن است CPU
بتواند برای مدت کوتاهی
Frequency یا Power
بالاتری حفظ کند.
با ادامه Load:
Temperature Rises
↓
Power / Thermal Constraints
↓
Sustained Operating Point
بنابراین Benchmark کوتاه
بیشتر می تواند
Burst Performance
را نشان دهد،
در حالی که
Benchmark طولانی
Sustained Performance
را بهتر آشکار می کند.
Power Limit چگونه Benchmark را تغییر می دهد؟
دو سیستم
ممکن است از CPU
با نام تجاری یکسان
استفاده کنند،
اما Manufacturer
آنها را با
Power Policy متفاوت
تنظیم کرده باشد.
در نتیجه:
Same CPU Model
≠
Same Sustained Power
≠
Same Sustained Performance
این موضوع
به خصوص در Laptop
و Mini PC
اهمیت زیادی دارد.
چرا مقایسه CPU لپ تاپ فقط براساس نام پردازنده اشتباه است؟
Performance واقعی
پردازنده لپ تاپ
تحت تاثیر طراحی
خود دستگاه است.
موارد مهم:
- Cooling System،
- Power Limits،
- Fan Profile،
- Chassis Size،
- Firmware،
- RAM Configuration،
- Ambient Temperature،
- و Performance Mode.
بنابراین Benchmark
یک مدل CPU
در یک Laptop
الزاماً نتیجه همان CPU
در Laptop دیگری نیست.
آیا می توان CPU دسکتاپ و لپ تاپ را فقط با Score مقایسه کرد؟
Score می تواند
بخشی از مقایسه باشد،
اما Context
بسیار مهم است.
Laptop
معمولاً با محدودیت های:
- Power،
- Cooling،
- Size،
- Noise،
- و Battery
روبروست.
Desktop
ممکن است
Power و Cooling
بسیار بیشتری
در اختیار CPU
قرار دهد.
پس علاوه بر Performance
باید Performance-per-Watt
و محدودیت Platform
نیز در نظر گرفته شود.
RAM چگونه نتیجه CPU Benchmark را تغییر می دهد؟
اگر Benchmark
به Memory Subsystem
حساس باشد،
تغییر:
- Memory Frequency،
- Memory Timing،
- Channel Configuration،
- Memory Capacity،
- و Rank Configuration
می تواند نتیجه را
تغییر دهد.
بنابراین هنگام
مقایسه CPUها
Memory Configuration
باید ثبت شود.
Background Process چگونه Benchmark را خراب می کند؟
برنامه های پس زمینه
می توانند:
- CPU Time مصرف کنند،
- Cache را تحت تاثیر قرار دهند،
- Memory Bandwidth مصرف کنند،
- Storage Activity ایجاد کنند،
- و Thermal State سیستم را تغییر دهند.
Benchmark معتبر
باید تا حد امکان
شرایط Background Load
را کنترل کند.
چرا نسخه سیستم عامل و Software Stack باید ثبت شود؟
Performance فقط
محصول Hardware نیست.
تغییر:
- Operating System،
- Scheduler،
- Driver،
- Compiler،
- Application Version،
- Security Mitigation،
- و Firmware
می تواند نتیجه
Benchmark را تغییر دهد.
Benchmark Result
=
Hardware
+
Software Stack
+
Configuration
مقایسه منصفانه CPU یعنی چه؟
Fair Comparison
الزاماً به معنی
یکسان کردن تمام تنظیمات
نیست.
روش Test
باید با سوال
مورد نظر هماهنگ باشد.
برای مثال
دو سوال متفاوت داریم:
Which CPU Is Faster
At The Same Power?
و:
Which Product Is Faster
With Its Factory Configuration?
این دو سوال
Methodology یکسانی
ندارند.
Benchmark گمراه کننده را چگونه تشخیص دهیم؟
هنگام مشاهده
یک نمودار یا Score
باید چند سوال
مطرح شود:
- نام دقیق CPUها چیست؟
- Desktop هستند یا Laptop؟
- Power Limit آنها چقدر بوده است؟
- Cooling چگونه بوده است؟
- RAM Configuration یکسان بوده است؟
- نسخه Benchmark چیست؟
- Workload دقیقاً چه چیزی را اندازه می گیرد؟
- Single-Core است یا Multi-Core؟
- Test کوتاه است یا Sustained؟
- چند بار Test اجرا شده است؟
- Variance گزارش شده است؟
- سیستم عامل و Software Version مشخص است؟
- نتیجه Average است یا بهترین Run انتخاب شده است؟
- آیا فقط یک Benchmark برای نتیجه گیری کلی استفاده شده است؟
Cherry Picking در Benchmark چیست؟
Cherry Picking
یعنی انتخاب
فقط Testها یا نتایجی
که نتیجه مطلوب
را نشان می دهند
و نادیده گرفتن
داده های مخالف.
برای مثال
یک CPU ممکن است
در یک Benchmark خاص
بسیار سریع باشد
اما در Workloadهای دیگر
برتری مشابهی نداشته باشد.
One Favorable Benchmark
≠
Universal Performance Superiority
اختلاف درصدی Performance چگونه محاسبه می شود؟
اگر Score بیشتر
بهتر باشد:
Performance Gain %
=
(New – Old)
/
Old
×
100
اما اگر Benchmark
زمان اجرا را گزارش کند
و عدد کمتر بهتر باشد،
تفسیر باید با دقت
بیشتری انجام شود.
«20 درصد زمان کمتر»
الزاماً با عبارت
«20 درصد سریع تر»
از نظر ریاضی
یکسان نیست.
چرا کاهش زمان و افزایش سرعت درصد یکسانی ندارند؟
فرض کنید
Task قبلاً:
100 Seconds
طول می کشید
و اکنون:
80 Seconds
زمان اجرا
20 درصد کاهش یافته است.
اما Speedup:
Speedup
=
100 / 80
=
1.25×
یعنی Throughput
یا سرعت انجام همان Task
در این مدل
25 درصد بیشتر شده است.
برای تست CPU در سیستم استوک چه Methodology مناسبی داریم؟
- مدل دقیق CPU را ثبت کنید.
- BIOS/UEFI و تنظیمات مهم سیستم را ثبت کنید.
- Power Mode سیستم را مشخص کنید.
- سیستم را به دمای پایدار برسانید.
- Background Processهای غیرضروری را ببندید.
- RAM Configuration را ثبت کنید.
- Benchmark کوتاه Single-Core اجرا کنید.
- Benchmark Multi-Core اجرا کنید.
- یک Sustained Load طولانی تر اجرا کنید.
- Clock Frequency را هنگام Load ثبت کنید.
- Temperature را ثبت کنید.
- Thermal Throttling را بررسی کنید.
- Power Limit را بررسی کنید.
- Benchmark را چند بار تکرار کنید.
- نتایج غیرعادی را بررسی کنید، نه اینکه فوراً حذف کنید.
- نتیجه را با دستگاه مشابه و شرایط مشابه مقایسه کنید.
در لپ تاپ استوک چه چیزی از Score مهم تر است؟
در Laptop استوک
فقط Peak Score
اهمیت ندارد.
باید بررسی شود
آیا دستگاه می تواند
Performance را
در Load طولانی
حفظ کند.
Peak Performance
vs
Sustained Performance
افت شدید Score
در Runهای متوالی
می تواند نشانه:
- Cooling ضعیف،
- گردوغبار،
- Thermal Interface نامناسب،
- Power Limitation،
- Fan Problem،
- یا تنظیمات Firmware
باشد.
چرا Benchmark متوالی برای سیستم استوک مفید است؟
یک Run کوتاه
ممکن است فقط
Burst Performance
سیستم را نشان دهد.
اجرای چندباره
می تواند رفتار
حرارتی سیستم
را آشکار کند.
Run 1
→
High Score
Run 2
→
Slightly Lower
Run 3
→
Stable
می تواند رفتار طبیعی
رسیدن سیستم
به Thermal Equilibrium باشد.
اما:
Run 1
→
High
Run 2
→
Much Lower
Run 3
→
Even Lower
نیاز به بررسی
Cooling،
Frequency
و Power دارد.
زیرساخت فنی — چرا دو اجرای یک Benchmark دقیقاً یک نتیجه نمی دهند؟
تصور کنید
Benchmark یکسانی
سه بار
روی همان سیستم
اجرا می شود.
Code تغییر نکرده است.
Hardware نیز
تغییر نکرده است.
اما Environment
کاملاً ثابت نیست.
Run 1
↓
Different Cache State
Run 2
↓
Different Temperature
Run 3
↓
Different OS Scheduling
CPU Boost
نیز ممکن است
با تغییر Temperature
و Power Headroom
رفتار متفاوتی
داشته باشد.
Temperature
+
Power
+
Scheduler
+
Cache State
+
Background Activity
=
Measurement Noise
به همین دلیل
Performance Measurement
باید آماری
و تکرارپذیر باشد.
اگر اختلاف بین
دو CPU
کمتر از Noise
خود Test باشد،
نمی توان با اطمینان
برتری یکی را
اعلام کرد.
Performance Difference
≤
Measurement Variance
→
Weak Conclusion
Benchmark بدون سوال مشخص
می تواند
عدد تولید کند،
اما الزاماً
دانش مفیدی تولید نمی کند.
برای مثال:
«کدام CPU بهتر است؟»
سوال دقیقی نیست.
سوال های بهتر:
- کدام CPU پروژه Blender مشخصی را سریع تر Render می کند؟
- کدام CPU در Revit پاسخ دهی Single-Thread بهتری دارد؟
- کدام Laptop Performance پایدارتر در Render سی دقیقه ای دارد؟
- کدام CPU در Power ثابت Throughput بیشتری ارائه می دهد؟
Better Question
→
Better Benchmark
→
Better Conclusion
CPU ممکن است
در Benchmark کوتاه
Score بسیار بالایی
ثبت کند،
زیرا Thermal
و Power Headroom
هنوز در دسترس است.
اما در Workload طولانی:
Initial Boost
↓
Temperature Rise
↓
Power / Thermal Equilibrium
↓
Sustained Performance
برای کاربری هایی مانند:
- Rendering،
- Video Encoding،
- Simulation،
- Compilation طولانی،
- و Scientific Computing
Sustained Performance
می تواند بسیار مهم تر
از Peak Score باشد.
- نتیجه گیری کلی از یک Benchmark.
- استفاده از تنها یک Run.
- انتخاب بهترین Run و حذف بقیه بدون توضیح.
- نادیده گرفتن Variance.
- مقایسه سیستم هایی با RAM متفاوت بدون ذکر آن.
- نادیده گرفتن Power Limit.
- نادیده گرفتن Temperature.
- مقایسه Peak Performance یک سیستم با Sustained Performance سیستم دیگر.
- مقایسه Laptop فقط براساس نام CPU.
- فرض اینکه CPU یکسان در تمام Laptopها Performance یکسان دارد.
- یکسان دانستن Synthetic Benchmark با Real-World Performance.
- تعمیم Microbenchmark به کل Application.
- نادیده گرفتن Background Process.
- نادیده گرفتن Software Version.
- نادیده گرفتن OS و Firmware.
- اشتباه گرفتن Latency و Throughput.
- فرض Scaling خطی با افزایش Core.
- استفاده نادرست از درصدها.
- حذف Outlier بدون بررسی علت.
- نادیده گرفتن هدف اصلی Benchmark.
یک گزارش Benchmark خوب چه اطلاعاتی باید داشته باشد؟
| اطلاعات | چرا مهم است؟ |
|---|---|
| مدل دقیق CPU | مشخص شدن Hardware واقعی |
| RAM | کنترل اثر Memory Configuration |
| Cooling | بررسی Thermal Headroom |
| Power Mode / Limit | مشخص شدن Power Budget |
| OS و Software Version | تکرارپذیری Test |
| تعداد Run | ارزیابی Variance |
| Temperature | تشخیص Thermal Limitation |
| Clock During Load | بررسی رفتار واقعی CPU |
| Mean / Median | گزارش آماری نتیجه |
| Test Duration | تفکیک Peak و Sustained Performance |
سوالات متداول درباره Benchmark پردازنده
آیا یک Benchmark برای مقایسه دو CPU کافی است؟
معمولاً خیر.
بهتر است مجموعه ای
از Workloadهای مرتبط
با کاربرد واقعی
بررسی شوند.
آیا Score بالاتر همیشه بهتر است؟
فقط اگر Benchmark
به شکلی تعریف شده باشد
که عدد بالاتر
نشان دهنده Performance بیشتر باشد.
در Benchmarkهای زمان اجرا
معمولاً عدد کمتر بهتر است.
چرا Benchmark را چند بار اجرا می کنیم؟
برای مشاهده Variance
و کاهش احتمال نتیجه گیری
براساس یک Run غیرعادی.
آیا CPU یکسان در دو لپ تاپ Performance یکسان دارد؟
الزاماً خیر.
Cooling،
Power Limit،
Firmware،
RAM
و طراحی دستگاه
می توانند Performance
را تغییر دهند.
Benchmark کوتاه بهتر است یا طولانی؟
به هدف Test بستگی دارد.
Test کوتاه می تواند
Burst Performance
و Test طولانی
Sustained Performance
را بهتر نشان دهد.
Mean بهتر است یا Median؟
هر کدام اطلاعات متفاوتی
ارائه می دهند.
Mean به تمام مقادیر حساس است
و Median در برابر
بعضی Outlierها مقاوم تر است.
آیا Synthetic Benchmark بی ارزش است؟
خیر.
Synthetic Benchmark
می تواند بسیار مفید باشد،
اما باید بدانیم
دقیقاً چه چیزی
را اندازه گیری می کند.
برای لپ تاپ استوک یک Run Benchmark کافی است؟
بهتر است Test
چند بار اجرا شود
تا رفتار Thermal
و Sustained Performance
دستگاه نیز مشخص شود.
واژه های جدید این فصل برای واژه نامه نهایی کتاب
- Benchmark: Workload استاندارد یا تعریف شده برای اندازه گیری Performance.
- Synthetic Benchmark: Benchmark طراحی شده برای اندازه گیری کنترل شده Performance.
- Real-World Benchmark: Benchmark مبتنی بر Application یا Workflow واقعی.
- Microbenchmark: Test متمرکز بر یک رفتار محدود Hardware یا Software.
- Single-Core Benchmark: ارزیابی Performance با استفاده محدود از یک Core یا Thread.
- Multi-Core Benchmark: ارزیابی Workload قابل Parallel شدن روی چند Core.
- Latency: زمان لازم برای تکمیل یک عملیات.
- Throughput: حجم کار تکمیل شده در واحد زمان.
- Warm-up: اجرای مقدماتی برای رسیدن سیستم یا Runtime به State مناسب Measurement.
- Cold Run: اجرای Workload در شرایط اولیه یا سرد.
- Warm Run: اجرای Workload پس از شکل گیری Stateهای ناشی از اجرای قبلی.
- Run-to-Run Variance: تغییر نتایج میان اجراهای تکراری.
- Mean: میانگین حسابی.
- Median: مقدار میانی داده های مرتب شده.
- Percentile: معیار موقعیت یک مقدار در توزیع داده.
- Outlier: نمونه دارای فاصله غیرعادی از سایر نتایج.
- 1% Low: معیاری برای نمایش بخش ضعیف تر Performance در برخی Benchmarkهای Frame-Based.
- Peak Performance: بالاترین Performance قابل دستیابی در شرایط مشخص.
- Sustained Performance: Performance قابل حفظ در Load طولانی.
- Cherry Picking: انتخاب گزینشی داده هایی که نتیجه مطلوب را نشان می دهند.
خلاصه فصل
Benchmark
فقط یک عدد نیست.
نتیجه معتبر
باید همراه با
Methodology
و شرایط Test
تفسیر شود.
Synthetic،
Real-World
و Microbenchmark
هر کدام
کاربرد متفاوتی دارند.
همچنین:
- Single-Core و Multi-Core یک چیز را اندازه نمی گیرند.
- Latency و Throughput معیارهای متفاوتی هستند.
- یک Run برای نتیجه گیری علمی کافی نیست.
- Variance باید بررسی شود.
- Temperature و Power Limit باید کنترل شوند.
- Peak و Sustained Performance باید از هم جدا شوند.
- RAM، OS، Firmware و Software Stack باید ثبت شوند.
Good Benchmarking
=
Controlled Conditions
+
Relevant Workload
+
Repeated Measurement
+
Statistical Analysis
+
Transparent Reporting
در یک مقایسه حرفه ای پردازنده،
مهم نیست فقط چه کسی عدد بزرگ تری دارد؛
مهم این است که آن عدد چگونه تولید شده،
چه چیزی را اندازه می گیرد
و آیا با نیاز واقعی کاربر ارتباط دارد یا خیر.
