1 คะแนน โดย GN⁺ 2024-05-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นการทดลองนำ QLC NAND ของ Crucial BX500 มาปรับโครงสร้างใหม่เป็นโหมด pSLC ด้วย MPTools โดยลดความจุจาก 500GB เหลือประมาณ 120GB แลกกับความทนทานและประสิทธิภาพบางส่วนที่เพิ่มขึ้นอย่างมาก
  • การแปลงเป็นงานเฟิร์มแวร์และการตั้งค่าที่ปรับให้เข้ากับคอนโทรลเลอร์ Silicon Motion SM2259XT2 และ NAND Micron N48R หากล้มเหลวอาจทำให้ SSD เสียหาย การรับประกันเป็นโมฆะ และข้อมูลถูกลบได้
  • ในสถานะ QLC พื้นฐาน ค่า TBW ตามการคำนวณอยู่ที่ 120TB แต่ในโหมด pSLC คำนวณได้ว่าสามารถเพิ่มเป็น 4,000TB TBW ตามเงื่อนไข 60,000 P/E cycle, ความจุ 120GB และ WAF 1.8
  • ในเบนช์มาร์กแบบ sequential ระยะสั้น ความแตกต่างมีน้อย แต่ในด้านประสิทธิภาพ random, latency, การทดสอบ productivity ของ PCMark 10 และการเขียนต่อเนื่องระยะยาว ความแตกต่างของ โหมด pSLC ชัดเจน
  • สถานะพื้นฐานหลังจาก SLC cache ประมาณ 45GB แล้ว ความเร็วเฉลี่ยตกลงมาอยู่ราว 50MB/s ส่วนหลังแปลงเป็น pSLC ยังคงรักษาความเร็วประมาณ 498~500MB/s ได้ทั้งตลอดความจุ 120GB และการเขียนซ้ำ

อุปกรณ์ทดลองและความเสี่ยง

  • อุปกรณ์ทดลองคือ SSD Crucial BX500 ที่ผ่านการทดสอบมาหลายครั้ง
  • แม้ขั้นตอนเองจะปลอดภัยกว่าการโอเวอร์คล็อก แต่ก็รวมถึงการแฟลชเฟิร์มแวร์ จึงต้องระมัดระวัง
  • เมื่อแฟลชเฟิร์มแวร์ ข้อมูลทั้งหมดจะถูกลบ จึงต้องสำรองข้อมูลไว้ก่อน
  • หากทำการแปลง การรับประกัน SSD จะเป็นโมฆะ
  • เครื่องมือที่ต้องใช้คืออะแดปเตอร์ SATA-USB 3.0 ที่ใช้ชิปบริดจ์ Jmicron JMS578 Bridge Chip และแคลมป์สำหรับชอร์ตขา ROM/Safe Mode บน PCB ของ SSD

โครงสร้างฮาร์ดแวร์ของ BX500

  • คอนโทรลเลอร์คือ Silicon Motion SM2259XT2 ซึ่งเป็นรุ่นย่อยของ SM2259XT
    • คอนโทรลเลอร์แบบคอร์เดียว
    • สถาปัตยกรรม ARC 32 บิต
    • ทำงานได้สูงสุด 550MHz
    • ใน SSD ตัวนี้ทำงานที่ 437.5MHz
  • SM2259XT2 รองรับได้สูงสุด 2 ช่องสัญญาณ และ Chip Enable สูงสุด 8 ตัวต่อช่องสัญญาณ และสามารถสื่อสารกับ die ได้สูงสุด 16 ตัวผ่าน interleaving
  • รุ่นเปรียบเทียบอย่าง SM2259XT รองรับ die ได้สูงสุด 16 ตัวเช่นกัน ด้วยโครงสร้าง 4 ช่องสัญญาณและ C.E. 4 ตัว
  • SATA SSD ตัวนี้เป็นโครงสร้าง DRAM-Less และไม่รองรับ Host Memory Buffer ด้วย

NAND และลักษณะการทำงานพื้นฐาน

  • รุ่น 500GB มี NAND flash 2 ตัวที่ระบุว่า “NY240”
  • จากการถอดรหัสยืนยันว่าเป็น NAND Micron MT29F2T08GELCEJ4-QU:C, N48R Media Grade
    • 1Tb ต่อ die หรือ 128GiB
    • มี data layer 176 ชั้น และ gate รวม 195 ชั้น
    • ประสิทธิภาพของ array 90.2%
  • NAND flash แต่ละตัวมี die 2 ตัว จึงเป็น 256GB ต่อ NAND และรวมทั้งหมดราว 500GB
  • NAND สื่อสารกับคอนโทรลเลอร์ที่ 262.5MHz หรือ 525MT/s
  • die N48R สามารถทำงานได้ถึง 800MHz หรือ 1600MT/s แต่ใน SSD ตัวนี้ตั้งค่าไว้ต่ำกว่านั้นมาก
  • การตั้งค่าความเร็วต่ำอาจเกี่ยวข้องกับการลดการใช้พลังงานและความร้อน, ไม่ผ่านเกณฑ์คุณภาพสำหรับการทำงานความเร็วสูง, ความทนทานที่อาจต่ำ หรือการจัดหา NAND ราคาประหยัด

