Technology

amd ram overclock

amd ram overclock
amd ram overclock | SiamCafe Blog
2026-03-11· อ. บอม — SiamCafe.net· 1,877 คำ

AMD RAM Overclock — คู่มือ Overclock แรมสำหรับ AMD 2026

RAM Overclocking บนแพลตฟอร์ม AMD เป็นวิธีเพิ่มประสิทธิภาพระบบที่คุ้มค่ามาก เพราะ AMD Ryzen processors มี Infinity Fabric ที่ทำงานสัมพันธ์กับความเร็ว RAM โดยตรง การ overclock RAM ให้เร็วขึ้นไม่เพียงเพิ่ม bandwidth แต่ยังลด latency และเพิ่มประสิทธิภาพ CPU ด้วย โดยเฉพาะใน gaming, content creation และ productivity workloads บทความนี้อธิบายวิธี overclock RAM บน AMD ตั้งแต่พื้นฐานจนถึง advanced tuning พร้อม Python tools สำหรับทดสอบ

AMD Infinity Fabric & RAM

# infinity_fabric.py — AMD Infinity Fabric and RAM relationship
import json

class InfinityFabric:
    RELATIONSHIP = {
        "fclk": {
            "name": "FCLK (Infinity Fabric Clock)",
            "description": "ความเร็วของ Infinity Fabric — เชื่อมต่อ CPU cores, cache, memory controller",
            "default": "ตาม RAM speed (1:1 ratio กับ MCLK)",
        },
        "mclk": {
            "name": "MCLK (Memory Clock)",
            "description": "ความเร็ว memory controller — = RAM speed / 2 (DDR = Double Data Rate)",
            "example": "DDR4-3600 → MCLK = 1800 MHz",
        },
        "uclk": {
            "name": "UCLK (Unified Memory Controller Clock)",
            "description": "ความเร็ว memory controller ภายใน CPU",
            "ratio": "1:1 กับ MCLK (แนะนำ) หรือ 1:2 (ถ้า RAM เร็วมาก)",
        },
    }

    SWEET_SPOTS = {
        "ryzen_3000": {
            "cpu": "Ryzen 3000 (Zen 2)",
            "sweet_spot": "DDR4-3600 CL16",
            "max_fclk": "~1800-1900 MHz",
            "note": "FCLK 1800 MHz = sweet spot, 1900 ขึ้นไปอาจไม่ stable",
        },
        "ryzen_5000": {
            "cpu": "Ryzen 5000 (Zen 3)",
            "sweet_spot": "DDR4-3600-3800 CL16-14",
            "max_fclk": "~1800-2000 MHz",
            "note": "บาง CPU ทำ FCLK 2000 MHz ได้ — silicon lottery",
        },
        "ryzen_7000": {
            "cpu": "Ryzen 7000 (Zen 4)",
            "sweet_spot": "DDR5-6000 CL30",
            "max_fclk": "~2000-2100 MHz",
            "note": "DDR5 platform — FCLK:MCLK 1:1 ที่ 3000 MHz (DDR5-6000)",
        },
        "ryzen_9000": {
            "cpu": "Ryzen 9000 (Zen 5)",
            "sweet_spot": "DDR5-6000-6400 CL28-30",
            "max_fclk": "~2000-2200 MHz",
            "note": "ปรับปรุง memory controller — OC ได้สูงกว่า Zen 4",
        },
    }

    def show_relationship(self):
        print("=== Infinity Fabric & RAM ===\n")
        for key, item in self.RELATIONSHIP.items():
            print(f"[{item['name']}]")
            print(f"  {item['description']}")
            print()

    def show_sweet_spots(self):
        print("=== Sweet Spots by Platform ===")
        for key, ss in self.SWEET_SPOTS.items():
            print(f"\n[{ss['cpu']}]")
            print(f"  Sweet Spot: {ss['sweet_spot']}")
            print(f"  Max FCLK: {ss['max_fclk']}")
            print(f"  Note: {ss['note']}")

fabric = InfinityFabric()
fabric.show_relationship()
fabric.show_sweet_spots()

วิธี Overclock RAM ทีละขั้น

