แปลง SSD แบบ QLC ให้เป็น SSD แบบ SLC
(theoverclockingpage.com)- เป็นการทดลองนำ 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 ความคิดเห็น
ความคิดเห็นบน 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 ที่บอกว่า “ใช้เฉพาะเซกเตอร์ด้านนอกกันเถอะ”
แต่ก็อย่างที่ว่า ผู้ผลิตอาจปรับเฟิร์มแวร์ต่างกันได้ และการดัดแปลงนี้แทบจะรับประกันได้ว่าพื้นที่ทั้งหมดจะถูกใช้เป็น SLC
แนวทางนี้แม้แคช SLC จริงจะมี 120GB ก็น่าจะทำงานได้ดีแค่ถึง 45GB เพราะโปรเซสสำหรับ paging จะเริ่มก่อนที่ SLC จะถูกใช้จนหมด
ถ้าไม่ต้องการ 66% ของความจุ SLC ของไดรฟ์ วิธีทำพาร์ทิชันเล็กกว่านั้นก็ง่ายและปลอดภัยกว่า
แฮ็กนี้เท่ากับเปลี่ยน SSD 480GB ให้เป็น SSD 120GB
แต่แลกกับความทนทานต่อการเขียน หรือปริมาณข้อมูลที่เขียนได้ก่อนคาดว่าจะเสีย เพิ่มจาก 120TB เป็น 4000TB จึงอาจเป็นการประนีประนอมที่มีประโยชน์มากสำหรับดิสก์เก็บล็อก
ไม่เคยเห็นผู้ผลิตมีตัวเลือกแบบนี้ให้ใช้ เลยสงสัยว่าทำไมถึงไม่ทำ
เช่น Swissbit ที่ขายผลิตภัณฑ์สำหรับอุตสาหกรรมซึ่งใช้แฟลช TLC หรือ QLC แต่ไม่ได้ใช้ในโหมดนั้น
ระดับนั้นน่าจะคาดหวังได้ประมาณ 2 เท่า
ดูเหมือนค่าเริ่มต้นใช้ตัวเลขรับประกันของ OEM คือ 120TBW ส่วนค่าสุดท้ายใช้สเปก P/E cycle ของ NAND ซึ่งดูน่าสงสัย
ถ้ามีอะไรที่ผมพลาดไป ก็น่าจะเป็นกรณีที่โหมด pSLC ลดแรงดันโปรแกรมเซลล์ลงอย่างมากจนทำให้ P/E cycle เพิ่มขึ้นแบบก้าวกระโดด แต่เรื่องนั้นก็ควรถูกรวมอยู่ใน write amplification factor ด้วย
แฮ็กนี้อาจทำให้ข้อมูลสูญหายและไม่มีการซัพพอร์ต แต่ไดรฟ์ 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 ดอลลาร์ทำธุรกรรมได้หลายล้านรายการต่อวินาทีกับเรคคอร์ดหลายพันล้านรายการ ส่วนการ์ดนั้นแพงกว่ารถผมเสียอีก
ถ้าเป็นสมัยนี้คงไม่มีทางทำแบบนั้นแล้ว แต่เป็นอุปกรณ์ที่น่าประทับใจมาก
แอปส่วนใหญ่พึ่งพาฐานข้อมูล Postgres เดี่ยว ๆ และเรากำลังจะเริ่มโปรเจกต์ขยายแบบแนวนอน แต่ก็แทบไม่มีผลลัพธ์อะไร จึงได้รู้ว่าการทำ partitioning ในโค้ดเบสที่ซับซ้อนและเก่าเป็นเรื่องยาก
บังเอิญได้การ์ด FusionIO เข้ามา และการ์ด 2TB รุ่นถูกที่สุดทำให้ QPS การอ่านใน pgbench กระโดดจากราว 5,000 เป็น 300k
หลังจากนั้นเราจึงมองว่าการขยายแบบแนวตั้งเป็นไปได้จริงกว่าที่คิดมาก ฮาร์ดแวร์ทำงานได้มากกว่าที่เราคิดเยอะ
มี I/O แบบสุ่มขนาดเล็กจำนวนมาก จึงอยู่ในสภาพลุ้นตลอดว่าจะรับโหลดไหวหรือไม่
เพื่อทดลอง เราส่ง Intel SSD 600GB ในฟอร์มแฟกเตอร์ไดรฟ์โน้ตบุ๊กไปให้ จากนั้นปิดโหนดรอง ติดตั้ง SSD แล้วเปิดกลับขึ้นมา
หลังซิงก์อาร์เรย์ด้วย DRBD แล้ว failover โหนดหลักไปยังโหนด SSD เพิ่ม SSD เข้าไปใน logical volume แล้วใช้
pvmoveย้ายบล็อกจากอาร์เรย์ดิสก์ 8 ลูกไปยัง SSDโหลดค่อย ๆ ลดลงตลอดหลายชั่วโมง จนสุดท้ายแทบหายไป
น่าสนุกดีที่ของชิ้นเดียวซึ่งวางในฝ่ามือได้สบาย ๆ สามารถแทนที่ดิสก์ 3.5 นิ้ว 10K ได้ถึง 8 ลูก
หากใช้งาน 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 เอง หรือเอาแฟลชไปต่อเข้ากับขาสำรองของ SoC โดยตรง ก็สามารถโปรแกรมในลักษณะนั้นได้
ถ้ามีความต้องการมากพอ ก็น่าจะขยาย NVMe ให้รองรับสิ่งนี้ได้เช่นกัน
ต่อให้มีฟีเจอร์แบบนั้นขึ้นมา แอปตั้งค่าไดรเวอร์สำหรับ Windows ก็คงไม่ถูกเปิดเป็นโอเพนซอร์ส
นึกว่านี่เป็นความแตกต่างระดับฮาร์ดแวร์ เลยประหลาดใจ
แต่ถึงจะรองรับ TLC หรือ QLC ก็คิดว่ายังสามารถทำ SLC บนทุกแบบได้
Silicon Power NVMe SSD ในคอมพิวเตอร์ของผมตอนนี้ก็ดูเหมือนจะใช้ SLC สำหรับการเขียน แล้วค่อยย้ายข้อมูลนั้นไปเป็น TLC ในภายหลังช่วงที่เครื่องว่าง
การให้ NAND ทำงานในโหมด SLC เป็นฟีเจอร์ของไดรฟ์แบบนี้ และเรียกว่า “SLC caching”
แต่แค่นั้นยังอธิบายไม่ได้ว่าทำไมการอ่านและเขียนถึงเร็วกกว่า 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...