ขั้นตอนการแปลงด้วย MPTools

  • ใช้ MPTools ซึ่งเป็นเครื่องมือผลิตจำนวนมากสำหรับคอนโทรลเลอร์ Silicon Motion
  • เครื่องมือที่ใช้คือ “SMI SM2259XT2 MPTool FIMN48 V0304A FWV0303B0” และต้องตรงกับทั้งคอนโทรลเลอร์และ NAND flash
  • ก่อนอื่นต้องอ่านและเก็บพารามิเตอร์เดิมจาก SSD ไว้
    • Flash IO Driving และรายการย่อย
    • Flash Control Driving
    • Flash DQS/Data Driving
    • Control ODT
    • Flash ODT
    • Schmitt Window Trigger
  • ใช้ Scan ใน MPTools เพื่อค้นหา SSD และตรวจสอบการตั้งค่าจากโรงงาน รวมถึงความเร็วคอนโทรลเลอร์และ NAND ที่รายการ “Ready (FW: M6CR061, MN48R)”
  • เพื่อให้เปรียบเทียบอย่างเป็นธรรม จึงคงความถี่ของคอนโทรลเลอร์และ NAND ไว้ตามค่าเดิม

การตั้งค่าเพื่อเปิดใช้โหมด pSLC

  • ใน “Edit Config” ตั้งชื่อโปรเจกต์และแท็กเวอร์ชันเฟิร์มแวร์
    • ตัวอย่างชื่อรุ่นคือ “SSD SLC Test”
    • ตัวอย่างเวอร์ชันเฟิร์มแวร์คือ “SSD-SLC”
  • Flash Control Driving และ Flash DQS/Data Driving คงค่าเดิมคือ 66(hex)
  • ความถี่ CPU และ NAND ก็ปรับให้ตรงกับเงื่อนไขเปรียบเทียบเดิม และตั้ง Output driving เป็น 03H
  • แก้ไขไฟล์ Setting.set ของ MPTools เพื่อแสดงตัวเลือกที่เกี่ยวกับ pSLC
    • เปลี่ยน ENFWTAG=1 ใน [Function] เป็น ENFWTAG=0
    • เพิ่ม EnSLCMode=1 ใน [Option]
  • หลังจากนั้นตัวเลือก Force SLC Mode จะปรากฏใน MPTools
  • ต้องคัดลอกไฟล์ boot และไฟล์ initialization ภายในโฟลเดอร์เฟิร์มแวร์ไปยังไดเรกทอรีเฉพาะ จึงจะแปลงได้จริง
  • ขั้นตอนเกี่ยวกับไฟล์นี้ปรับให้เข้ากับชุด SM2259XT2 + N48R NAND และหากเป็น NAND อื่น ชื่อโฟลเดอร์และโครงสร้างไฟล์จะแตกต่างกัน
  • NAND บางรุ่นอาจไม่เข้ากันได้ 100% และ NAND ที่ทดสอบแล้วคือ NAND ของ Intel และ Micron

การคำนวณความทนทาน

  • การคำนวณความทนทานต้องใช้ Write Amplification Factor, NAND Program/Erase Cycle และความจุ SSD
  • การคำนวณที่ละเอียดขึ้นจะมีพารามิเตอร์เพิ่มเติม เช่น มาตรฐาน JEDEC JESD218A และ Wear-Leveling Efficiency
  • SSD ในสถานะ QLC พื้นฐานมี TBW 120TB และคำนวณ P/E cycle ของ N48R Media Grade NAND ได้ประมาณ 900
  • WAF ในสถานะพื้นฐานตามการคำนวณคือ 3.75 และในการทดสอบจริงใกล้เคียง 3.8
  • ในสถานะ pSLC die ของ NAND สามารถทนได้สูงสุด 60,000 P/E cycles ตาม datasheet
  • หลังแปลงเป็น pSLC ความจุลดลงเหลือประมาณ 0.12TB หรือ 120GB
  • ผลการคำนวณที่ WAF 1.8 ได้ TBW เท่ากับ 4,000TB
  • TBW เพิ่มจาก 120TB ในสถานะ QLC 500GB เป็น 4,000TB ในสถานะ pSLC 120GB หรือเพิ่มขึ้นมากกว่า 3333%

