SiamCafe.net Blog
Technology

SSD PCIe M.2 คือ — เปรียบเทียบ NVMe SATA พร้อม Benchmark และ Monitoring

ssd pcie m2 คอ
ssd pcie m.2 คือ | SiamCafe Blog
2025-07-18· อ. บอม — SiamCafe.net· 1,298 คำ

SSD PCIe M.2 คืออะไรและทำงานอย่างไร

SSD PCIe M.2 เป็น Solid State Drive ที่ใช้ form factor M.2 (ขนาดเล็กเท่าแผ่นหมากฝรั่ง) และเชื่อมต่อผ่าน PCIe bus โดยตรง ทำให้มีความเร็วสูงกว่า SSD แบบ SATA หลายเท่า M.2 เป็นชื่อของ connector/form factor ส่วน NVMe (Non-Volatile Memory Express) เป็น protocol ที่ออกแบบมาเฉพาะสำหรับ SSD

M.2 SSD มี 2 ประเภทหลักคือ M.2 SATA ที่ใช้ SATA protocol ผ่าน M.2 connector ความเร็วสูงสุด 550 MB/s เท่ากับ SATA SSD ปกติ และ M.2 NVMe ที่ใช้ NVMe protocol ผ่าน PCIe bus ความเร็วสูงกว่า SATA หลายเท่า PCIe Gen 3 x4 ได้สูงสุด 3,500 MB/s, Gen 4 x4 ได้สูงสุด 7,000 MB/s และ Gen 5 x4 ได้สูงสุด 14,000 MB/s

ขนาดของ M.2 SSD ระบุด้วยตัวเลข 4 หรือ 5 หลักเช่น 2280 หมายความว่ากว้าง 22mm ยาว 80mm ซึ่งเป็นขนาดที่พบบ่อยที่สุด ขนาดอื่นๆเช่น 2230 (ใช้ใน Steam Deck), 2242 และ 22110

Key notch บน M.2 connector บอกประเภทของ SSD ได้แก่ B key สำหรับ SATA และ PCIe x2, M key สำหรับ NVMe PCIe x4 และ B+M key ที่รองรับทั้ง SATA และ NVMe ต้องตรวจสอบว่า motherboard รองรับ key type ไหนัก่อนซื้อ

เปรียบเทียบ NVMe กับ SATA และ PCIe Gen 3 4 5

ตารางเปรียบเทียบ SSD แต่ละประเภท

# เปรียบเทียบ SSD แต่ละประเภท
#
# ประเภท         | Interface  | Max Speed   | Latency  | ราคา/TB
# ============== | ========== | =========== | ======== | ========
# HDD 7200rpm    | SATA III   | ~200 MB/s   | ~10ms    | ~$20
# SATA SSD       | SATA III   | ~550 MB/s   | ~0.1ms   | ~$50
# NVMe Gen 3 x4  | PCIe 3.0   | ~3,500 MB/s | ~0.02ms  | ~$60
# NVMe Gen 4 x4  | PCIe 4.0   | ~7,000 MB/s | ~0.01ms  | ~$70
# NVMe Gen 5 x4  | PCIe 5.0   | ~14,000 MB/s| ~0.005ms | ~$150
#
# NAND Flash Types:
# SLC (1 bit/cell) — เร็วสุด ทนทานสุด แพงสุด (enterprise)
# MLC (2 bits/cell) — สมดุลดี (enterprise/prosumer)
# TLC (3 bits/cell) — คุ้มค่า (consumer/mainstream)
# QLC (4 bits/cell) — ถูกสุด ช้าสุด ทนทานน้อยสุด (storage)
#
# DRAM Cache:
# มี DRAM — เร็วสม่ำเสมอ เหมาะสำหรับ OS drive และ workload หนัก
# ไม่มี DRAM (DRAMless) — อาจช้าลงเมื่อเขียนมาก เหมาะสำหรับ secondary storage
# HMB (Host Memory Buffer) — ใช้ RAM ของระบบแทน DRAM บน SSD
#
# TBW (Terabytes Written) — อายุการใช้งาน:
# 256GB TLC SSD: ~150 TBW
# 512GB TLC SSD: ~300 TBW
# 1TB TLC SSD: ~600 TBW
# 2TB TLC SSD: ~1200 TBW
#
# สำหรับการใช้งานทั่วไปเขียน ~30GB/วัน
# 600 TBW / 30 GB = 20,000 วัน = ~54 ปี (เกิน warranty 5 ปี)

# SSD แนะนำ 2024:
# Budget: Kingston NV2 (Gen 4, DRAMless)
# Mid-range: Samsung 980 PRO, WD Black SN770 (Gen 4)
# High-end: Samsung 990 PRO, WD Black SN850X (Gen 4)
# Extreme: Crucial T700, Samsung 990 EVO Plus (Gen 5)

