DDR RAM ทำงานอย่างไร
DDR (Double Data Rate) RAM เป็นหน่วยความจำแบบ SDRAM ที่ส่งข้อมูลทั้งขาขึ้นและขาลงของ clock signal ทำให้ได้ bandwidth เป็น 2 เท่าของ SDR RAM ที่ clock เดียวกัน ปัจจุบัน DDR มีพัฒนาการมาถึง DDR5 ที่ใช้ในเครื่องรุ่นใหม่ แต่ DDR4 ยังคงเป็นมาตรฐานที่ใช้กันมากที่สุด
RAM เป็น volatile memory คือข้อมูลหายเมื่อปิดเครื่อง CPU ใช้ RAM เป็นพื้นที่ทำงานชั่วคราวเพราะเร็วกว่า SSD/HDD หลายสิบเท่า โปรแกรมทุกตัวที่รันอยู่จะถูกโหลดจาก disk เข้ามาใน RAM ก่อน CPU จึงจะประมวลผลได้
เปรียบเทียบ DDR3 vs DDR4 vs DDR5
| สเปค | DDR3 | DDR4 | DDR5 |
|---|---|---|---|
| ปีเปิดตัว | 2007 | 2014 | 2020 |
| แรงดันไฟ | 1.5V | 1.2V | 1.1V |
| ความเร็ว | 800-2133 MHz | 2133-5333 MHz | 4800-8400+ MHz |
| Bandwidth สูงสุด | 17 GB/s | 25.6 GB/s | 67.2 GB/s |
| ความจุต่อแถบ | สูงสุด 16 GB | สูงสุด 64 GB | สูงสุด 128 GB |
| Pin count | 240 pins | 288 pins | 288 pins |
| Prefetch | 8n | 8n | 16n |
| ECC on-die | ไม่มี | ไม่มี | มี |
ตรวจสอบ RAM ในเครื่อง Linux
# ดูข้อมูล RAM ทั้งหมด
sudo dmidecode -t memory | grep -E "Size|Type|Speed|Manufacturer|Serial"
# ตัวอย่าง output:
# Size: 16 GB
# Type: DDR4
# Speed: 3200 MT/s
# Manufacturer: Samsung
# Serial Number: 12345678
# ดูจำนวน slot และ RAM ที่ใส่อยู่
sudo dmidecode -t memory | grep -c "Size: [0-9]"
# 2 (ใส่ 2 แถบ)
sudo dmidecode -t memory | grep -c "Size: No Module"
# 2 (ว่าง 2 slot)
# ดูการใช้งาน RAM แบบ real-time
free -h
# total used free shared buff/cache available
# Mem: 31Gi 8.2Gi 12Gi 256Mi 11Gi 22Gi
# Swap: 8.0Gi 0B 8.0Gi
# ดูรายละเอียดเพิ่มเติม
cat /proc/meminfo | head -20
# MemTotal: 32768000 kB
# MemFree: 12582912 kB
# MemAvailable: 23068672 kB
# Buffers: 524288 kB
# Cached: 10485760 kB
# SwapTotal: 8388608 kB
# SwapFree: 8388608 kB
# ดู RAM speed และ timing แบบละเอียด
sudo dmidecode -t memory | grep -A 20 "Memory Device" | head -40
# หรือใช้ lshw
sudo lshw -class memory -short
# H/W path Device Class Description
# ================================================
# /0/0 memory 32GiB System Memory
# /0/0/0 memory 16GiB DIMM DDR4 3200 MHz
# /0/0/1 memory 16GiB DIMM DDR4 3200 MHz
ตรวจสอบ RAM บน Windows
# PowerShell - ดูข้อมูล RAM
Get-CimInstance Win32_PhysicalMemory | Format-Table Manufacturer, PartNumber, Speed, Capacity, DeviceLocator
# ตัวอย่าง output:
# Manufacturer PartNumber Speed Capacity DeviceLocator
# Samsung M471A2K43DB1-CWE 3200 17179869184 DIMM 0
# Samsung M471A2K43DB1-CWE 3200 17179869184 DIMM 1
# ดูจำนวน slot ทั้งหมด
Get-CimInstance Win32_PhysicalMemoryArray | Select-Object MemoryDevices, MaxCapacity
# ดูข้อมูล RAM ละเอียด
wmic memorychip get BankLabel, Capacity, Speed, MemoryType, TypeDetail
:: CMD - ตรวจ RAM usage
systeminfo | findstr /C:"Total Physical Memory" /C:"Available Physical Memory"
:: Total Physical Memory: 32,768 MB
:: Available Physical Memory: 22,456 MB
:: ดูข้อมูลจาก task manager ผ่าน command line
tasklist /FI "MEMUSAGE gt 500000"
:: แสดง process ที่ใช้ RAM มากกว่า 500 MB
ทดสอบ RAM ด้วย Memtest86+
เมื่อสงสัยว่า RAM มีปัญหา (เครื่อง blue screen, restart เอง, ไฟล์เสียหาย) ต้องทดสอบด้วย Memtest86+
# วิธีที่ 1: ใช้ memtest86+ จาก Linux
# ติดตั้ง
sudo apt install memtester
# ทดสอบ RAM 4 GB (ต้องมี RAM ว่างพอ)
sudo memtester 4G 2
# จะรันทดสอบ 2 รอบ แต่ละรอบทดสอบ:
# Stuck Address, Random Value, Compare XOR,
# Compare SUB, Compare MUL, Compare DIV,
# Compare OR, Compare AND, Sequential Increment,
# Solid Bits, Block Sequential, Checkerboard,
# Bit Spread, Bit Flip, Walking Ones, Walking Zeroes
# วิธีที่ 2: Memtest86+ bootable USB
# ดาวน์โหลดจาก https://memtest.org/
# สร้าง bootable USB
sudo dd if=memtest86+-7.00.bin of=/dev/sdb bs=1M
# Boot จาก USB แล้วรันทดสอบอย่างน้อย 2 รอบ
# วิธีที่ 3: Windows Memory Diagnostic (built-in)
# เปิด Run (Win+R) แล้วพิมพ์:
mdsched.exe
# เลือก "Restart now and check for problems"
# เครื่องจะ restart แล้วรันทดสอบอัตโนมัติ
# ดูผลหลังจาก boot กลับเข้า Windows:
# Event Viewer > Windows Logs > System
# หา Source: MemoryDiagnostics-Results
เพิ่ม RAM หรืออัพเกรด — สิ่งที่ต้องรู้
# ตรวจสอบก่อนซื้อ RAM ใหม่
# 1. ดูว่า motherboard รองรับ DDR อะไร
sudo dmidecode -t baseboard | grep "Product Name"
# แล้วไปเช็คสเปค motherboard บนเว็บผู้ผลิต
# 2. ดูจำนวน slot ว่าง
sudo dmidecode -t memory | grep "Size"
# 3. ดูความเร็วสูงสุดที่รองรับ
sudo dmidecode -t memory | grep "Maximum Voltage\|Maximum Clock Speed"
# 4. ตรวจสอบว่าใช้ Dual Channel หรือไม่
# ใส่ RAM จำนวนเท่ากันใน slot สีเดียวกัน (slot 1+3 หรือ 2+4)
sudo dmidecode -t memory | grep "Bank Locator\|Size"
# Bank Locator: BANK 0 Size: 16 GB ← slot 1
# Bank Locator: BANK 1 Size: No Module Installed
# Bank Locator: BANK 2 Size: 16 GB ← slot 3
# Bank Locator: BANK 3 Size: No Module Installed
หลักการเลือก RAM
- ซื้อเป็นคู่ — เพื่อใช้ Dual Channel ได้ bandwidth เพิ่ม 2 เท่า ซื้อ kit ที่ขายเป็นคู่ดีกว่าซื้อแยกเพราะ test มาด้วยกัน
- ความเร็วต้องตรงกัน — ถ้าใส่ RAM คนละความเร็ว ระบบจะรันที่ความเร็วของตัวที่ช้าที่สุด
- ดู CAS Latency (CL) — ยิ่งต่ำยิ่งดี DDR4-3200 CL16 เร็วกว่า DDR4-3200 CL18 สูตรคำนวณ true latency: (CL / ความเร็ว MHz) x 2000 = ns
- ECC vs non-ECC — server ใช้ ECC เพื่อตรวจจับและแก้ไข error อัตโนมัติ desktop ทั่วไปใช้ non-ECC
ตั้งค่า XMP/EXPO ใน BIOS เพื่อปลดล็อคความเร็ว RAM
RAM ที่ซื้อมาอาจรันที่ JEDEC speed (เช่น DDR4-2133) แม้จะเป็น DDR4-3200 ต้องเปิด XMP (Intel) หรือ EXPO (AMD) ใน BIOS เพื่อรันที่ความเร็วเต็ม
# ตรวจสอบว่า RAM รันที่ความเร็วเท่าไหร่จริงๆ
sudo dmidecode -t memory | grep -E "Configured Memory Speed|Speed"
# Speed: 3200 MT/s ← ความเร็วที่รองรับ
# Configured Memory Speed: 2133 MT/s ← ความเร็วที่รันจริง (ยังไม่เปิด XMP!)
# ขั้นตอนเปิด XMP:
# 1. Restart เครื่อง กด DEL หรือ F2 เข้า BIOS
# 2. หาเมนู Overclocking หรือ AI Tweaker
# 3. หา XMP Profile (Intel) หรือ EXPO Profile (AMD)
# 4. เลือก Profile 1
# 5. Save and Exit
# ตรวจสอบหลังเปิด XMP:
sudo dmidecode -t memory | grep "Configured Memory Speed"
# Configured Memory Speed: 3200 MT/s ← OK!
Monitor RAM Usage บน Server
# ดู process ที่ใช้ RAM มากที่สุด
ps aux --sort=-%mem | head -15
# ดู RAM ที่ process แต่ละตัวใช้จริง (RSS)
ps -eo pid, comm, rss --sort=-rss | head -10 | awk '{printf "%s\t%s\t%.1f MB\n", $1, $2, $3/1024}'
# ดู memory leak — ตรวจ RSS เพิ่มขึ้นเรื่อยๆ
watch -n 5 "ps -eo pid, comm, rss --sort=-rss | head -10"
# ตั้ง alert เมื่อ RAM ใช้เกิน 90%
cat > /usr/local/bin/check_ram.sh << 'EOF'
#!/bin/bash
THRESHOLD=90
USED=$(free | awk '/Mem:/ {printf "%.0f", $3/$2*100}')
if [ "$USED" -gt "$THRESHOLD" ]; then
echo "WARNING: RAM usage at % on $(hostname)" | \
mail -s "RAM Alert: $(hostname)" admin@example.com
fi
EOF
chmod +x /usr/local/bin/check_ram.sh
# เพิ่มใน crontab ให้ตรวจทุก 5 นาที
echo "*/5 * * * * /usr/local/bin/check_ram.sh" | sudo crontab -
FAQ - คำถามที่พบบ่อย
Q: DDR4 กับ DDR5 ใส่แทนกันได้ไหม?
A: ไม่ได้ ถึงแม้จะมี 288 pins เหมือนกัน แต่ตำแหน่ง notch (ร่องบากกลางแถบ) ต่างกัน motherboard ที่รองรับ DDR4 ใส่ DDR5 ไม่ได้ และในทางกลับกัน ต้องเลือก motherboard ให้ตรงกับ DDR ที่จะใช้
Q: RAM 32 GB จำเป็นไหมสำหรับการใช้งานทั่วไป?
A: สำหรับใช้งานทั่วไป (web, office, email) 16 GB เพียงพอ แต่ถ้าทำ video editing, รัน VM, เปิด browser หลายสิบ tab หรือเล่นเกมพร้อม stream ควรมี 32 GB สำหรับ server ที่รัน database หรือ container หลายตัวควรมี 64 GB ขึ้นไป
Q: Swap กับ RAM ต่างกันอย่างไร?
A: RAM เป็น hardware จริง เร็วมาก (DDR4-3200 = 25.6 GB/s) Swap เป็นพื้นที่บน disk ที่ OS ใช้เมื่อ RAM เต็ม ช้ากว่า RAM หลายเท่า (SSD SATA = 0.5 GB/s, NVMe = 3.5 GB/s) ถ้าเครื่องใช้ swap เยอะแสดงว่า RAM ไม่พอ ควรเพิ่ม RAM
Q: เปิด XMP แล้วเครื่อง unstable ทำอย่างไร?
A: ลองขั้นตอนนี้: (1) Reset BIOS เป็น default (2) เปิด XMP ใหม่แต่ลด speed ลง 1 ขั้น เช่น จาก 3600 เป็น 3200 (3) เพิ่ม DRAM voltage เล็กน้อย (DDR4 ไม่เกิน 1.45V) (4) เพิ่ม SOC/SA voltage เล็กน้อย (5) ถ้ายัง unstable อาจเป็นปัญหา compatibility ของ RAM กับ motherboard