สภาพแวดล้อมการทดสอบประสิทธิภาพ

  • OS คือ Windows 11 Pro 64-bit 23H2
  • CPU คือ Intel Core i7-13700K โดยตั้งค่าทุกคอร์ไว้ที่ 5.7GHz
  • RAM เป็นชุด 2×16GB DDR4-3200MHz CL16 Netac
  • เมนบอร์ดคือ MSI Z790-P PRO WIFI D4 และ BIOS เวอร์ชัน 7E06v18
  • GPU คือ RTX 4060 Galax 1-Click OC
  • ไดรฟ์ OS คือ Solidigm P44 Pro 2TB และ SSD ที่ทดสอบใช้เป็น BX500 “SLC-Test”
  • ปิด Windows indexing, การอัปเดต, แอปเบื้องหลัง และแอนติไวรัส เพื่อลดความแปรปรวนของการทดสอบ
  • SSD ทดสอบถูกใช้เป็นไดรฟ์รอง และรวมการทดสอบในสถานะใช้งาน 0% และ 50%
  • การทดสอบพลังงานใช้ Quarch PPM QTL1999 วัด idle, การทดสอบเขียน 1 ชั่วโมง และการใช้พลังงานเฉลี่ย

ผล CrystalDiskMark

  • การทดสอบ sequential ใช้ 2×1GiB, บล็อก 1MiB, 8 queues, 1 thread
  • การทดสอบ random ใช้ 2×1GiB, บล็อก 4KiB, 1 queue, 1/2/4/8/16 threads
  • ในการทดสอบ sequential แทบไม่มีความแตกต่าง
    • เพราะแค่ pSLC cache พื้นฐานก็ถึงแบนด์วิดท์สูงสุดของ SATA SSD และความเร็ว sequential ที่ผู้ผลิตระบุแล้ว
    • ความแตกต่างจะเห็นในเบนช์มาร์กที่ยาวและหนักกว่า
  • latency ลดลงอย่างมาก
    • ในสถานะพื้นฐาน หลัง idle แล้ว NAND จะเริ่มอ่าน/เขียนใน QLC native mode และมี latency ก่อนถูกโปรแกรมใหม่เป็น SLC
    • ในโหมด pSLC จะอยู่ในสถานะ pSLC ตลอดเวลา จึงมี latency ต่ำกว่า
  • ความเร็ว random มีความแตกต่างมากกว่าความเร็ว sequential
  • ที่ QD1 ความเร็วอ่านเพิ่มขึ้นมากกว่า 16% และความเร็วเขียนเพิ่มขึ้นมากกว่า 30%

ผล ATTO, 3DMark, PCMark 10

  • ATTO Disk Benchmark ทดสอบด้วยขนาดบล็อกตั้งแต่ 512B ถึง 8MiB, ขนาดไฟล์ 256MB และ Queue Depth 1·4
  • ใน ATTO SSD โหมด pSLC นำหน้า SSD สถานะพื้นฐานในทุกขนาดบล็อก
  • ที่ QD1 ก็เกิดรูปแบบเดียวกัน แต่ในบางขนาดบล็อก ความแตกต่างน้อยกว่า QD4
  • 3DMark Storage Benchmark รวมการโหลดเกม, การอัดและสตรีม OBS 1080p 60FPS, การติดตั้งเกม และการโอนไฟล์โฟลเดอร์เกม
  • แม้ในสภาพแวดล้อมจริงที่เบาอย่าง 3DMark ก็มีความต่างด้านประสิทธิภาพและ latency แต่อาจไม่ถึงขั้นรู้สึกได้ชัดเจนในการใช้งานประจำวัน
  • PCMark 10 Full System Drive Benchmark เน้น productivity และมีสัดส่วนการเขียนมากกว่า 3DMark
  • ใน PCMark 10 เห็นความแตกต่างในการใช้งานจริงชัดเจน และความต่างด้านประสิทธิภาพเกือบ สองเท่า

Premiere Pro, การบูต, การโหลดเกม

  • การทดสอบ Adobe Premiere Pro 2021 วัดเวลาที่ใช้เปิดโปรเจกต์ขนาดประมาณ 16.5GB, ความละเอียด 4K, บิตเรต 120Mbps และมีเอฟเฟกต์จำนวนมากจนพร้อมแก้ไขได้
  • การโหลดโปรเจกต์ Premiere Pro ส่วนใหญ่เป็นสถานการณ์อ่าน sequential จึงแทบไม่มีความแตกต่าง และใกล้เคียงกับความแปรปรวนระหว่างการรัน
  • เปรียบเทียบเวลาโหลดเกมด้วยเบนช์มาร์ก Final Fantasy XIV
  • การโหลดเกมรู้สึกถึงความต่างได้ยาก เพราะข้อจำกัดของ DirectStorage และ API อื่น
  • การบูต Windows ก็เป็นการวัดจากระบบใหม่ แต่ไม่สามารถใช้ประโยชน์จากฟีเจอร์ที่นำไปใช้กับ SSD ได้ จึงไม่ต่างกันมาก