ตรวจสอบ SSD Health และ Performance บน Linux

ใช้ command line tools สำหรับตรวจสอบสถานะ SSD

# ตรวจสอบ SSD ที่ติดตั้งในระบบ
lsblk -d -o NAME, SIZE, MODEL, ROTA, TRAN, TYPE
# NAME  SIZE MODEL              ROTA TRAN   TYPE
# nvme0n1 1T Samsung SSD 990 PRO  0   nvme   disk
# sda   500G Samsung SSD 870 EVO  0   sata   disk

# ดูข้อมูล NVMe SSD
sudo nvme list
# Node          SN            Model                 Namespace Usage          Format         FW Rev
# /dev/nvme0n1  S6XXXXXXX     Samsung SSD 990 PRO   1         500.11 GB/1.00 TB  512 B + 0 B  4B2QJXD7

# ดูรายละเอียด NVMe
sudo nvme id-ctrl /dev/nvme0n1 | head -20

# SMART Health Information สำหรับ NVMe
sudo nvme smart-log /dev/nvme0n1
# Smart Log for NVME device:nvme0n1
# critical_warning                    : 0
# temperature                         : 35 C
# available_spare                     : 100%
# available_spare_threshold           : 10%
# percentage_used                     : 1%
# data_units_read                     : 12,345,678
# data_units_written                  : 8,765,432
# host_read_commands                  : 234,567,890
# host_write_commands                 : 123,456,789
# power_cycles                        : 150
# power_on_hours                      : 2,500
# unsafe_shutdowns                    : 5

# SMART สำหรับ SATA SSD
sudo smartctl -a /dev/sda
# === START OF SMART DATA SECTION ===
# SMART overall-health self-assessment test result: PASSED
# ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE
#   5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail
# 177 Wear_Leveling_Count     0x0013   099   099   000    Pre-fail
# 179 Used_Rsvd_Blk_Cnt_Tot   0x0013   100   100   010    Pre-fail
# 241 Total_LBAs_Written      0x0032   099   099   000    Old_age

# ตรวจสอบ temperature
sudo nvme smart-log /dev/nvme0n1 | grep temperature
# sensors ถ้าติดตั้ง lm-sensors
sensors | grep -i nvme

# ดูข้อมูล PCIe link speed
sudo lspci -vvv | grep -A 20 "NVMe"
# LnkCap: Speed 16GT/s (PCIe Gen 4), Width x4
# LnkSta: Speed 16GT/s, Width x4

# ตรวจสอบ firmware version
sudo nvme fw-log /dev/nvme0n1

# ติดตั้ง tools ที่จำเป็น
sudo apt install nvme-cli smartmontools fio hdparm -y

Benchmark SSD ด้วย fio และ dd

ทดสอบความเร็ว SSD ด้วยเครื่องมือ benchmark มาตรฐาน

# Benchmark ด้วย fio (Flexible I/O Tester)

# Sequential Read
sudo fio --name=seq_read --ioengine=libaio --direct=1 \
  --rw=read --bs=1M --numjobs=4 --size=1G \
  --runtime=30 --group_reporting --filename=/dev/nvme0n1

# Sequential Write
sudo fio --name=seq_write --ioengine=libaio --direct=1 \
  --rw=write --bs=1M --numjobs=4 --size=1G \
  --runtime=30 --group_reporting --filename=/tmp/fio_test

# Random Read (4K)
sudo fio --name=rand_read --ioengine=libaio --direct=1 \
  --rw=randread --bs=4k --numjobs=16 --iodepth=64 --size=1G \
  --runtime=30 --group_reporting --filename=/tmp/fio_test

# Random Write (4K)
sudo fio --name=rand_write --ioengine=libaio --direct=1 \
  --rw=randwrite --bs=4k --numjobs=16 --iodepth=64 --size=1G \
  --runtime=30 --group_reporting --filename=/tmp/fio_test

# Mixed Read/Write (70/30)
sudo fio --name=mixed --ioengine=libaio --direct=1 \
  --rw=randrw --rwmixread=70 --bs=4k --numjobs=8 --iodepth=32 \
  --size=1G --runtime=30 --group_reporting --filename=/tmp/fio_test

# Benchmark ด้วย dd (Quick test)
# Sequential Write
dd if=/dev/zero of=/tmp/dd_test bs=1M count=1024 conv=fdatasync 2>&1 | tail -1
# 1073741824 bytes (1.1 GB) copied, 0.285 s, 3.8 GB/s

# Sequential Read
dd if=/tmp/dd_test of=/dev/null bs=1M count=1024 2>&1 | tail -1

# Clear cache before read test
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"

# hdparm read benchmark
sudo hdparm -Tt /dev/nvme0n1
# Timing cached reads:   28000 MB in  2.00 seconds = 14000 MB/sec
# Timing buffered disk reads: 6400 MB in  3.00 seconds = 2133 MB/sec