# oc_steps.py — Step-by-step RAM overclocking
import json

class OverclockSteps:
    PREREQUISITES = {
        "bios_update": "อัพเดท BIOS เป็นเวอร์ชันล่าสุด — AGESA update ช่วย memory compatibility",
        "ram_check": "ตรวจสอบ RAM: IC type (Samsung B-die, Hynix CJR/DJR, Micron Rev.E)",
        "cooling": "ระบายอากาศดี — RAM อาจร้อนขึ้นเมื่อ OC",
        "stress_test": "เตรียม tools: MemTest86, TestMem5, OCCT, HWiNFO64",
    }

    STEPS = {
        "step1": {
            "name": "Step 1: เปิด XMP/EXPO",
            "description": "เข้า BIOS → เปิด XMP (Intel) หรือ EXPO (AMD) — ใช้ rated speed",
            "action": "BIOS → OC settings → XMP/EXPO Profile → เลือก Profile 1",
            "result": "RAM ทำงานที่ rated speed เช่น DDR4-3600 CL16",
        },
        "step2": {
            "name": "Step 2: ตั้ง FCLK = MCLK (1:1)",
            "description": "ตั้ง Infinity Fabric Clock ให้ตรงกับ Memory Clock",
            "action": "BIOS → FCLK Frequency → ตั้งเท่ากับ MCLK (เช่น 1800 MHz สำหรับ DDR4-3600)",
            "result": "1:1 ratio = latency ต่ำสุด",
        },
        "step3": {
            "name": "Step 3: เพิ่ม DRAM Voltage",
            "description": "เพิ่มแรงดันไฟ RAM เล็กน้อยเพื่อรองรับ OC",
            "action": "DDR4: 1.35V → 1.40-1.45V (max 1.50V), DDR5: 1.25V → 1.35-1.40V",
            "result": "RAM stable มากขึ้นที่ความเร็วสูง",
        },
        "step4": {
            "name": "Step 4: ปรับ Primary Timings",
            "description": "ลด CAS Latency (CL), tRCD, tRP, tRAS",
            "action": "เริ่มจาก XMP timings → ลดทีละ 1 → test stability",
            "result": "Latency ลดลง = performance เพิ่มขึ้น",
        },
        "step5": {
            "name": "Step 5: Stress Test",
            "description": "ทดสอบ stability อย่างน้อย 1 ชั่วโมง",
            "action": "TestMem5 (Anta777 Extreme config) หรือ MemTest86 (4 passes)",
            "result": "0 errors = stable, มี error = ลด speed หรือเพิ่ม voltage",
        },
    }

    def show_prerequisites(self):
        print("=== Prerequisites ===\n")
        for key, prereq in self.PREREQUISITES.items():
            print(f"  • {prereq}")

    def show_steps(self):
        print(f"\n=== Overclock Steps ===")
        for key, step in self.STEPS.items():
            print(f"\n[{step['name']}]")
            print(f"  {step['description']}")
            print(f"  Action: {step['action']}")

steps = OverclockSteps()
steps.show_prerequisites()
steps.show_steps()

Python RAM Benchmark

# benchmark.py — Python RAM benchmark tool
import json