SLC cache และการเขียนระยะยาว

  • SSD จำนวนมากในปัจจุบันใช้พื้นที่เก็บข้อมูลบางส่วนเป็น SLC Caching
    • ใช้บางส่วนของ MLC, TLC, QLC NAND เป็นพื้นที่เก็บ 1 บิตต่อเซลล์ ทำหน้าที่เหมือนบัฟเฟอร์สำหรับเขียนและอ่าน
    • เมื่อบัฟเฟอร์หมด คอนโทรลเลอร์จะเขียนลงพื้นที่ native NAND
  • ผลการทดสอบ IOmeter ชี้ว่า pSLC cache พื้นฐานของ SSD ตัวนี้เป็นแบบ dynamic และน่าจะมีขนาดประมาณ 45GB
  • ในสถานะพื้นฐาน รักษาความเร็วเฉลี่ยประมาณ 493MB/s ได้จนกว่า cache จะหมด
  • หลังเขียนไป 45GB จะเข้าสู่กระบวนการ folding และเผยจุดอ่อนของ QLC SSD
  • ความเร็วเขียนต่อเนื่องหลัง cache ลดลงเหลือเฉลี่ยประมาณ 50MB/s
  • หลังแปลงเป็น pSLC สามารถเขียนเต็มความจุ 120GB ได้ที่ความเร็วเฉลี่ย 498MB/s
  • แม้เขียนไปถึง 500GB ซึ่งเท่ากับเขียนซ้ำทั้งความจุมากกว่า 4 รอบ ก็ยังรักษาความเร็วเกือบ 500MB/s ได้
  • หากรวม pSLC cache, folding และพื้นที่ native แล้ว ความต่างของความเร็วเขียนเฉลี่ยอยู่ในระดับเกือบ 10 เท่า

การคัดลอกไฟล์, อุณหภูมิ, พลังงาน

  • การทดสอบคัดลอกไฟล์คือคัดลอก Windows 10 21H1 ISO ขนาด 6.25GB และโฟลเดอร์ติดตั้ง CSGO ขนาด 25.2GB จาก RAM Disk ไปยัง SSD
  • ไฟล์ทดสอบทั้งสองเล็กกว่า SLC cache 45GB ของ SSD พื้นฐาน จึงไม่มีความแตกต่างในการทดสอบคัดลอกแบบใช้งานจริง
  • เหตุผลที่ไม่ได้ทดสอบไฟล์ใหญ่กว่านี้ เพราะหน่วยความจำที่ใช้กับ RAM Disk จำกัดอยู่ที่ 32GB
  • ในการทดสอบอุณหภูมิ SSD ไม่ร้อนมาก และคาดว่าเซนเซอร์เป็นเซนเซอร์ NAND Flash
  • ในการทดสอบพลังงาน หลังแปลงเป็น pSLC ประสิทธิภาพต่อพลังงานเพิ่มขึ้นอย่างมาก
    • สถานะ QLC พื้นฐานทำงานอยู่นานที่ต่ำกว่า 55MB/s ในการทดสอบที่เกิน cache 45GB ไปมาก จึงมีประสิทธิภาพต่ำ
    • โหมด pSLC ไม่มีแบนด์วิดท์ตกในระหว่างเขียนข้อมูลเป็นสองเท่าของความจุตัวเอง และใช้พลังงานต่ำกว่าด้วย
  • เหตุผลที่โหมด pSLC ใช้พลังงานลดลงคือ SLC NAND ใช้ logical level เพียง 2 ระดับ จึงต้องการ threshold voltage ต่ำกว่า
  • QLC NAND ใช้ logical level 16 ระดับ จึงต้องการ threshold voltage สูงกว่า
  • แม้ในสถานะ idle โหมด pSLC ก็ใช้พลังงานต่ำกว่า

สรุป

  • หากทำขั้นตอนไม่ถูกต้อง SSD อาจเสียหายได้ จึงต้องระมัดระวัง
  • ความต่างด้านประสิทธิภาพของการแปลง pSLC ขึ้นอยู่กับสถานการณ์
    • ในเบนช์มาร์ก sequential สั้น ๆ, การคัดลอกไฟล์ขนาดเล็ก, การโหลดเกม และการบูต Windows ความแตกต่างมีน้อย
    • ในประสิทธิภาพ random, latency, การทดสอบ productivity และการเขียนต่อเนื่องระยะยาว ความแตกต่างมาก
  • การเปลี่ยนแปลงที่ใหญ่ที่สุดคือ ความทนทาน โดย TBW ตามการคำนวณเพิ่มจาก 120TB เป็น 4,000TB
  • แต่ความจุที่ใช้งานได้ลดจาก 500GB เหลือประมาณ 120GB