# Cleanup
rm -f /tmp/fio_test /tmp/dd_test

# ผลลัพธ์ที่คาดหวัง (NVMe Gen 4):
# Sequential Read:  ~6,500-7,000 MB/s
# Sequential Write: ~5,000-6,500 MB/s
# Random Read 4K:   ~900,000-1,000,000 IOPS
# Random Write 4K:  ~800,000-1,200,000 IOPS

ตั้งค่า RAID และ LVM สำหรับ NVMe SSD

สร้าง software RAID และ LVM สำหรับ NVMe SSD

# สร้าง RAID 0 จาก NVMe SSD 2 ตัว (ความเร็วสูงสุด)
sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/nvme0n1 /dev/nvme1n1
sudo mkfs.ext4 /dev/md0
sudo mkdir /mnt/raid0
sudo mount /dev/md0 /mnt/raid0

# สร้าง RAID 1 (Mirror — ข้อมูลปลอดภัย)
sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/nvme0n1p1 /dev/nvme1n1p1
sudo mkfs.ext4 /dev/md1
sudo mkdir /mnt/raid1
sudo mount /dev/md1 /mnt/raid1

# ตรวจสอบ RAID
cat /proc/mdstat
sudo mdadm --detail /dev/md0

# บันทึก RAID config
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
sudo update-initramfs -u

# === LVM (Logical Volume Manager) ===
# สร้าง Physical Volume
sudo pvcreate /dev/nvme0n1p2

# สร้าง Volume Group
sudo vgcreate nvme-vg /dev/nvme0n1p2

# สร้าง Logical Volumes
sudo lvcreate -L 100G -n lv-root nvme-vg    # สำหรับ /
sudo lvcreate -L 50G -n lv-var nvme-vg      # สำหรับ /var
sudo lvcreate -l 100%FREE -n lv-data nvme-vg # ที่เหลือสำหรับ /data

# Format
sudo mkfs.ext4 /dev/nvme-vg/lv-root
sudo mkfs.ext4 /dev/nvme-vg/lv-var
sudo mkfs.xfs /dev/nvme-vg/lv-data

# ขยาย Logical Volume (ไม่ต้อง unmount)
sudo lvextend -L +50G /dev/nvme-vg/lv-data
sudo resize2fs /dev/nvme-vg/lv-data  # ext4
# sudo xfs_growfs /dev/nvme-vg/lv-data  # xfs

# ดูสถานะ
sudo pvs  # Physical Volumes
sudo vgs  # Volume Groups
sudo lvs  # Logical Volumes

# /etc/fstab สำหรับ mount ถาวร
echo '/dev/nvme-vg/lv-root / ext4 defaults, noatime 0 1' | sudo tee -a /etc/fstab
echo '/dev/nvme-vg/lv-var /var ext4 defaults, noatime 0 2' | sudo tee -a /etc/fstab
echo '/dev/nvme-vg/lv-data /data xfs defaults, noatime 0 2' | sudo tee -a /etc/fstab

Monitoring SSD ด้วย SMART และ Script อัตโนมัติ

สร้าง monitoring script สำหรับตรวจสอบสุขภาพ SSD อัตโนมัติ

#!/bin/bash
# ssd_monitor.sh — SSD Health Monitoring Script
set -euo pipefail

LOG_FILE="/var/log/ssd_health.log"
ALERT_TEMP=70          # องศาเตือน
ALERT_SPARE=20         # available spare % เตือน
ALERT_WEAR=80          # percentage used % เตือน

log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"; }

check_nvme() {
    local dev=$1
    local smart=$(sudo nvme smart-log "$dev" 2>/dev/null)
    
    if [ -z "$smart" ]; then
        log "ERROR: Cannot read SMART from $dev"
        return 1
    fi
    
    local temp=$(echo "$smart" | grep "^temperature" | awk '{print $3}')
    local spare=$(echo "$smart" | grep "available_spare " | awk '{print $3}' | tr -d '%')
    local used=$(echo "$smart" | grep "percentage_used" | awk '{print $3}' | tr -d '%')
    local written=$(echo "$smart" | grep "data_units_written" | awk '{print $3}' | tr -d ',')
    local hours=$(echo "$smart" | grep "power_on_hours" | awk '{print $3}' | tr -d ',')
    local warning=$(echo "$smart" | grep "critical_warning" | awk '{print $3}')
    
    # คำนวณ TBW
    local tbw_gb=$(echo "scale=2; $written * 512 / 1000000000" | bc 2>/dev/null || echo "N/A")
    
    log "$dev: temp=C spare=% used=% written=GB hours=h warning=$warning"
    
    # ตรวจสอบ alerts
    if [ "$warning" != "0" ]; then
        log "CRITICAL: $dev critical_warning=$warning"
    fi
    if [ "$temp" -gt "$ALERT_TEMP" ] 2>/dev/null; then
        log "WARNING: $dev temperature C exceeds C"
    fi
    if [ "$spare" -lt "$ALERT_SPARE" ] 2>/dev/null; then
        log "WARNING: $dev available_spare % below %"
    fi
    if [ "$used" -gt "$ALERT_WEAR" ] 2>/dev/null; then
        log "WARNING: $dev percentage_used % exceeds %"
    fi
}

