By Arnon Puitrakul - 14 พฤศจิกายน 2022
ทุก ๆ วันนี้เวลาเราไปซื้อเครื่องคอมพิวเตอร์มา พวกอุปกรณ์เก็บข้อมูลน่าจะเป็นพวก SSD กันหมดแล้วละ เมื่อก่อน มันอาจจะอยู่ในเครื่องที่ราคาสูงมาก ๆ แต่ตอนนี้เครื่องราคาหมื่นกว่า ๆ ก็มีแล้ว แล้วยิ่งเราไปเดินซื้อ SSD เอง เราจะเห็นเลยว่า ถ้าเราเดินหาซื้อสักขนาดนึง เช่น 512 GB มันมีหลักตั้งแต่พันกว่า ๆ จนไปถึง หลายพันเลยก็มี วันนี้เราจะมาเล่ากันให้อ่านกันว่า จริง ๆ แล้ว SSD มันเกิดมาไม่เท่ากัน มันต่างกันอย่างไร
ก่อนที่เราจะไปดูว่า ทำไมอันนี้แพง อันนี้ถูก เราต้องมาเข้าใจส่วนประกอบของ SSD กันก่อน หลาย ๆ คนอาจจะเข้าใจว่า SSD มันก็ประกอบจากแค่หน่วยความจำสิ เพราะมันหน่วยความจำ
แต่จริง ๆ แล้ว SSD จะประกอบด้วยของ 2 ชิ้นใหญ่ ๆ คือ ตัว Chip หน่วยความจำ และ Controller ที่ควบคุมการทำงานของ SSD เรา ซึ่งทั้ง 2 ส่วนประกอบนี้ล้วนมีผลต่อการใช้งานจริง ๆ ทั้งหมด ทั้งในเรื่องของ Performance และ Endurance มาก ๆ ถ้าเราลองไปดูในสเปก ของแพง ๆ หน่อย อย่างพวก Data Centre SSD เราจะเห็นเลยว่า พวกนี้มีระยะเวลาในการใช้งานที่ยาวนานมาก ๆ รองรับการเขียนข้อมูลจำนวนเยอะ ๆ ได้ดี ดีกว่าแบบที่เราใช้ตามบ้านไปไกลมาก ๆ
ส่วนของตัว Controller ที่เราบอกว่า มันใช้ควบคุมการทำงานของ SSD มันมีรายละเอียดยิบย่อยลงไปอีกเยอะมาก เช่น การเขียน บางครั้ง เรามี Chip หน่วยความจำหลายตัว เราอาจจะต้องเขียนลงไปในหลาย ๆ Chip พร้อม ๆ กัน เพื่อจะเพิ่มความเร็ว ตัว Controller จะต้องจัดสรรแล้วว่า มันจะเขียนอย่างไร หรือ บางครั้ง ระบบเขียนมาเร็วมาก ๆ ทำให้มันเขียนลง Chip หน่วยความจำไม่ทัน บาง SSD ที่ Performance สูง ๆ ก็จะมีพวก Cache ที่เร็วมาก ๆ ให้ข้อมูลมาพัก แล้วค่อย ๆ ทยอยเขียนลงไปใน Chip หน่วยความจำก็มีเหมือนกัน จนกระทั่งงานของการ อ่านข้อมูล ก็ต้องเก็บไว้ว่าข้อมูลตรงนี้ มันอยู่ที่ส่วนไหน Chip ตัวไหน ดังนั้นส่วนของ Controller จึงเป็นอีกส่วนที่เป็นตัวกำหนด Performance ได้เป็นอย่างดีเลย
แล้วเรื่อง Endurance ละ มันช่วยอย่างไร โดยปกติแล้ว พวก Chip หน่วยความจำแบบ Flash Memory ทุก ๆ วันนี้ มันมีขีดจำกัดการเขียนข้อมูลอยู่ พอเราเขียนลบไปเรื่อย ๆ ถึงจุดหนึ่ง Cell ใน Chip หน่วยความจำมันจะเสื่อมสภาพ และ ไม่สามารถเก็บข้อมูลได้อีก ดังนั้น เวลาเราเขียนข้อมูลเข้าไป เราควรจะเขียนลงไปใน Cell หน่วยความจำที่ไม่ค่อยได้ใช้ ทำให้ทุก ๆ Cell ในหน่วยความจำมันได้ใช้งานให้หมด ไม่งั้น Cell นี้เสื่อม แต่อีก Cell ยังไม่ได้ใช้ มันก็ไม่โอเคเท่าไหร่ ดังนั้น Controller จึงเป็นอุปกรณ์ตัวหนึ่งที่ทำให้ Endurance ของการใช้งานเพิ่มสูงขึ้นนั่นเอง
พวก Flash Memory ที่เราใช้งานกัน จริง ๆ แล้ว มันเกิดจากการเอาพวก Transistor มาต่อ ๆ กัน โดยเราจะใช้พวก NAND Gate นี่แหละ มาต่อกันเรื่อย ๆ เยอะ ๆ เราไม่เล่าละกัน เอาเรื่องที่ต้องโฟกัสกันดีกว่า คือ ในการเก็บข้อมูล เราจะเก็บ ไม่ 0 ก็ 1 เป็นลักษณะแบบ Binary
ถ้าเราบอกว่า ใน Flash Memory ของเรา ประกอบด้วย NAND Gate สัก 8 Gate และ เราเก็บเป็น Binary เลย นั่นแปลว่า เราจะเก็บข้อมูลได้ทั้งหมด 8 Bits หรือ 1 Byte เท่านั้น SSD ที่เก็บข้อมูล 1 Bit ต่อ Cell เราจะเรียกมันว่า SLC (Single-Layer Cell)
อย่างที่เราบอกว่า NAND Gate พวกนี้ มันมีอายุการใช้งานของมัน ซึ่งนับจากจำนวนครั้งที่เรา ลบ และ เขียนลงไปใหม่ สมมุติว่า NAND Gate ของเราการันตีไว้ว่า มันสามารถลบ และ เขียนได้ 1 ล้านครั้ง นั่นแปลว่า 1 Gate เราเขียน ๆ ลบ ๆ ได้ 1 ล้านครั้ง รวมกัน 8 Gates เราจะทำได้ทั้งหมด 8 ล้านครั้ง หรืออ่าน ๆ เขียน ๆ ได้สัก 1 MB ก่อนที่จะเริ่มเสื่อมสภาพนั่นเอง
ถามว่า แล้วถ้าเกิด เราไม่สามารถเพิ่มจำนวน NAND Gate ได้แล้ว อาจจะเพราะด้วย Form Factor หรืออะไรก็ตาม เราจะแก้ปัญหานี้อย่างไร Engineer เลยบอกว่า งั้นเอางี้ 1 NAND Gate เราก็ เก็บมากกว่า 1 Bit ไปสิ อาจจะเก็บสัก 2 Bits ต่อ Gate ไปเลยได้มั้ย พวกนี้เราจะเรียกว่า MLC (Multi-Layers Cell)
ด้วยข้อจำกัดเดิม เรามี 8 Gates เก็บได้ Gate ละ 2 Bits ทำให้เราจะเก็บข้อมูลได้พร้อม ๆ กัน 2 Bytes ไปเลย จะเห็นว่า มันเพิ่มเป็น 2 เท่าเลยนะ โห เป็นเรื่องดีเลยใช่มั้ย เราใช้ Gate เท่าเดิม แต่เราเก็บข้อมูลได้เพิ่ม 2 เท่า
แต่ความชิบหายคือ เมื่อเราเอา 2 Bits ใส่ใน 1 Gate แล้วสมมุติว่า เราจะแก้ข้อมูลใน Gate ที่ 2 Bit ที่ 1 เราจะต้องเก็บข้อมูลใน Cell ที่ 2 แล้วแก้ Bit ที่ 1 แล้ว ลบข้อมูลใน Gate ที่ 2 ออก แล้วเขียนลงไปใหม่ นั่นแปลว่า เราจะเขียน ๆ ลบ ๆ ได้น้อยกว่า 8 ล้านครั้ง น้อยกว่าแบบ SLC ลงไปอีก ก่อนที่มันจะพัง ทำให้เราได้พื้นที่การจัดเก็บที่มากขึ้น แต่แลกมากกับความทนทาน
ในแง่ของ Performance เองก็เรียกว่า แย่กว่า อย่างแรกคือ แทนที่เราจะต้องมานั่งแยกว่า 0 หรือ 1 เฉย ๆ เราจะต้องมาแยก 4 เคส 00, 01, 10, 11 ซึ่งเยอะกว่าเยอะ ยังไม่นับว่า บางครั้งมันจะมีพวก Error Checking อีก ทำให้ แทนที่จะอ่านแค่ 1 Cell เราจะต้องอ่านหลาย ๆ Cell เพื่อหาว่า ที่เขียนมันผิดมั้ยอีก ทำให้ Performance ก็แย่ลงอีก
อ่านมาแล้ว เอ๊ะ อะไรมั้ยฮะ เราจะเห็นว่า พวก MLC เวลาเราจะเขียน เราจะต้องทำหลายอย่างมากขึ้นกว่า SLC มาก ๆ ที่แค่ อ่าน และ เขียน ตรง ๆ ทำให้โดยทั่ว ๆ ไปแล้ว MLC Flash จะมี Performance ที่สู้พวก SLC ไม่ได้
ส่วนพวก TLC (Triple-Levels Cell) และ QLC (Quad-Level Cell) จะเหมือนกับ MLC ทุกประการ แค่จากเดิมเราใส่ 2 เราก็ใส่ 3 และ 4 Bits ตามลำดับ นั่นแปลว่า Performance และ Endurance ก็จะลดลงตามลำดับด้วยเช่นกัน บางที ก็งง นะว่า ทำไมเรียกว่า MLC เป็นตัวที่ใส่ 2 Bits มันบอกแค่ Multi น่าจะเป็น Superset ของพวก TLC และ QLC ไปด้วยสิ
ปัญหาใหญ่ ๆ ของพวก MLC Flash ทั้งหลายที่รุนแรงมาก ๆ โดยเฉพาะพวก QLC คือ ความเร็วในการเขียนข้อมูล เช่น QLC บางตัว อาจจะเร็วได้แค่ 160 MB/s หรือต่ำกว่านั้นอีกด้วยซ้ำ เรียกว่า เร็วพอ ๆ กัน หรือ ช้ากว่า HDD จานหมุนแล้วนะ
ฝ่ายการตลาดก็โยนปัญหาใส่ Engineer งั้นเอางี้ ง่าย ๆ เลย เราก็เอา Memory ที่เร็ว ๆ หน่อยมาคั่นไว้ก่อนมั้ย เป็น Cache เลย อะ มันก็เร็วขึ้น แต่ ๆ ถ้าเราใส่ Cache ใหญ่มาก ราคามันก็สูงไป ขายยังไงก๊อนนน ดังนั้น Cache ที่ได้ก็จะเล็กมาก ทำให้มีปัญหากับการอ่าน และ เขียนไฟล์ขนาดใหญ่ ๆ ไปเลย เช่น เขียน ๆ ไปสัก 1 GB ความเร็วก็หล่นไป 4-5 เท่าแล้วอะไรแบบนั้น
งั้นเอาใหม่ ๆๆๆๆ ในเมื่อส่วนประกอบอะไรเหมือนกันหมด งั้นเราทำ SLC ทิพย์ ๆ มั้ย SLC แบบหลอก ๆ แกล้ง ๆ เราเรียกว่า Psudo-SLC คือ แทนที่เราจะเขียน 4 Bits ลงไปเลย งั้นเราเขียน 1 Cell ด้วย 1 Bits ไปเลย แล้วค่อยเอาข้อมูลกลับไปเรียงใส่ Cell อื่น ๆ ไปก็จะทำให้มันทนต่อการเขียนไฟล์ขนาดใหญ่ ๆ ได้ดีขึ้น ซึ่งก็ได้ดีอยู่นะ แต่ ๆ พอมันเป็น SLC แบบหลอก ๆ ก็ทำให้เมื่อเราเก็บข้อมูลเกินสัก 50% ของความจุ พื้นที่หลอก ๆ มันก็จะน้อยลง จนทำให้ Cache ทิพย์ ๆ มันเล็กลงนั่นเอง
และ ในส่วนของ Endurance จริง ๆ เอาวิธีพีค ๆ ถ้ามันเขียนได้น้อย งั้นเราก็เอา Cell ใส่เข้าไปเพิ่มเลยดิ เอ๊ออออออ เอากันงี้เลย เราเรียกว่า Over-Provisioning แค่นั้นเลย ซึ่งอาจจะใส่เกินไปสัก 7% หรือมากกว่านั้นขึ้นกับรุ่น และ การออกแบบด้วย
เอาหละ เราพอจะเข้าในการทำงานของ SSD แล้ว ถามว่า การที่ SSD จะแพง หรือ ถูก อย่างที่เราเล่าไปตอนแรกว่า SSD ขนาด 512 GB มีราคาตั้งแต่หลักพันนิด ๆ จนไป 2-3 พันเลยก็มี
โดยทั่ว ๆ ไปแล้ว SSD ในระดับ Consumer Grade ทั้งหลายราคาจะไม่ห่างกันเยอะมาก ๆ ส่วนใหญ่จะเลือกใช้ Controller ความเร็วกลาง ๆ และ TLC จนไปถึง QLC ในบางรุ่น ก็ถือว่าเร็วมาก ๆ แล้วสำหรับการใช้งานทั่ว ๆ ไป และ Performance สูง ๆ สำหรับ Consumer แล้ว
แต่ SSD ที่สุดจริง ๆ อย่าง SLC NAND และ Controller ตัวแรง ๆ หน่อย จะอยู่ในกลุ่มของ Enterprise ซะเยอะ (เอาจริง คือ Enterprise SSD หลาย ๆ ตัวยังใช้ TLC เลย) เพราะพวกนี้ มีการอ่านเขียนที่หนัก และ ต้องการอายุการใช้งานที่ยาวนานกว่าฝั่ง Consumer มาก ๆ วัน ๆ นึงอาจจะเขียน ๆ ลบ ๆ ข้อมูลอยู่หลัก TB เลยก็มี เลยทำให้พวกนี้ ต้องออกแบบมาให้มีความคงทนสูงมากกว่าแบบการใช้งานในบ้านสักหน่อย
สำหรับการใช้งานจริง ๆ ไม่ว่าจะตามบ้าน หรือ ในระดับ Enterprise เรามองว่า TLC เป็นตัวเลือกที่ราคาไม่แพงมาก แต่ก็ยังได้ Performance และ Endurance ที่ดีมาก ๆ แล้วในตอนนี้ ถามว่า เราควรจะเลี่ยงมั้ย เราก็มองว่า มันได้เลย สบาย ๆ แต่ QLC เราไม่ค่อยแนะนำสำหรับการใช้งานเป็น Device หลักเท่าไหร่ อาจจะเอามาเป็นพวก Device สำหรับการเก็บข้อมูลรองเฉย ๆ ด้วยราคาที่ถูก แต่ Performance ก็ยังดีพอ ๆ หรือดีกว่า HDD ทั่ว ๆ ไปหน่อยนึง
เคยสงสัยกันมั้ยว่า Filter ที่เราใช้เบลอภาพ ไม่ว่าจะเพื่อความสวยงาม หรืออะไรก็ตาม แท้จริงแล้ว มันทำงานอย่างไร วันนี้เราจะพาไปดูคณิตศาสตร์และเทคนิคเบื้องหลังกันว่า กว่าที่รูปภาพจะถูกเบลอได้ มันเกิดจากอะไร...
หลังจากดูงาน Google I/O 2024 ที่ผ่านมา เรามาสะดุดเรื่องของการใส่ Watermark ลงไปใน Content ที่ Generate จาก AI วันนี้เราจะมาเล่าให้อ่านกันว่า วิธีการทำ Watermark ใน Content ทำอย่างไร...
ก่อนหน้านี้เราทำ Content เล่าความแตกต่างระหว่าง CPU, GPU และ NPU ทำให้เราเกิดคำถามขึ้นมาว่า เอาเข้าจริง เราจำเป็นต้องมี NPU อยู่ในตลาดจริง ๆ รึเปล่า หรือมันอาจจะเป็นแค่ Hardware ตัวนึงที่เข้ามาแล้วก็จากไปเท่านั้น วันนี้เราจะมาเล่าให้อ่านกัน...
บทความนี้ เราเขียนสำหรับมือใหม่ หรือคนที่ไม่ได้เรียนด้านนี้แต่อยากรู้ละกัน สำหรับวันนี้เรามาพูดถึงคำที่ถ้าเราทำงานกับพวก Developer เขาคุยกันบ่อย ๆ ใช้งานกันเยอะ ๆ อย่าง Database กันว่า มันคืออะไร ทำไมเราต้องใช้ และ เราจะมีตัวเลือกอะไรในการใช้งานบ้าง...