1 ความคิดเห็น

 
GN⁺ 2024-05-20
ความคิดเห็นบน Hacker News
  • ไม่จำเป็นต้องลำบากถึงขนาดนั้นเพื่อใช้ SSD ราคาถูกที่ไม่มี DRAM ในโหมด pSLC
    แค่ทำ over-provisioning แบบลดการใช้งานพื้นที่ ให้ใช้เพียง 25~33% ของความจุทั้งหมดก็พอ
    คอนโทรลเลอร์แบบไม่มี DRAM ราคาถูกส่วนใหญ่ทำงานในโหมดแคชทั้งดิสก์ โดยเขียนทั้งหมดเป็น pSLC ก่อน แล้วค่อยจัดกลุ่มเซลล์บางส่วนใหม่เป็น TLC/QLC เพื่อคืนพื้นที่ หลังจากเซลล์เต็มแล้ว
    ถ้าเป็น TLC ให้สร้างพาร์ทิชันขนาดแค่ 1/3 ของดิสก์ ถ้าเป็น QLC ให้สร้างแค่ 1/4 แล้วปล่อยพื้นที่ว่างที่เหลือให้ถูก TRIM ไว้และไม่มีการเขียนถึงเลย ก็จะเขียนเป็น pSLC อยู่เสมอ
    หากต้องการตรวจว่า SSD รุ่นที่สนใจใช้วิธีนี้หรือไม่ ให้หาเบนช์มาร์กเขียนทั้งดิสก์ของ "HD Tune" สำหรับรุ่นนั้นดู ถ้าช่วง 1/3~1/4 แรกเร็ว แล้วช่วงที่เหลือช้าลงอย่างน่าเวทนา ก็ถือได้ว่าเป็นโหมดแคชทั้งดิสก์

    • สงสัยว่าจะตรวจยืนยันได้อย่างไรว่าสถานะนี้จะคงอยู่ต่อไป
      วิธีแบ่งพาร์ทิชันแค่บางส่วนของดิสก์ให้ความรู้สึกเหมือนยุค SCSI 160GB ที่บอกว่า “ใช้เฉพาะเซกเตอร์ด้านนอกกันเถอะ”
    • หากเข้าถึงแค่บางส่วนของ LBA FTL ในอุดมคติก็น่าจะทำงานแบบนั้นจริง
      แต่ก็อย่างที่ว่า ผู้ผลิตอาจปรับเฟิร์มแวร์ต่างกันได้ และการดัดแปลงนี้แทบจะรับประกันได้ว่าพื้นที่ทั้งหมดจะถูกใช้เป็น SLC
    • ดูส่วน “SLC CACHING” ตอนท้ายของบทความต้นฉบับได้
      แนวทางนี้แม้แคช SLC จริงจะมี 120GB ก็น่าจะทำงานได้ดีแค่ถึง 45GB เพราะโปรเซสสำหรับ paging จะเริ่มก่อนที่ SLC จะถูกใช้จนหมด
      ถ้าไม่ต้องการ 66% ของความจุ SLC ของไดรฟ์ วิธีทำพาร์ทิชันเล็กกว่านั้นก็ง่ายและปลอดภัยกว่า
    • จะรับประกันได้อย่างไรว่าพื้นที่ว่างถูก TRIM แล้ว? สงสัยว่าสามารถ TRIM เฉพาะบางช่วงของดิสก์ได้หรือไม่
  • แฮ็กนี้เท่ากับเปลี่ยน SSD 480GB ให้เป็น SSD 120GB
    แต่แลกกับความทนทานต่อการเขียน หรือปริมาณข้อมูลที่เขียนได้ก่อนคาดว่าจะเสีย เพิ่มจาก 120TB เป็น 4000TB จึงอาจเป็นการประนีประนอมที่มีประโยชน์มากสำหรับดิสก์เก็บล็อก
    ไม่เคยเห็นผู้ผลิตมีตัวเลือกแบบนี้ให้ใช้ เลยสงสัยว่าทำไมถึงไม่ทำ

    • มีบริษัทที่ขาย SLC SSD สำหรับงานอุตสาหกรรมอยู่
      เช่น Swissbit ที่ขายผลิตภัณฑ์สำหรับอุตสาหกรรมซึ่งใช้แฟลช TLC หรือ QLC แต่ไม่ได้ใช้ในโหมดนั้น
    • ไม่เข้าใจว่าผู้เขียนคำนวณว่าความทนทานเพิ่มขึ้น 30 เท่าได้อย่างไร ทั้งที่บอกว่าลด write amplification factor จาก 3.8 เหลือ 2.0
      ระดับนั้นน่าจะคาดหวังได้ประมาณ 2 เท่า
      ดูเหมือนค่าเริ่มต้นใช้ตัวเลขรับประกันของ OEM คือ 120TBW ส่วนค่าสุดท้ายใช้สเปก P/E cycle ของ NAND ซึ่งดูน่าสงสัย
      ถ้ามีอะไรที่ผมพลาดไป ก็น่าจะเป็นกรณีที่โหมด pSLC ลดแรงดันโปรแกรมเซลล์ลงอย่างมากจนทำให้ P/E cycle เพิ่มขึ้นแบบก้าวกระโดด แต่เรื่องนั้นก็ควรถูกรวมอยู่ใน write amplification factor ด้วย
    • สงสัยว่าจะมีประโยชน์ไหมถ้าใช้เป็น ดิสก์แคช ของ ZFS หรือ Synology แม้คงต้องปรับแต่งเพิ่มอีก
    • ผู้ผลิตมีของแบบนี้อยู่แล้วในรูปไดรฟ์ TLC
      แฮ็กนี้อาจทำให้ข้อมูลสูญหายและไม่มีการซัพพอร์ต แต่ไดรฟ์ TLC มีการซัพพอร์ต
      วิธีนี้ให้ความทนทานการเขียน 4000TB บน 120GB แต่ด้วยเงิน 200 ดอลลาร์ก็ซื้อ ไดรฟ์ TLC 4TB ที่มีความทนทานการเขียน 3000TB ได้
    • การเก็บรักษาข้อมูลขึ้นอยู่กับการทำงานของเฟิร์มแวร์ ซึ่งผู้ใช้มองไม่เห็นข้างในเลย
      ไดรฟ์สำหรับผู้บริโภคส่วนใหญ่น่าจะลด การเก็บรักษาข้อมูล ลง
  • ส่วนที่บทความไม่ได้เน้นชัดคือ ความทนทานกับการเก็บรักษาข้อมูล มีความเกี่ยวข้องกันมาก
    เซลล์แฟลชเสื่อมด้วยการรั่วไหลที่มากขึ้นเมื่อผ่านรอบการเขียนลบมากขึ้น ดังนั้นยิ่งมีจำนวนรอบมาก ก็ยิ่งสูญเสียประจุเร็วขึ้น
    SLC ต้องแยกแยะเพียง 2 สถานะ แทนที่จะเป็น 16 สถานะแบบ QLC ดังนั้นที่จำนวนรอบเท่ากัน ข้อมูลในโหมด SLC จะคงอยู่ได้นานกว่ามาก
    กล่าวคือการดัดแปลงนี้ไม่ได้ให้แค่ความทนทานสุดขั้ว แต่ยังได้การเก็บรักษาข้อมูลด้วย
    ผู้ผลิตมักระบุเรื่องนี้ในรูปแบบ “N ปีหลังจาก M รอบ” โดย SLC ยุคแรกถูกประเมินไว้ที่ 10 ปีหลัง 100K รอบ ส่วน QLC ตัวนี้อาจอยู่ได้ 1 ปีหลัง 900 รอบในโหมด QLC และ 1 ปีหลัง 60K รอบในโหมด SLC
    หากไม่ได้หมุนเวียนบล็อกจริงถึงขนาดนั้น การเก็บรักษาข้อมูลก็น่าจะสูงกว่านั้นมาก
    ไม่รู้ว่าเฟิร์มแวร์ยังใช้ รหัสแก้ไขข้อผิดพลาด ที่แรงกว่าซึ่งจำเป็นสำหรับ QLC กับบล็อกโหมด SLC ด้วยหรือไม่ แต่ถ้าใช่ ความน่าเชื่อถือก็จะสูงขึ้นอีก

  • ประมาณ 10 ปีก่อน เคยได้ การ์ด FusionIO SLC ชุดหนึ่งที่ใกล้กับล็อตผลิตสุดท้ายมาใช้ทำเบนช์มาร์ก
    ซอฟต์แวร์เป็นฐานข้อมูล in-memory ที่ลูกค้าอยากเพิ่มความจุใช้งาน และพูดตามตรงคือใช้การ์ด Fusion เป็น swap เท่านั้น
    หลังโหลดข้อมูลไม่กี่นาที เคอร์เนลก็เสถียร และมันทำงานได้ดีจริง ๆ
    คอมพิวเตอร์ราคา 500 ดอลลาร์ทำธุรกรรมได้หลายล้านรายการต่อวินาทีกับเรคคอร์ดหลายพันล้านรายการ ส่วนการ์ดนั้นแพงกว่ารถผมเสียอีก
    ถ้าเป็นสมัยนี้คงไม่มีทางทำแบบนั้นแล้ว แต่เป็นอุปกรณ์ที่น่าประทับใจมาก

    • ที่ทำงานเก่าของผมพูดได้ว่า FusionIO ช่วยบริษัทไว้
      แอปส่วนใหญ่พึ่งพาฐานข้อมูล Postgres เดี่ยว ๆ และเรากำลังจะเริ่มโปรเจกต์ขยายแบบแนวนอน แต่ก็แทบไม่มีผลลัพธ์อะไร จึงได้รู้ว่าการทำ partitioning ในโค้ดเบสที่ซับซ้อนและเก่าเป็นเรื่องยาก
      บังเอิญได้การ์ด FusionIO เข้ามา และการ์ด 2TB รุ่นถูกที่สุดทำให้ QPS การอ่านใน pgbench กระโดดจากราว 5,000 เป็น 300k
      หลังจากนั้นเราจึงมองว่าการขยายแบบแนวตั้งเป็นไปได้จริงกว่าที่คิดมาก ฮาร์ดแวร์ทำงานได้มากกว่าที่เราคิดเยอะ
    • ตอน SSD Intel รุ่นแรก ๆ ออกมา เคยทำงานกับ ISP ที่ใช้ RAID-10 จากดิสก์ 10K จำนวน 8 ลูกกับเมลเซิร์ฟเวอร์
      มี I/O แบบสุ่มขนาดเล็กจำนวนมาก จึงอยู่ในสภาพลุ้นตลอดว่าจะรับโหลดไหวหรือไม่
      เพื่อทดลอง เราส่ง Intel SSD 600GB ในฟอร์มแฟกเตอร์ไดรฟ์โน้ตบุ๊กไปให้ จากนั้นปิดโหนดรอง ติดตั้ง SSD แล้วเปิดกลับขึ้นมา
      หลังซิงก์อาร์เรย์ด้วย DRBD แล้ว failover โหนดหลักไปยังโหนด SSD เพิ่ม SSD เข้าไปใน logical volume แล้วใช้ pvmove ย้ายบล็อกจากอาร์เรย์ดิสก์ 8 ลูกไปยัง SSD
      โหลดค่อย ๆ ลดลงตลอดหลายชั่วโมง จนสุดท้ายแทบหายไป
      น่าสนุกดีที่ของชิ้นเดียวซึ่งวางในฝ่ามือได้สบาย ๆ สามารถแทนที่ดิสก์ 3.5 นิ้ว 10K ได้ถึง 8 ลูก
    • ในยุค 90 ก็เคยใช้ RAM แบบมีแบตเตอรี่สำรอง ที่แพงกว่ารถใหม่ สำหรับข้อมูล WAL ของฐานข้อมูลที่ต้องการขยายสเกลให้สูงขึ้นอย่างเร่งด่วน
  • หากใช้งาน eMMC ในอุปกรณ์ฝังตัว ก็แนะนำวิธีนี้เช่นกัน
    บนระบบ Linux สามารถตั้งค่าอุปกรณ์เป็นโหมด pSLC ได้ด้วยคำสั่ง mmc จาก mmc-utils
    ทำใน U-Boot ได้เหมือนกัน แต่คำสั่งจะเข้าใจยากกว่าเล็กน้อย ตั้งโปรแกรมได้แค่ครั้งเดียว ดังนั้นเมื่อกำหนดแล้วจะย้อนกลับไม่ได้
    ถ้าเป็นการผลิตจำนวนมาก ผู้ให้บริการโปรแกรมชิปสามารถตั้งค่านี้และค่า eMMC อื่น ๆ ไว้ล่วงหน้าให้ได้

  • อยากให้มี การวิเคราะห์ที่เจาะลึกไปถึงอัตราการส่งข้อมูลบนบัส แบบนี้แพร่หลายกว่านี้
    คงดีถ้ามีบล็อกไดอะแกรมของ SSD ทุกตัวที่ระบุชื่อรุ่น IC สำคัญ ๆ ความถี่สัญญาณนาฬิกาที่ทำงาน ความกว้างของบัสระหว่าง IC และความเร็วในการทำงาน

  • SSD บางรุ่นของ Kingston สามารถจัดการ over-provisioning ได้ด้วยเครื่องมือซอฟต์แวร์ที่ผู้ผลิตให้มา
    กล่าวคือเลือกจุดสมดุลระหว่างความจุและความทนทานได้เอง

    • ถึงอย่างนั้น จำนวนบิตที่เก็บต่อเซลล์ก็คงไม่เปลี่ยน
      เช่น ถ้าตั้ง over-provisioning ไว้ 80% ก็น่าจะกันพื้นที่สำรองไว้ 80% ของความจุ QLC และอีก 20% ที่เหลือก็ยังใช้ในโหมด QLC อยู่ดี
      ไม่น่าจะมองว่าเอา SLC 20% มาใช้งานเหมือน SLC ที่ทำ over-provisioning ไว้
  • คงดีถ้าผู้ผลิตมีวิธีให้ใช้ SSD แบบ ลดระดับลงเป็น SLC ผ่านการตั้งค่าไดรเวอร์หรือวิธีทำนองนั้น

    • แม้ตัว SSD เองจะไม่รองรับ แต่ชิปแฟลชทุกตัวทำได้
      ถ้าทำ SSD เอง หรือเอาแฟลชไปต่อเข้ากับขาสำรองของ SoC โดยตรง ก็สามารถโปรแกรมในลักษณะนั้นได้
      ถ้ามีความต้องการมากพอ ก็น่าจะขยาย NVMe ให้รองรับสิ่งนี้ได้เช่นกัน
    • ข้อดีของดิสก์คือเดิมทีไม่จำเป็นต้องมีไดรเวอร์
      ต่อให้มีฟีเจอร์แบบนั้นขึ้นมา แอปตั้งค่าไดรเวอร์สำหรับ Windows ก็คงไม่ถูกเปิดเป็นโอเพนซอร์ส
    • ถ้าเป็นอย่างนั้น ผู้ผลิตก็ไม่มีทางหาเงินเพิ่มไม่ใช่หรือ
  • นึกว่านี่เป็นความแตกต่างระดับฮาร์ดแวร์ เลยประหลาดใจ

    • การที่ชิป NAND ตัวหนึ่งเก็บได้กี่บิตต่อเซลล์น่าจะเป็นเรื่องระดับฮาร์ดแวร์
      แต่ถึงจะรองรับ TLC หรือ QLC ก็คิดว่ายังสามารถทำ SLC บนทุกแบบได้
      Silicon Power NVMe SSD ในคอมพิวเตอร์ของผมตอนนี้ก็ดูเหมือนจะใช้ SLC สำหรับการเขียน แล้วค่อยย้ายข้อมูลนั้นไปเป็น TLC ในภายหลังช่วงที่เครื่องว่าง
      การให้ NAND ทำงานในโหมด SLC เป็นฟีเจอร์ของไดรฟ์แบบนี้ และเรียกว่า “SLC caching”
    • ถ้าเขียน 0 เป็น 000 และ 1 เป็น 111 ลงในเซลล์ของ TLC SSD โดยพื้นฐานแล้วก็ทำให้เป็น SLC SSD ได้ง่ายอย่างเห็นได้ชัด
      แต่แค่นั้นยังอธิบายไม่ได้ว่าทำไมการอ่านและเขียนถึงเร็วกกว่า TLC มาก
      ตัวอย่างเช่น ถ้าเก็บข้อมูลเป็นประจุในตัวเก็บประจุเหมือน DRAM ก็อาจจินตนาการได้ว่าเขียนค่าด้วย R-2R ladder DAC และอ่านค่าด้วย flash ADC ในกรณีนั้น หากไม่นับสัญญาณรบกวน ฯลฯ ความเร็วก็ไม่น่าต่างกันตามจำนวนระดับที่มีผลต่อเซลล์
      เหตุผลที่โหมด pSLC เร็วกว่า ดูเหมือนจะอยู่ที่วิธีโปรแกรมและอ่านแฟลช รวมถึง คุณสมบัติเชิงแอนะล็อกของหน่วยความจำแฟลช
      มันใช้ประจุในการเก็บค่าเหมือน DRAM แต่ไม่ได้เก็บในตัวเก็บประจุธรรมดา หากเก็บอยู่ในเกต MOSFET แบบคู่
      ปริมาณประจุจะเปลี่ยนแรงดันขีดเริ่มที่มีผลของทรานซิสเตอร์ และตอนอ่านต้องจ่ายแรงดันหลายระดับเพื่อดูว่าทรานซิสเตอร์เริ่มนำกระแสเมื่อใด
      ตอนโปรแกรมเซลล์ ต้องฉีดประจุในปริมาณหนึ่งเพื่อให้ได้แรงดันขีดเริ่มที่สอดคล้องกับแพตเทิร์นบิตที่ต้องการ เนื่องจากทำได้เพียงฉีดประจุเข้าไป จึงต้องให้พัลส์สั้น ๆ หลายครั้งเพื่อไม่ให้ใส่มากเกินไป แล้วทำซ้ำกระบวนการตรวจสอบด้วยรอบการอ่านว่าถึงระดับที่ต้องการหรือยัง
      ดังนั้นยิ่งมีจำนวนระดับต่อเซลล์มาก ก็ยิ่งต้องใช้พัลส์ที่สั้นลงและรอบการอ่านที่มากขึ้น
      หากโปรแกรมเซลล์หลายระดับในโหมดระดับเดียว การฉีดประจุครั้งเดียวที่มากกว่าก็เพียงพอ และตอนอ่านก็ดูเพียงว่านำกระแสหรือไม่ที่ค่าอ้างอิงเดียว
      สรุปคือ pSLC ไม่จำเป็นต้องเปลี่ยนตัวเซลล์หลายระดับเอง แต่ต้องเปลี่ยนวิธีโปรแกรมและอ่านเซลล์นั้น ดังนั้นวงจรที่เกี่ยวข้องจึงมีโอกาสต้องต่างออกไปพอสมควร และคงไม่สามารถทำได้ด้วยเฟิร์มแวร์ล้วน ๆ
      https://en.wikipedia.org/wiki/Flash_memory#Floating-gate_MOS...
      https://dr.ntu.edu.sg/bitstream/10356/80559/1/Read%20and%20w...
      https://people.engr.tamu.edu/ajiang/CellProgram.pdf
      http://nyx.skku.ac.kr/publications/papers/ComboFTL.pdf
  • สงสัยว่าจะใช้ยืดอายุ SSD ที่สึกหรอไปแล้วได้ด้วยหรือไม่
    อาจมีธุรกิจที่ไหนสักแห่งในจีนเอา SSD แบบนั้นมาแฟลชใหม่แล้วขายเป็น “สินค้าใหม่” ก็ได้

    • กระบวนการชุบชีวิต เดียวที่ผมรู้จักคือการอบร้อน
      เป็นวิธีให้โดน 250°C เป็นเวลานาน หรือจัดการสั้น ๆ ที่อุณหภูมิสูงกว่าอย่าง 800°C
      https://m.hexus.net/tech/news/storage/48893-making-flash-mem...
      https://m.youtube.com/watch%3Fv%3DH4waJBeENVQ&sa=U&ved=2ahUK...
    • ในทางเทคนิค QLC NAND ที่แยกระดับแบบ QLC ไม่ได้อีกต่อไป ก็น่าจะยังใช้เป็น MLC ได้อยู่พักหนึ่ง และในทางปฏิบัติน่าจะใช้เป็น SLC ได้แทบตลอดไป