check_sata() {
    local dev=$1
    local health=$(sudo smartctl -H "$dev" | grep "result" | awk '{print $NF}')
    local temp=$(sudo smartctl -A "$dev" | grep "Temperature" | awk '{print $10}')
    local wear=$(sudo smartctl -A "$dev" | grep "Wear_Leveling" | awk '{print $4}')
    
    log "$dev: health=$health temp=C wear_level=$wear"
    
    if [ "$health" != "PASSED" ]; then
        log "CRITICAL: $dev SMART health=$health"
    fi
}

# Main
log "=== SSD Health Check ==="

# ตรวจสอบ NVMe SSDs
for dev in /dev/nvme?n1; do
    [ -e "$dev" ] && check_nvme "$dev"
done

# ตรวจสอบ SATA SSDs
for dev in /dev/sd?; do
    if [ "$(cat /sys/block/$(basename $dev)/queue/rotational)" = "0" ]; then
        check_sata "$dev"
    fi
done

log "=== Check Complete ==="

# ตั้ง cron ให้รันทุกชั่วโมง
# echo "0 * * * * /usr/local/bin/ssd_monitor.sh" | sudo crontab -

FAQ คำถามที่พบบ่อย

Q: M.2 SATA กับ M.2 NVMe ใช้แทนกันได้ไหม?

A: ขึ้นอยู่กับ motherboard บาง M.2 slot รองรับทั้ง SATA และ NVMe (ดูจาก key notch B+M) แต่บาง slot รองรับแค่ NVMe (M key เท่านั้น) ต้องดู manual ของ motherboard ก่อนซื้อ ถ้า slot รองรับแค่ NVMe แล้วใส่ M.2 SATA จะตรวจไม่เจอ SSD

Q: NVMe Gen 5 จำเป็นไหมสำหรับการใช้งานทั่วไป?

A: ไม่จำเป็นสำหรับการใช้งานทั่วไปเช่นเปิดโปรแกรม เล่นเกม หรือทำงานออฟฟิศ ความแตกต่างระหว่าง Gen 3 กับ Gen 5 แทบสังเกตไม่ได้ในการใช้งานปกติ Gen 5 เหมาะสำหรับ video editing ไฟล์ขนาดใหญ่ database server หรือ workload ที่ต้อง sequential read/write สูงมาก

Q: SSD ต้อง TRIM ไหม?

A: ต้อง TRIM ช่วยให้ SSD รู้ว่า block ไหนไม่ได้ใช้แล้วสามารถ erase ได้ ทำให้ write performance ไม่ลดลงเมื่อใช้นานๆ Linux เปิด TRIM อัตโนมัติผ่าน fstrim.timer หรือใส่ discard option ใน fstab Windows เปิด TRIM อัตโนมัติอยู่แล้ว ตรวจสอบด้วย sudo fstrim -v / หรือ systemctl status fstrim.timer

Q: SSD ร้อนเกินไปทำอย่างไร?

A: NVMe SSD อาจร้อนถึง 70-80 องศาเมื่อ write หนักซึ่งจะ thermal throttle ลดความเร็วลง แก้ไขด้วยการติด heatsink บน SSD (มาพร้อม motherboard หลายรุ่น) ตรวจสอบ airflow ในเคส หลีกเลี่ยงการวาง SSD ใกล้ GPU ที่ร้อน และใช้ thermal pad คุณภาพดีระหว่าง SSD กับ heatsink

Q: เลือก TLC หรือ QLC ดี?

A: TLC เหมาะสำหรับ OS drive และ workload ที่เขียนบ่อยเพราะทนทานกว่าและ write performance สม่ำเสมอกว่า QLC เหมาะสำหรับ storage drive ที่เน้นอ่านมากกว่าเขียนเช่นเก็บเกม เก็บไฟล์ เก็บ backup เพราะราคาถูกกว่า capacity เยอะกว่า สำหรับ drive หลักแนะนำ TLC

📖 บทความที่เกี่ยวข้อง

512gb pcie nvme m.2 ssd คืออ่านบทความ → ssd pcie คืออ่านบทความ → nvme pcie gen3x4 ssd คืออ่านบทความ → ssd pcie m 2 คืออ่านบทความ → ssd hdd คืออ่านบทความ →

📚 ดูบทความทั้งหมด →