class RAMBenchmark:
    CODE = """
# ram_benchmark.py — RAM performance benchmark
import subprocess
import json
import re
from datetime import datetime

class RAMBenchmarkRunner:
    def __init__(self):
        self.results = []
    
    def get_ram_info(self):
        '''Get RAM info using wmic (Windows)'''
        try:
            result = subprocess.run(
                ['wmic', 'memorychip', 'get', 
                 'Speed, Capacity, Manufacturer, PartNumber',
                 '/format:list'],
                capture_output=True, text=True
            )
            
            lines = [l.strip() for l in result.stdout.split('\\n') if '=' in l]
            info = {}
            for line in lines:
                key, val = line.split('=', 1)
                info[key.strip()] = val.strip()
            
            return info
        except Exception as e:
            return {"error": str(e)}
    
    def run_aida64_benchmark(self):
        '''Parse AIDA64 memory benchmark results'''
        # AIDA64 must be run separately
        return {
            "note": "Run AIDA64 → Tools → Memory Benchmark",
            "metrics": [
                "Read: MB/s",
                "Write: MB/s",
                "Copy: MB/s",
                "Latency: ns",
            ],
        }
    
    def calculate_theoretical(self, freq_mhz, channels=2, bus_width=64):
        '''Calculate theoretical bandwidth'''
        # DDR = Double Data Rate
        bandwidth_mbps = freq_mhz * 2 * channels * (bus_width / 8)
        bandwidth_gbps = bandwidth_mbps / 1000
        
        return {
            'frequency': f"{freq_mhz} MHz (DDR-{freq_mhz*2})",
            'channels': channels,
            'theoretical_bandwidth_mbps': round(bandwidth_mbps),
            'theoretical_bandwidth_gbps': round(bandwidth_gbps, 1),
        }
    
    def calculate_latency_ns(self, cl, freq_mhz):
        '''Calculate real latency in nanoseconds'''
        # Latency (ns) = CL / Frequency × 1000
        latency_ns = (cl / freq_mhz) * 1000
        return round(latency_ns, 2)
    
    def compare_configs(self, configs):
        '''Compare RAM configurations'''
        results = []
        for cfg in configs:
            bw = self.calculate_theoretical(cfg['freq'])
            latency = self.calculate_latency_ns(cfg['cl'], cfg['freq'])
            
            results.append({
                'name': cfg['name'],
                'speed': f"DDR-{cfg['freq']*2}",
                'timings': f"CL{cfg['cl']}",
                'bandwidth_gbps': bw['theoretical_bandwidth_gbps'],
                'latency_ns': latency,
            })
        
        return sorted(results, key=lambda x: x['latency_ns'])

# bench = RAMBenchmarkRunner()
# configs = [
#     {'name': 'Stock XMP', 'freq': 1600, 'cl': 16},
#     {'name': 'OC Tight', 'freq': 1800, 'cl': 14},
#     {'name': 'OC Fast', 'freq': 1900, 'cl': 16},
# ]
# results = bench.compare_configs(configs)
"""

    SAMPLE_RESULTS = [
        {"config": "DDR4-3200 CL16 (Stock)", "read": "48,500", "write": "26,400", "latency": "68.5 ns"},
        {"config": "DDR4-3600 CL16 (XMP)", "read": "53,200", "write": "28,800", "latency": "62.3 ns"},
        {"config": "DDR4-3600 CL14 (OC)", "read": "54,100", "write": "29,200", "latency": "56.8 ns"},
        {"config": "DDR4-3800 CL16 (OC)", "read": "56,800", "write": "30,500", "latency": "59.1 ns"},
    ]

    def show_code(self):
        print("=== RAM Benchmark ===")
        print(self.CODE[:600])

    def show_results(self):
        print(f"\n=== Sample Results (Ryzen 5 5600X) ===")
        print(f"  {'Config':<30} {'Read':<10} {'Write':<10} {'Latency'}")
        for r in self.SAMPLE_RESULTS:
            print(f"  {r['config']:<30} {r['read']:<10} {r['write']:<10} {r['latency']}")

bench = RAMBenchmark()
bench.show_code()
bench.show_results()

Timing Tuning Guide

# timings.py — RAM timing tuning guide
import json

class TimingGuide:
    PRIMARY = {
        "cl": {
            "name": "CAS Latency (CL/tCL)",
            "description": "จำนวน clock cycles ที่ RAM ใช้ตอบ request — ยิ่งต่ำยิ่งดี",
            "typical": "DDR4: CL14-18, DDR5: CL28-36",
            "impact": "สูง — ส่งผลต่อ latency มากที่สุด",
        },
        "trcd": {
            "name": "tRCD (RAS to CAS Delay)",
            "description": "เวลาระหว่าง row activation กับ column access",
            "typical": "DDR4: 14-20, DDR5: 32-40",
            "impact": "สูง",
        },
        "trp": {
            "name": "tRP (Row Precharge)",
            "description": "เวลาปิด row ก่อนเปิด row ใหม่",
            "typical": "DDR4: 14-20, DDR5: 32-40",
            "impact": "สูง",
        },
        "tras": {
            "name": "tRAS (Row Active Time)",
            "description": "เวลาที่ row ต้องเปิดอยู่ — กฎ: tRAS >= CL + tRCD",
            "typical": "DDR4: 28-40, DDR5: 56-76",
            "impact": "ปานกลาง",
        },
    }

    SECONDARY = {
        "trfc": {
            "name": "tRFC (Refresh Cycle Time)",
            "description": "เวลา refresh — ลดได้มาก ส่งผลต่อ performance เยอะ",
            "impact": "สูง — Samsung B-die: 260-300, Hynix: 350-500",
        },
        "trrd": {
            "name": "tRRD_S / tRRD_L",
            "description": "Row-to-Row delay — ลดได้เล็กน้อย",
            "impact": "ต่ำ-ปานกลาง",
        },
        "tfaw": {
            "name": "tFAW (Four Activate Window)",
            "description": "เวลา minimum ระหว่าง 4 activations ติดกัน",
            "impact": "ปานกลาง",
        },
    }

    IC_TYPES = {
        "samsung_b_die": {
            "name": "Samsung B-die",
            "description": "OC ดีที่สุด — tight timings, high voltage tolerance",
            "typical": "DDR4-3600 CL14 @ 1.45V ได้สบาย",
            "price": "แพงที่สุด — production หยุดแล้ว (หายาก)",
        },
        "hynix_djr": {
            "name": "Hynix DJR (D-die)",
            "description": "OC ดีมาก — ราคาดี คุ้มค่าที่สุด",
            "typical": "DDR4-3600 CL16 → OC DDR4-3800 CL16 ได้",
            "price": "ราคากลาง — หาง่าย",
        },
        "micron_rev_e": {
            "name": "Micron Rev.E (E-die)",
            "description": "OC frequency ได้สูง แต่ timings ไม่ tight เท่า B-die",
            "typical": "DDR4-3600 → OC DDR4-4000+ ได้ แต่ CL สูงกว่า",
            "price": "ราคาถูก — Crucial Ballistix ใช้ IC นี้",
        },
    }

    def show_primary(self):
        print("=== Primary Timings ===\n")
        for key, t in self.PRIMARY.items():
            print(f"[{t['name']}]")
            print(f"  {t['description']}")
            print(f"  Typical: {t['typical']}")
            print()

    def show_ic_types(self):
        print("=== RAM IC Types ===")
        for key, ic in self.IC_TYPES.items():
            print(f"\n[{ic['name']}]")
            print(f"  {ic['description']}")
            print(f"  Typical: {ic['typical']}")

timings = TimingGuide()
timings.show_primary()
timings.show_ic_types()

Stability Testing

# stability.py — RAM stability testing
import json

class StabilityTesting:
    TOOLS = {
        "testmem5": {
            "name": "TestMem5 (TM5)",
            "description": "เครื่องมือ test RAM ยอดนิยม — ใช้ config Anta777 Extreme",
            "duration": "20-60 นาที (Extreme config)",
            "pass_criteria": "0 errors, 3 cycles",
        },
        "memtest86": {
            "name": "MemTest86",
            "description": "Boot จาก USB — test ก่อน Windows load",
            "duration": "1-4 ชั่วโมง (4 passes)",
            "pass_criteria": "0 errors, 4 passes",
        },
        "occt": {
            "name": "OCCT Memory Test",
            "description": "ทดสอบ RAM + memory controller พร้อมกัน",
            "duration": "1 ชั่วโมง",
            "pass_criteria": "0 errors, ไม่มี WHEA errors",
        },
        "karhu": {
            "name": "Karhu RAM Test",
            "description": "Commercial tool — เร็วและแม่นยำที่สุด ($10)",
            "duration": "400%+ coverage",
            "pass_criteria": "400% coverage, 0 errors",
        },
    }

    TROUBLESHOOTING = {
        "errors_found": [
            "ลด frequency — เช่น DDR4-3800 → DDR4-3600",
            "เพิ่ม DRAM voltage — เพิ่มทีละ 0.01V (max 1.50V DDR4)",
            "เพิ่ม VDDG/VDDP voltage — ช่วย Infinity Fabric stability",
            "ปรับ timings ให้หลวมขึ้น — เพิ่ม CL, tRCD, tRP",
            "ลด FCLK — ถ้า FCLK > 1800 MHz อาจไม่ stable",
        ],
        "bsod": [
            "WHEA_UNCORRECTABLE_ERROR — FCLK ไม่ stable → ลด FCLK",
            "MEMORY_MANAGEMENT — RAM timing ไม่ stable → ปรับ timings",
            "IRQL_NOT_LESS_OR_EQUAL — voltage ไม่พอ → เพิ่ม voltage",
        ],
    }

    def show_tools(self):
        print("=== Stability Testing Tools ===\n")
        for key, tool in self.TOOLS.items():
            print(f"[{tool['name']}]")
            print(f"  {tool['description']}")
            print(f"  Duration: {tool['duration']}")
            print(f"  Pass: {tool['pass_criteria']}")
            print()

    def show_troubleshooting(self):
        print("=== Troubleshooting ===")
        print("\n  Errors Found:")
        for fix in self.TROUBLESHOOTING['errors_found'][:3]:
            print(f"    • {fix}")
        print("\n  BSOD Codes:")
        for bsod in self.TROUBLESHOOTING['bsod']:
            print(f"    • {bsod}")

test = StabilityTesting()
test.show_tools()
test.show_troubleshooting()

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

Q: Overclock RAM เสี่ยงไหม?

A: ความเสี่ยงต่ำมาก — RAM ทนทานกว่า CPU/GPU DDR4: อย่าเกิน 1.50V → ปลอดภัย 100% DDR5: อย่าเกิน 1.45V ความเสี่ยงจริง: data corruption ถ้า settings ไม่ stable — แก้ด้วย stress test ก่อนใช้งานจริง ถ้า settings ไม่ stable: BIOS reset (Clear CMOS) → กลับ default

Q: DDR4-3600 CL16 กับ DDR4-3200 CL14 อันไหนดีกว่า?

A: คำนวณ real latency: DDR4-3600 CL16: 16/1800 × 1000 = 8.89 ns DDR4-3200 CL14: 14/1600 × 1000 = 8.75 ns DDR4-3200 CL14 latency ต่ำกว่าเล็กน้อย แต่ DDR4-3600 มี bandwidth สูงกว่า สำหรับ AMD Ryzen: DDR4-3600 CL16 ดีกว่า — เพราะ FCLK 1800 MHz = sweet spot (bandwidth + Infinity Fabric speed สำคัญกว่า latency เล็กน้อย)

Q: XMP/EXPO พอไหม หรือต้อง manual OC?

A: XMP/EXPO พอสำหรับ 90% ของผู้ใช้ — ได้ performance 80-90% ของ manual OC Manual OC เพิ่มได้อีก 5-15%: ลด timings, ปรับ tRFC, เพิ่ม frequency เล็กน้อย คุ้มค่าถ้า: เล่นเกม competitive (1% lows สำคัญ) หรือ productivity ที่ memory-sensitive ไม่คุ้มถ้า: ใช้งานทั่วไป, ไม่มีเวลา stress test — XMP พอ

Q: RAM 2 แถว กับ 4 แถว อันไหนดีกว่า?

A: 2 แถว (Dual Rank ต่อ channel): OC ง่ายกว่า, stable กว่าที่ความเร็วสูง 4 แถว: ถ้าเป็น single rank = 4 แถวให้ dual rank per channel → performance ดีกว่า 2 แถว single rank แต่: 4 แถว OC ยากกว่า — memory controller ทำงานหนักกว่า แนะนำ: 2 x 16GB dual rank — ได้ทั้ง capacity และ OC headroom

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

overclock ram ddr4อ่านบทความ → amd 5600x overclockอ่านบทความ → overclock cpu amd fx 8350อ่านบทความ → overclock ram ddr3 1333 to 1600อ่านบทความ → overclock ram ddr3 1600 to 2133อ่านบทความ →

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