BLOG

ทำไมถึงต้องใช้ SSD?

SSD ชื่อนี้มีแต่คนอยากได้ แล้วมันคืออะไรกันนะ?
และมันดีกว่า HDD ยังไงกัน

ทำไมทุกคนถึงอยากได้ SSD กันจังเลยนะ ทั้งที่ขนาดของมันก็เล็กนิดเดียว ดูจะไม่ค่อยพอเก็บอะไร?

SSD คืออะไร?

ถ้าเอาคำเต็มของคำว่า SSD ก่อนเลยก็ มันมาจากคำว่า Solid-State Drive แปลเป็นไทยก็คือ ไดรวฟ์ที่อยู่ในลักษณะของแข็ง!

จะบ้าเหรอ ใครเขาแปลอย่างนั้น จะให้ถูกต้องหน่อย ก็คือมันเป็นตัวเก็บข้อมูล ที่ไม่มีชิ้นส่วนเคลื่อนไหว ต่างหาก (อะไรที่ทำงานได้โดยไม่มีการขยับ ฝรั่งมักเรียก "Solid-State") เจ้า SSD นี้ ถูกคิดค้นขึ้นมาเมื่อประมาณ 40 ปีที่แล้ว โดยบริษัทชื่อ Storage Technology Corporation ที่ก่อตั้งโดยทีมวิศวกรที่แยกตัวออกมาจาก IBM โดยปัจจุบัน เป็นบริษัทลูกของ Oracle ไปเป็นที่เรียบร้อย ชื่อปัจจุบันก็คือ Oracle StorageTek นะ เขาทำ Tape Drive ขายอยู่ ซึ่ง SSD ตัวแรกที่ทำออกมาก็ความเร็วสูงถึง... 1.5MB/s!!!

ความแตกต่างของ SSD จากวิธีการเก็บข้อมูลแบบอื่นๆ ก็คือ โดยมากแล้ว การเก็บข้อมูลในคอมพิวเตอร์มะักจะต้องมีความเกี่ยวข้องกับ จาน (Disc) หรือไม่ก็เทป (Tape) แล้วก็แม่เหล็ก (Magnetic) ซึ่งมีเรื่องของกลไกที่ต้องเคลื่อนไหวเข้ามาเกี่ยวข้องด้วยเสมอ

(นั่นก็คือมันไม่ Solid มัน Hard อย่างเดียว)

แต่ก่อนที่จะเข้าใจว่าทำไมถึงมีการคิดค้น SSD ขึ้นมา เราต้องมาทำความเข้าใจหลักการเก็บข้อมูลเบื้องต้นก่อนเลยละ ว่าเราต่อสู้ฝ่าฟันกันมาขนาดไหน

วิธีการเก็บข้อมูลในคอมพิวเตอร์...มันไม่ใช่แค่ไฟล์นะ

"การเก็บข้อมูล" สำหรับในคอมพิวเตอร์ ก็คือการ Copy เอาข้อมูลในหน่วยความจำ (RAM) ซึ่งเป็นหน่วยความจำหลัก (Primary Storage) ของคอมพิวเตอร์ ไปเก็บใส่หน่วยความจำสำรอง (Secondary Storage) ที่ซึ่งมันจะไม่หาย แบบที่เราเข้าใจก็คือเซฟลงไฟล์นั่นเอง พอเราจะทำงานกับข้อมูลชุดนัี้ต่อ ก็ อ่านข้อมูลจากไฟล์ เข้าหน่วยความจำอีกรอบนึง

เราคงจะเคยชินกับว่า การเซฟไฟล์คือมันจะต้องมีไฟล์ที่เราตั้งชื่อได้ แต่วันนี้เราจะลงลึกไปกว่านั้นอีก ก็คือว่าเราเก็บไฟล์นั้นน่ะ ลงไปใน Disk ที่เป็นตัวข้อมูลจริงๆ ในโลกความเป็นจริง ได้อย้่างไร

สำหรับเทคโนโลยีแรกๆ เลย ที่ถูกเอามาใช้ในการเก็บข้อมูลสำหรับคอมพิวเตอร์ก็คือ เทป นะ เทปแบบเทปเพลงสมัยก่อนเลยน่ะแหละ ขออนุญาตแปะภาพจาก Wikipedia ไว้หน่อย เผื่อจะไม่เคยเห็นกัน

Quarter-Inch Cartridges.jpg
By Photograph: Journey234 - Own work, Public Domain, Link

เทป 400MB! ไม่อยากบอกว่า สำหรับ 20 ปีที่แล้ว 400MB นี่มันช่างมากมายมหาศาลเลยละ วิธีการทำงานของเทปก็คือ มันจะต้องมีหัวอ่าน หรือที่เรียกว่า Head ซึ่งมันจะอยู่ในตัวเครื่องอ่านเทปอีกที ตัวนี้จะเป็นตัวแปลพลังงานแม่เหล็กที่แปะอยู่บนเนื้อเทปให้กลายเป็นข้อมูลดิจิตอล (0101...) ส่งให้กับคอมพิวเตอร์อีกที แล้วก็มีมอเตอร์หมุนเทป ให้เนื้อเทปวิ่งผ่านหัวอ่านไปเรื่อยๆ ข้อมูลก็ไหลมาเรื่อยๆ (เป็นที่มาของคำว่า Stream ในภาษาเขียนโปรแกรมคอมพิวเตอร์!) ส่วนเวลาเขียนข้อมูล ก็คือตัวควบคุมเทปจะแปลงข้อมูลดิจิตอลที่คอมพิวเตอร์ส่งมา แล้วไปบอกให้หัวอ่านปล่อยพลังงานแม่เหล็กใส่เนื้อเทป

แต่อย่างที่คนเคยฟังเทปเข้าใจดีก็คือ เวลาจะอ่านข้อมูลข้ามไปข้ามมา หรือสำหรับคนฟังเพลงก็คือ ถ้าจะไปเพลงต่อไป ก็คือมันต้อง "กรอ" เทป นั่นก็คือเราสามารถอ่านข้อมูลจากเทปได้ในทิศทางเดียว (Sequentialไปข้างหน้า ไม่ก็ถอยหลัง (หน้า A หน้า B น่ะ) เทปเลยไม่เหมาะกับการเอามาเก็บข้อมูลที่จะต้องอ่านโดดไปโดดมาบ่อยๆ (Random) เรียกได้ว่า ถ้าจะอ่านข้อมูลชิ้นแรกต้นเทป ชิ้นที่สองอยู่ปลายเทป ก็ต้องกรอเทปกัันหลายร้อยเมตรเลยละ อย่างเทปข้างล่างนี้ ยาว 182 เมตร เหอๆๆๆ ระยะเวลาที่ต้องรอเทปกรอจนส่วนที่เราจะอ่านมาถึงเนี่ย เรียกว่า Seek Time

QIC DC600A.jpg
By Alecv - Own work, CC BY-SA 3.0, Link

แล้วทำยังไงเราถึงจะอ่านข้อมูลข้ามไปข้ามมาได้เร็วขึ้น? (หรือลด Seek Time) โดยเฉพาะ Worst Case (เคสที่แย่สุดที่จะเกิดขึ้นได้) ของการกรอเทปนี้ คืออ่านต้นเทป แล้วย้ายไปอ่านท้ายเทป?

เราก็ตัดเทปออกเป็นหลายๆ ส่วน วางเรียงกันแบบเบคอน(หรือหมูสามชั้น)สิ! 

ก็คือ ดีที่สุดที่เป็นไปได้แล้ว สำหรับเทปยาวๆ คงจะเป็นการแบ่งเทป 1 เส้น เป็นหลายๆ เส้นในแผ่นเดียวกัน (Track) แล้วก็เพิ่มจำนวนหัวอ่าน (Head) แต่เราก็ยังแก้ปัญหาเรื่องที่จะอ่านช่องนึงที่ต้นเทป แล้วข้ามไปอ่านอีกช่องที่ปลายเทปไม่ได้อยู่ดี

แล้วทำยังไงถึงจะให้ระยะทางมันสั้นลงอีก~? ก็เอามาขดเป็นวงกลม เพราะว่าช่องท้ายสุดของเทป มันสามารถวนกลับมาหาช่องแรกสุดของเทปได้ เป็นเหมือนเทปที่กรอแล้วไม่มีวันจบ!

RawBacon.JPG
อันนี้เบคอน (เกี่ยวไหม)
By Jonathunder -
Own work, CC BY-SA 3.0, Link

Disk-structure2.svg
อันนี้ Disc
By Heron2/MistWiz - modified version of Disk-structure.svg by MistWiz, Public Domain, Link

พอเป็น Disk การเก็บข้อมูลมันก็จะน่าสนุกขึ้นอีกหน่อย โดยมันมักจะถูกแบ่งให้อยู่ในรูปของ C H S หรือ Cylinder-head-sector แบบนี้

  • Sector คือหน่วยย่อยที่สุดคือ ช่องๆ ที่เขียนว่า B ในรูป
  • ใหญ่ขึ้นมาคือ Cluster อันนี้ไม่อยู่ใน CHS นะ มันคือกลุ่มของ Sector คือ D ในรูป อันนี้จำไว้ก่อน
  • กลุ่มของ Sector ที่อยู่วงเดียวกันบน Disk เรียกว่า Track คือ A ในรูป
  • และเนื่องจากเราสามารถเอา Disk มาวางซ้อนๆ กันได้ Sector ที่อยู่ตรงกันในจุดเดียวกันทุก Disk เรียกว่า Cylinder คือ C ในรูป
  • ท้ายสุด เราสามารถเอา Disk ซ้อนๆ กันได้ด้วย ก็คือสามารถมีหลาย Head ได้อัีก

(แถม: เมื่อไหร่ใช้ Disc เมื่อไหร่ใช้ Disk)

นั่นก็คือเราได้แก้ปัญหาของเทปทุกอย่างไปพร้อมกันหมดแล้ว ทั้งทำให้เทปมันวนกลับมาที่เดิมได้เอง ทั้งลดระยะเวลาในการโดดไปอ่านตรงนู้นทีตรงนี้ที แถมยังเพิ่มความเร็วในการอ่านข้อมูล เพราะว่าเราสามารถเอา Disk วางซ้อนกัน แล้วใช้หัวอ่านหลายๆ หัว อ่านข้อมูลที่อยู่ใน Cylinder เดียวกัน ออกมาพร้อมกันทีเดียวได้อีก นี่มันน่าจะจุดสูงสุดของการเก็บข้อมูลแล้วละมั๊งเนี่ย! มันก็ยังช้าไปอีกเหรอ!!!?!

Hard disk dismantled.jpg
By No machine-readable author provided. Ed g2s assumed (based on copyright claims). - No machine-readable source provided. Own work assumed (based on copyright claims)., CC BY-SA 3.0, Link

แล้วทำไม Hard Disk (HDD) ถึงได้ช้า

เวลาที่ Windows/Linux/MacOS จะอ่านข้อมูล มันก็จะต้องแปล Cluster (คำนี้อีกแล้ว) ที่โปรแกรมต้องการ ออกมาเป็น C H S ก็คือ Cluster นี้ ตรงกับ Cylinder ไหน หัวเบอร์อะไร Sector ที่เท่าไหร่ แล้วจากนั้นก็ส่งคำสั่งไปที่ตัว HDD ที่จะแปลออกมาว่า จะควบคุมกลไกบนตัว Drive ยังไง ให้ไปอ่านอ่านข้อมูลมาตามที่ OS ต้องการได้

สาเหตุที่ OS เวลาจะอ่านข้อมูล อ่านเป็น Cluster ก็เพราะว่า ในระบบไฟล์เช่น FAT32, NTFS นั้น หน่วยย่อยที่สุดของการเก็บข้อมูล (Allocation Unit Size) จะเป็น Cluster ถ้าลองสร้างไฟล์เล็กๆ ขึ้นมา จะเห็นว่า ไฟล์ขนาด 818 ไบต์ แต่กลับใช้ที่บน Disk 4096 ไบต์ซะอย่างนั้น ส่วนสาเหตุที่ว่าทำไมจะต้องเป็น 4096 ด้วย ลองอ่านต่อก็ได้นะ ส่วนที่ที่เราใช้ Cluster ก็อาจจะเพราะเรื่อง Cylinder ด้วย (ที่มันสามารถอ่าน Sector ที่ตรงกันบน Disc ทุก Disk ออกมาพร้อมกันได้) 

แต่เราลองมาดูกันว่า ในการอ่านข้อมูล 1 Cluster จาก HDD แบบนี้ มันต้อง "รอ" อะไรบ้าง

  1. Seek Time - Seek Time ของอุปกรณ์ที่เป็น Disk ก็คือเวลาที่ใช้ในการขยับ Head ให้ไปตรงกับ Track ที่ต้องการจะอ่าน ใช้เวลาอยู่ที่ประมาณ 25/1000 วินาทีด้วยเทคโนโลยีปัจจุบัน หรือประมาณ 0.025 วินาที สำหรับการขยับแบบ Full-Stroke คือ ด้านในสุดมานอกสุดแบบสุดทาง แน่นอนว่าโดยเฉลี่ยแล้ว (Average Case) มันก็จะขยับแค่ครึ่งทาง ก็จะเจอ Track ที่ต้องการแล้ว ถ้านึกไม่ออก ก็สมมุติถึงรถไฟฟ้าในอุดมคติ ที่มาถึงทุก 5 นาทีเท่ากันตลอด โดยเฉลี่ยแล้วเราจะรอแค่ประมาณ 2 นาทีครึ่ง Worst Case ของการรอรถไฟฟ้าคือ เรามาถึง มันดันเพิ่งปิดประตู อันนี้ก็รอไป 5 นาทีเต็ม Best Case คือเรามาถึงแล้ว รถไฟก็มาพอดี
  2. Rotational Delay - ก็คือ เวลากว่าที่ Sector ที่ต้องการจะอ่าน จะหมุนมาเจอกับหัวอ่าน เป็นสาเหตุที่ว่ามีอยู่พักนึง เราพยายามหา HDD ที่ความเร็วในการหมุนสูงขึ้น เช่น 7200rpm หรือ 10000rpm มาใช้กัน (rpm = Rotation per minute) การที่มันหมุนเร็วก็เพื่อให้ Sector ที่เราต้องการ มันมาถึงหัวอ่านได้เร็วขึ้นนั่นเอง แล้วก็ถ้าอ่าน Sector ติดๆ กัน มันก็จะอ่านได้เร็วขึ้นเพราะว่ามันหมุนเร็ว ข้อมูลมันก็วิ่งผ่านหัวอ่านได้มากกว่าในเวลาที่เท่ากัน ถ้าลองวัดเวลาจาก Drive แบบ 7200rpm กรณี Sector ที่เราต้องการ มันดันวิ่งผ่านเราไปพอดี (Worst Case) ก็คือ 60 / 7200 = 0.0083 วินาที เนื่องจาก HDD เป็นแบบ CAV (Constant Angular Velocity) ไม่ว่าอยู่ Track ไหน ความเร็วเท่ากันเสมอ
  3. Transfer Delay - ก็คือเวลาที่ข้อมูลถูกแปล และส่งไปยังคอมพิวเตอร์ อันนี้ส่วนใหญ่ไม่มีใครบอก มันก็มีอยู่ :D แต่ว่าน้อยมาก เพราะว่า ขั้นตอนนี้เป็นสิ่งที่เกิดขึ้นในวงจรไฟฟ้า ไม่มีกลไกมาเกี่ยวข้องแล้วยังไงละ

จากทั้งหมด จะเห็นเวลา เวลาที่ใช้รอมากที่สุดคือ 0.025 + 0.0083 = 0.026 วินาที หรือประมาณ 26ms อืมก็จัดว่าเร็วมากแล้วนะ...

จนเราลองมาดูว่า คอมพิวเตอร์ตอนนี้ความเร็วอยู่ประมาณ 4.0GHz....หรือประมาณ 0.00000000025 วินาทีต่อ 1 ครั้งที่มันทำงาน!!! ส่วนตอนนี้เน็ตบ้านเรา Ping Server เกมอยู่ที่ 20-30ms คือข้อมูลวิ่งถึง Server เกมที่สิงคโปร์วิ่งกลับมาไทย เร็วกว่าหัวอ่าน Hard Disk ขยับน่ะแหละ!

เพิ่มเติมหน่อย:


นี่คือ Worst Case Scenario ของการแบ่ง Partition แล้วละ
ภาพจาก Thread นี้

ถ้าเกิดนั่งพิจารณาดู น่าจะสงสัยเหมือนกันวา่ จริงๆ Track นอกสุด มันน่าจะเก็บ Sector ได้มากกว่า Track ในสุดสิ ทำไมในภาพแบ่งเท่ากัน (คือวงนอก Sector มันยาวกว่าวงข้างใน) ขอบอกว่าเข้าใจถูกต้องแล้ว ก็คือ HDD มันจะเร็วกว่าในช่วงต้น พอปลายๆ มันจะช้าลง เพราะว่า Track ข้างในมันมี Sector น้อยกว่า Track ข้างนอก วิธีแบบนี้เรียก Zone Bit Recording

และเรื่อง ZBR นี้ก็เป็นที่มาว่าทำไมไม่ควรแบ่ง Partition บน HDD ด้วย - เพราะว่าถ้าเราแบ่งครึ่งๆ สมมุติ C 500GB, D 500GB ใน HDD 1TB เวลาเราเปิดเกม พร้อมกับที่ Windows ต้องย้ายข้อมูลใน RAM ออกมาพักใน Harddisk ให้แรมเหลือพอจะใส่เกมลงไป หัวอ่านมันก็จะต้องย้ายข้ามไปข้ามมาในระยะทางประมาณครึ่งนึงเสมอเพื่อไปเขียน Page File (Swap) ที่อยู่ใน C แล้วก็มาอ่านเกมที่อยู่ใน D แทนที่จะขยับแค่ใกล้ๆ แถมเกมที่อยู่ใน D ซึ่งเป็นครึ่งหลัง ก็จะอ่านข้อมูลได้ช้าอีกต่างหาก!!!

แล้วเราทำให้ Hard Disk เร็วกว่านี้ไม่ได้อีกแล้วเหรอ?

จากตรงนี้คงจะเห็นได้เลยว่า สิ่งที่เราสามารถทำได้ เพื่อให้ Drive อะไรก็ตาม (ที่ผ่านมาคือ Tape กะ Disk) ทำงานได้เร็วขึ้น ก็คือการหาทางลด Seek Time และก็การลด Delay ทั้งหมด แต่ปัญหาที่แท้จริงของมันก็คือ เพราะว่าเรายังต้องพึ่งกลไกอยู่ แม้ว่าเราจะพยายามสักแค่ไหน ก็เป็นไปได้ยาก ที่จะให้มันทำงานด้วยความเร็วใกล้เคียงกับวงจรไฟฟ้าได้ (อย่าลืมว่า อิเล็กตรอนเคลื่อนที่ด้วยความเร็วแสงนะ!) ทางแก้ที่ถูกต้อง คือเราควรจะทำ Drive ที่เก็บข้อมูลโดยไม่ต้องใช้กลไกต่างหาก จึงมีความพยายามสร้าง SSD มาตั้งแต่เมื่อ 40 ปีที่แล้วนั่นเองไง 

แต่ทำไมเราไม่ใช้ SSD กันหมดทุกคนแล้วเหรอ เพราะว่ามันแพง! หรือที่ถูกต้องก็คือยังไม่มีใครยอมจ่ายเงินซื้อเทคโนโลยีนั้นเป็นปริมาณมากพอ ที่จะทำให้ผู้ผลิต ผลิตออกมาแล้วมันถูกได้ (ขาด Economy of Scale) ต่างหาก เหอๆๆๆ

ก่อนที่ SSD จะราคาลงมาอยู่ในระดับที่เริ่มจับต้องได้ (ประมาณ 10 ปีก่อน ผมเคยซื้อ HDD Laptop ขนาด 80GB ในราคา 8,000 บาทด้วยแหละ ~ ปัจจุบัน 6,000 ได้ SSD 500GB แล้ว อร๊าย รู้สึกแก้่) ความพยายามแรกที่จะเพิ่มความเร็ว...หรีือพยายามซ่อนระยะเวลา Seek Time ของ HDD ก็คือการ Cache 

ความพยายามแรก: Cache

ในเมื่อเรารู้อยู่แล้วว่า HDD มะันช้ามาก (และมันก็เป็นอุปกรณ์ที่ช้าที่สุดในคอมพิวเตอร์มานานมากพอสมควรแล้ว) สิ่งที่เราทำได้ก็คือการหลีกเลี่ยงการใช้ HDD ให้มากที่สุด โดยการทำแคช (Cache) นั่นเอง

แต่ก่อนอื่น ต้องรู้ก่อนว่า Cache กับ Buffer คนละอย่างกันนะ สำหรับ HDD แล้ว ส่วนมากที่บอกว่าเป็น 'Cache' (เช่น 128MB Cache) มันคึือ Buffer ซึ่งก็คือ RAM บนตัว HDD ที่ใช้พักข้อมูลระหว่างรอเขียนลงไปบน Disk ในตัว HDD (ซึ่งใน HDD จะเรียก Platter ไม่ได้เรียก Disk ตอนบัญญัติศัพท์ไม่ค่อยได้คุยกันใช่มั๊ยเนี่ย) ก็คือข้อมูลที่เราส่งไปให้ HDD นั้น มันจะถูกพักไว้ใน Buffer ก่อน อย่างที่ในย่อหน้าที่ผ่านมาได้บอกไว้ว่า กว่าที่ HDD จะเจอ Sector ที่มัันต้องการ ก็ใช้เวลาไป 26ms แล้ว เกิดถ้าเราเขียนข้อมูล 1000 Sector แบบไม่เรียงกันเลย (ประมาณ 0.5MB สำหรับ HDD แบบเก่า ซึ่ง Sector นึงเก็บได้ 512 Bytes ส่วน HDD แบบใหม่จะ Sector ละ 4096 Bytes) แล้วจะต้องรอให้ HDD เขียนเสร็จ ก็แปลว่าคอมเราจะต้องค้างไป 26 วินาทีกันเลยทีเดียว ถึงตอนนั้นเราคงจะกดปิดเครื่องไปก่อนแล้วละ ดังนั้นเมื่อเวลาเราเขียนข้อมูล ข้อมูลจะถูกพักเอาไว้ใน Buffer ก่อนเพื่อให้ CPU กลับไปทำอย่างอื่นได้ นี่เองคือที่มาของคำเตือนที่บอกว่า ห้ามกดปิดเครื่องโดยไม่ Shutdown เพราะว่ามันอาจจะมีข้อมูลค้างอยู่ใน Buffer ที่ยังไม่ได้เขียนลง Disk จริง ซึ่งมันจะหายไปเพราะว่าไม่มีไฟเลี้ยงมันไงละ (RAM ต้องใช้ไฟเลี้ยงตลอดเวลา)

อ้อและถ้า HDD ฉลาดพอ มันก็จะเรียงข้อมูลใน Buffer นี้ เพื่อทำ NCQ = Native Command Queuing ด้วย เพื่อหาทางขยับหัวอ่านให้น้อยที่สุด เห็นมั้ยว่า เราพยายามจะเพิ่มความเร็ว HDD กันมาตลอดเวลาเลยนะ

NCQ

ส่วน Cache (ซึ่งในที่นี้คือ Disk Cache) จะทำหน้าที่อีกอย่างนึงที่ต่างกันโดยสิ้นเชิงเลย ก็คือ Cache จะเก็บข้อมูลที่เราเพิ่งใช้ไปเอาไว้ (โดยมากจะเก็บอยู่ใน RAM) ถ้าเกิดว่าเราเรียกใช้ข้อมูลเดิมซ้ำอีก เราก็ไม่ต้องอ่านจาก Disk ก็เอาจาก Cache ออกมาโดยไม่ต้องไปยุ่งกับ Disk ยังไงละ แน่นอนว่า ถ้าเกิดว่า HDD ฉลาดมากพอ ตัวมันก็สามารถเอาข้อมูลที่ปัจจุบันยังอยู่ใน Buffer ส่งกลับไปให้ก่อนได้ถ้ามีการเรียกใช้อีก หรือ มันเป็นทั้ง Buffer และ Cache ในตัวเลย เท่าที่ทราบ ก็คือ HDD ของ Seagate ทำแบบนี้อยู่นะ จะเห็นว่า HDD Seagate มี Cache ถึง 128MB 

แล้ว Cache จะช่วยเพิ่มความเร็วได้ตอนไหน...ก็ตอนที่เราอ่านข้อมูลเดิมซ้ำๆ บ่อยๆ แน่นอนว่า ยิ่ง Cache ขนาดใหญ่ ก็ยิ่งดี เพราะว่ามีโอกาสที่จะ Cache Hit สูงขึ้น จะได้ไปยุ่งกับ HDD ให้น้อยที่สุด โดยวิธีการ Cache ที่จะได้ผลมากที่สุด ก็คือเราต้องสามารถเดาอนาคตได้ อ่านข้อมูลที่จะใช้เข้า Cache ไว้ล่วงหน้า แล้วถ้า Cache เต็มก็ทิ้งข้อมูลที่จะไม่ได้ใช้แล้วแน่นอนในอนาคตออกไปจาก Cache ด้วย (แน่นอนว่ามันเป็นไปไม่ได้) ถ้าสนใจศึกษาต่อก็ จะเป็นเรื่อง Cache Policy ครับ พวก LRU, LFU, MRU ครับ เชิญไปเสพได้เลย

ใน Windows เอง ตัวมันก็ทำ Disk Cache ไว้เองด้วย ไม่ต้องกลัวเลยว่าจะใช้แรมไม่คุ้ม มีเท่าไหร่ ส่วนใหญ่มันจะถูกใช้จนเต็มโดยที่เราไม่รู้ตัวอยู่แล้วละ และก็ไม่จำเป็นเลยว่าเราจะต้องไปสรรหาโปรแกรม Disk Cache มาใช้งาน เพราะว่ามันก็จะไปซ้ำซ้อนกับของ Windows เองอยู่ดี นอกจากนี้ Windows ยังเคยมีไอเดียเก๋ๆ ที่ชวนให้ทุกคนเสียบ SD Card เอาไว้ในช่อง Card Reader เพื่อทำ ReadyBoost ด้วย

อีกความพยายาม: ReadyBoost

Cache โดยส่วนมากแล้ว เราจะทำไว้บน RAM เพราะว่า ถ้าเกิดว่าเอา HDD อีกตัว มา Cache HDD อีกตัว มันจะมีประโยชน์อะไรตรงไหนละ มันก็ช้าพอกัน

ไอเดียของ ReadyBoost ก็คือเอา SD Card, USB Thumbdrive มาทำ Cache เพิ่ม นั่นก็เพราะว่า Flash Memory ซึ่งอยู่ใน SD Card กับ USB Thumbdrive/Flashdrive ช่วงนั้นเริ่มมีราคาถูก และขนาดก็เริ่มเป็น GB แล้ว แถมเกือบทุกคนยังมีกล้องดิจิตอล ก็มี SD Card กันคนละอย่างน้อย 1 อันแน่นอน ตอนนั้นผมลงทุนซื้อ SD Card 2GB แบบกี่ x ไม่รู้ มาเลยละ (สมัยนั้นยังไม่มี Class 10 อะไรแบบนี้) โดย ReadyBoost นอกจากจะเป็น Cache แล้ว มันยังมีความสามารถเรียกว่า SuperFetch ประกอบกันด้วย คือ Windows จะโหลดข้อมูลที่มันคิดว่าเราจะใช้บ่อย โดยอ้างอิงจากการใช้งานของเราที่ผ่านมาใส่ไปใน ReadyBoost Cache นี้ด้วย

ความดีของ Flash Memory ก็คือ มันเป็น "Solid State" แล้ว คือทุกอย่างเป็นวงจร ไม่มีชิ้นส่วนเคลื่อนไหว ไม่มีกลไก มันจึงเก่งมากในการอ่านข้อมูลแบบ Random เพราะว่า "Seek Time" ของมันจะต่ำกว่า HDD ทำให้มันเหมาะที่จะเอามาทำเป็น Cache ช่วย HDD ได้ (ซึ่งจริงๆ มันไม่ได้ Seek แต่เป็นหน่วงเวลาภายในวงจร เพื่อจะอ่านข้อมูลในช่องที่ต้องการ) จากการทดสอบในสมัยนู้น ก็พบว่า มันช่วยลดเวลาการทำงานได้ประมาณ 15% เลย โดยเฉพาะเครื่องที่แรมน้อย แต่ยังไม่เท่าการมีแรมเพิ่มขึ้นอยู่ดี เพราะว่าถ้า RAM เยอะ RAM ที่ยังว่างก็จะถูกใช้เป็น Cache ที่เร็วกว่า Flash Memory ไปแล้วนั่นเอง


(ภาพจาก Anandtech : Windows Vista Performance Guide)

แล้วก็มาเป็น Persistent SSD Cache

แล้วพอเราใช้ SD Card, Thumbdrive/Flashdrive กันอย่างบ้าคลั่ง ก็เลยมีผลทำให้ราคา Flash Memory ราคาถูกลงๆ เพราะคนซื้อเยอะขึ้นๆ จนเริ่มมี SSD สำหรับผู้คนทั่วไปใช้ได้ออกมาจริงๆ (รวมไปถึงมีคนทำ Disk ที่เอา SD Card หลายๆ อันเสียบลงไป เอามาทำเป็น SSD ได้ด้วย) แต่ยังมีราคาแพง ทำได้แต่ขนาดเล็ก เช่น 16GB 32GB 64GB จึงเป็นยุคของ Persistent SSD Cache ก่อน

ถ้ายังจำกันได้ ก็คือ Intel Smart Response Technology ซึ่งปัจจุบันถูกเปลี่ยนชื่อเป็น Optane แล้ว แต่หลักการยังคงเดิมนะ ก็คือเอา SSD...ซึ่งมันเป็น Flash Memory...ซึ่งมัน Seek Time ต่ำ มาช่วยเพิ่มความเร็วให้กับ HDD อะ ไปดูไลนัสตอนเวอร์ชั่นหัวทองพูดถึงได้

และถ้าเป็นแฟนพันธุ์แท้ของเราจริงๆ จะเห็นว่า แต่ก่อนเราก็จะมีตัวเลือก ให้เปิดใช้ SRT ได้ด้วยนะ ก็คือเราสามารถแบ่งที่บน SSD มาทำเป็น Cache ได้ ตั้งแต่ 15-60GB (โดย SSD ตัวนี้ยังเอาลงวินโดวส์ได้ด้วย!) แต่ตอนนี้เอาออกไปแล้วเพราะว่า SRT ปัจจุบัน ใช้ได้เฉพาะกับ Drive Optane เท่านั้น :P ส่วนความเร็วของมันก็พอๆ กับเก็บข้อมูลลง SSD โดยตรงเลยทีเดียว...ก็ข้อมูลที่มัน Cache มันก็คืออยู่บน SSD ไง

(เพิ่มเติม: Optane (3D XPoint) เป็น Flash Memory อีกชนิดนึงที่สามารถ "Seek" ได้เร็วกว่า Flash Memory แบบ NAND ในปัจจุบัน)

ส่วนถ้าไม่ได้ใช้...สังเกตว่า พอเป็น HDD แล้ว Random Read/Write (4K) แทบจะไม่แตกต่างกัน ต่อให้เป็น 7200rpm ส่วนการ RAID ก็ช่วยได้สองเท่า ขณะที่ SSD นั่น เร็วขึ้นมากกว่า 50 เท่า!!

WD Black 7200rpm 500GBSeagate 1TBSeagate 2TB RAID 0


ส่วนถ้าตอนนี้ อยากทำ SSD Cache เราสามารถใช้โปรแกรมเสริมอย่างเช่น PrimoCache ทำได้ ไม่ต้องง้อ SRT นะ :D

ความพยายามสุดท้าย: Solid State Hybrid Drive (SSHD, FireCuda)

ส่วนทางด้านผู้ผลิต Hard Disk ก็ทำบ้าง คือ เอา SSD มาแปะอยู่ใน HDD ซะเลย แล้วทำ Persistent SSD Cache ในระดับรากหญ้าที่สุด ก็คือทำมันตั้งแต่ระดับ Controller ในตัว HDD ซะเลย ซึ่งน่าจะดีที่สุดเพราะ ผู้ผลิตเองก็น่าจะรู้จัก HDD ตัวเองดีกว่า ก็ควรรู้ว่าอะไรควร Cache อะไรไม่ควร Cache และควรจะ Cache ตอนไหน จึงจะคุ้มค่าที่สุด เพราะ HDD ถ้าอ่านแบบ Sequential จะเห็นว่าได้ความเร็วเป็นหลัก 100MB/s อยู่แล้ว

ซึ่งทาง Seagate น่าจะเป็นเจ้าเดียวในปัจจุบัน ที่มี HDD แบบนี้วางขายทั่วไปในชื่อของ FireCuda ที่มีให้เลือกใช้บนเว็บของเรา ก่อนหน้านี้จะมีของ WD ที่มี SSD ข้างใน 128GB แต่ว่าไม่ได้ทำ Cache กับของ HGST (Hitachi) ที่เป็น Cache ด้วย 


(ภาพจาก Storage Review)

ซึ่งจากการทดสอบของ Storage Review ก็พบว่าการที่มี SSD Cache บน HDD นี้ก็จะเพิ่มความเร็วในการอ่านข้อมูลแบบ Random ซ้ำๆ บ่อยๆ ได้ มากกว่า 2 เท่า (ก็ถ้ามัน Cache แล้ว ก็คืออ่านจาก SSD แทนที่จะอ่านจาก HDD)

แต่ตอนนี้ เราก็ไม่จำเป็นต้องไปพยายามต่อสู้กับความช้า HDD อีกแล้ว เพราะ SSD มันอยู่ในระดับราคาที่ทุกคนสามารถเป็นเจ้าของได้แล้วยังไงละ

SSD ทำให้เครื่องเราดีขึ้นได้ยังไง?

จะเห็นว่า จากความพยายามทั้งหมดที่เราสู้กับ HDD ก็คือ ความพยายามในการแก้เรื่อง Seek Time มันเยอะ แล้วการที่ Seek Time ต่ำลง มันมีผลอะไรกับเราบ้าง? (อันนี้สรุปเองนะ)

  1. เข้าวินโดวส์เร็วขึ้น และเข้าโปรแกรมต่างๆ ได้เร็วขึ้น เนื่องจากว่าไฟล์ของโปรแกรมจะเป็นไฟล์ชิ้นเล็กๆ ซึ่งจะตรงจริตกับ SSD มากกว่าเพราะว่า Seek Time น้อย เวลาอ่านไฟล์ยิบย่อยเลยเร็ว พอเข้าโปรแกรมเร็ว เข้า Windows เร็วเราก็เลยรู้สึกว่าเครื่องเร็วไปด้วย
  2. ตื่นจาก Sleep ได้เร็ว เนื่องจากว่าไม่ต้องรอ HDD หมุน สังเกตว่าถ้าเครื่องมี HDD ต่อให้ใส่่ SSD แล้วก็ตาม จะมีเสียงมอเตอร์หมุนแป๊บนึง ก่อนที่เครื่องจะเปิดติดขึ้นมา ถ้า SSD อย่างเดียว กางจอก็ส่วนใหญ่ภาพจะขึ้นเลย หรือขึ้นก่อนจะกางเสร็จอีกต่างหาก
  3. แรมน้อยก็ไม่แย่มาก เพราะว่าเวลา Windows เวลาที่ทำการอ่าน/เขียน Page File จะทำได้เร็วกว่า เวลานี้มันมักจะเป็นเวลาที่เรากำลังจะเปิดเกมหรือโปรแกรมใหม่ เราก็ใจร้อนอยู่แล่้วด้วยนาทีนี้ ซึ่่งถ้าเป็น HDD แล้วเป็นการกระทำที่นรกมาก เพราะนอกจากจะต้องอ่านไฟล์เล็กๆ เยอะๆ เพื่อเปิดโปรแกรมแล้ว Windows ยังต้อง Clear ข้อมูลในแรมออก มาพักไว้ใน Page File (Swap) ซึ่งอยู่ใน Drive C ก่อน เพื่อหาที่ว่างในแรมให้โปรแกรมที่เราเปิดแทรกเข้าไปได้ ถ้าเป็นเครื่องรุ่นเก่าๆ ช่วงนี้เราก็จะได้ยืนเสียงครืดๆ คราดๆ จาก HDD ยาวๆ เลย เสียงนั้นแหละ 
  4. Fragmentation จะไม่มีผลกับเรา เวลาที่เราเขียนข้อมูลเล็กๆ บ่อยๆ ลงไป ตามหลักการแล้วระบบไฟล์ส่วนมากจะใช้วิธีหาช่องว่างที่ใหญ่ที่สุดที่จะใส่ข้อมูลชิ้นนั้นลงไปได้ การกระทำที่โหดร้ายที่สุดก็คือโหลด Bittorrent พร้อมๆ กันหลายไฟล์ ถ้าเกิดว่าความเร็วมันมาต่ำมาก เป็นไปได้ว่าข้อมูลที่เขียนลงไปใน Harddisk แทบจะเป็นไฟล์นึงสลับกับไฟล์นึงกันเลย ลองคิดดูว่าเวลาอ่านและเป็น HDD จะนรกขนาดไหน (ก็อ่านแบบครืดๆ คราดๆ เลยน่ะแหละ) อย่างในภาพข่้างล่าง (ที่เป็นตัวอย่างที่แย่มาก เพราะมันเป็น SSD...) จะเห็นว่าไฟล์ Miglog.xml ซึ่งเดาจากชื่อแล้วมันค่อยๆ ถูกเขียนลงไปทีละหน่อย ก็ ไฟล์แค่ 68MB กระจายอยู่เป็น 1063 ชิ้นแล้วจ้า

    (ถ้ายังใช้ HDD อยู่ ก็ไปโหลด Drfraggler ได้จาก Filehippo เจ้าของภาพนี้นะ)

เอาละ จะซื้อแล้ว ต้องดูอะไรบ้าง เวลาเลือกซื้อ SSD

สำหรับการเลือกซื้อ SSD เราแนะนำว่า ต้องดูที่สองเรื่องหลักๆ เลย (เป็นประสบการณ์ ไม่มี Source ให้อ้างอิงเหมือนกัน) คือ

  • ยี่ห้อ ไม่ใช่ว่าเป็นคนติดแบรนด์ แต่ว่าผมเองเคยลองเสี่ยงกับยี่ห้อประหลาดๆ บน Ebay มาก่อนแล้ว พวก Kingๆ ทั้งหลาย เช่น KingSpec, Kingdian ผมอาจจะดวงไม่ดีเองก็ได้ แต่ว่าก็ซื้อมาแล้วใช้ไม่ได้อะ เป็นการใช้ไม่ได้แบบน่ากลัวด้วย ก็คือ เครื่องมองเห็น ลงวินโดวส์ได้ แต่ใช้ๆ ไปเครื่องชอบค้าง ไปศึกษาเพิ่มเติมเลยรู้ว่า Flash Memory มันมีเรื่องของคุณภาพชิพด้วยเหมือนกัน! มันอาจจะเป็น SSD ก็จริง แต่ว่า ใช้ Flash Memory คุณภาพต่ำ มันก็ช้าอยู่ดี แต่ที่ไม่ไหวคือ ใช้แล้วชอบค้าง ก็คือเหมือนว่าพอ Windows ส่งคำสั่ง Read/Write ให้มันเยอะๆ ตัว Controller มันคงจะค้างไป แล้วพอไปดู Response Time ใน Task Manager ก็พบว่า Response Time อยู่ระดับ 10,000ms กันเลย...ลองดูคนเทสให้ดูได้ ดูเลข Random Write นั่นสิ (ปล. ในภาพคือเครื่อง GPD)

    ส่วนของ LEVEL51 เราเลือกใช้ Patriot ซึ่งก็เป็นยี่ห้อจากอเมริกาที่เราคุ้นเคยกะเขาดี, Crucial ซึ่งเป็นคนที่ทำชิพ NAND เลย และ Samsung ซึ่งทุกคนก็รู้จักกันดีอยู่แล้ว

  • ความเร็ว Random Read/Write ก็ในเมื่อเราซื้อ SSD เพราะว่าต้องการให้เครื่องรู้สึกเร็ว สิ่งที่เราจะต้องดูก็คือความเร็ว Random Read/Write จากผลรีวิว ไม่ใช่ความเร็วหลัก 1,000-2,000-3,000MB/s บนกล่อง ซึ่งเป็นความเร็ว Sequential Read/Write แบบที่ Queue Depth ลึกมาก นะ คือที่ได้เลขเยอะๆ เนี่ย เขาเทสโดยการส่งข้อมูลมากมายมหาศาลไปให้ Drive มันจัดการ (Queue = คิว, Queue Depth มากคือ คิวยาว) มันคือความสามารถสูงสุดที่เป็นไปได้ก็จริง แต่ในการใช้งานจริง เราไม่ได้ใช้ขนาดนั้นน่ะสิ

    สำหรับบนเว็บ LEVEL51 เราก็สรรหามาเทียบให้ดูแล้วนะ จะเห็นว่า Scorch กับ 970 EVO ความเร็ว QD32 ต่างกันฟ้าเหว แต่ Random นั่นแทบไม่ต่างกันเลย :)





แล้วพวกเลขอื่นๆ เสปคอื่นๆ ละ ไม่ต้องดูเหรอ!?!?!

พวกอื่นๆ ไม่ค่อยสำคัญเลยนะ อ่ะ มาอธิบายให้ฟังว่ามันคืออะไรมั่ง เอาจริงๆ พวกนี้ไม่ต้องไปสนใจมันเลย

  • SLC MLC TLC QLC อันนี้เป็นเทคโนโลยีของชิพ Flash Memory (NAND) ว่ามันเป็นแบบ ช่องละ 1, 2, 3 หรือ 4 บิต ยิ่งมันเก็บได้เยอะ มันก็จะยิ่งถูก แต่ข้อเสียของมันคือมันจะช้า และเสียง่ายขึ้น ซึ่งเป็นสิ่งที่ทุกคนกลัวเอามากๆ เพราะปกติเราไม่เคยเห็นกังวลกับอายุขัยของ HDD มาก่อน...ทั้งที่ประมาณ 3-4 ปี HDD ก็เสียหมดแล้ว เหอๆ
  • Write Endurance ก็คือเราสามารถเขียนข้อมูลลงไปใน SSD ได่้เยอะแค่ไหน ก่อนที่มันจะเสีย หน่วยมักจะเป็น TB = TBW = Terabytes Written (1 Terabyte = 1,000 GB ไม่ใช่ 1024GB) ก็คือถ้าเขียนว่า Write Endurance : 100TB แปลว่าเราเขียนข้อมูลลงไปครบ 100,000GB มันถึงจะเสีย ค่านี้อาจจะเขียนได้อีกแบบว่า (T)DWPD หมายถึง (Total)Drive Write Per Day หน่วยจะเป็นอัตราส่วน เช่น ถ้า SSD ขนาด 500GB รับประกัน 5 ปี บอกว่า 0.5 DWPD แปลว่าใน 1 วัน เราสามารถเขียนข้อมูลได้ 250GB ถ้าหวังให้มันมีอายุได้ 5 ปี เป็นต้น

    เรื่อง Write Endurance นี้เป็นเรื่องที่หลายคนไปกังวลกับมันมากจนเกินไป ขออนุญาตส่งภาพ SSD อายุการใช้งานประมาณ 3 ปีกว่าของผมให้ดู ซึ่งเป็น Drive ที่รับประกะันว่าสามารถเขียนได้วันละ 20GB ติดกัน 3 ปี หรือแค่ 0.04DWPD เอง ซึ่งน้อยมากๆ เลย (ซื้อมาตอนยังไม่ค่อยรู้เรื่อง) เป็น Drive ที่ใช้เก็บ Footage ตอนตัดต่อวีดีโอด้วย ตอนนี้จากการเปิดมาเครื่องมา 1496 ครั้ง (ถ้าเปิดวันละครั้งก็ 4 ปี) เพิ่งเขียนลงชิพ NAND ไปจริงๆ 6TB จากคำสั่งเขียนทั้งหมด 11TB นั่นก็เพราะว่า SSD แบบ MLC TLC QLC นั้นภายในตัวมันก็จะมีกรรมวิธีซับซ้อนในการป้องกันไม่ให้ชิพ NAND เสื่อมเร็วเกินไปของใครของมันต่างกัน วิธีนึงก็คือการจำลองพื้นที่บางส่วน เป็นแบบ SLC เอาไว้ช่วยให้เขียนได้เร็ว แล้วก็ลดความเสื่อมด้วยในตัว ถ้าเราเขียนไม่เยอะมาก ส่วนใหญ่มันก็จะไปใช้พื้นที่ที่จำลองเป็น SLC ตรงนี้นะั่นเอง
     
  • Random Read/Write IOPS - อันนี้เอาไว้เชิงเปรียบเทียบ ว่า ถ้าเราใช้งานแบบ Random มันสามารถประมวลผลคำสั่งได้กี่คำสั่งต่อวินาที (I/O per second) ตอนนี้ก็อยู่ในหลัก 100,000 IOPS หรือ 100K IOPS กันแล้ว ถ้าเป็น NVMe ส่วนใหญ่จะ IOPS เยอะกว่าแบบ SATA

แล้วนัันแนะนำยังไง

อันนี้ขอแยกเป็นเคสไป

  • ถ้าเอาไปเล่นเกม แนะนำให้ใส่ SSD 128GB กับ HDD แบบ FireCuda 1TB เราไม่จำเป็นต้องเก็บเกมลง SSD เลย เพราะว่าส่วนมากเกมจะอ่านข้อมูลติดๆ กันเป็นพรืดอยู่แล้ว ไม่ได้อ่านข้ามไปข้ามมา ประมาณว่าข้อมูลของฉากเดียวกัน เขาก็จัดให้มันอยู่ติดๆ กันในไฟล์เกมไง แต่สำหรับเกม Open World บางเกมที่อ่อนไหวกับ Fragmentation มากๆ โดยเฉพาะคนโหลดบิต โหลดเกมลบเกมบ่อยๆ ก็ค่อย Defrag มันบ้างก็พอ SSD นั้นเอาไว้ลง Windows ให้เครื่องมันทำงานเร็วทันใจ พอแล้ว
  • ถ้าเอาไปแต่งรูป/ตัดต่อวีดีโอ แนะนำให้ใส่ SSD 500GB+ ตัวเดียวไปเลย เรื่องแรกคือความน่าเชื่อถือของ SSD มีสูงกว่า HDD มาก จากที่เราขายเครื่องมา SSD Samsung เพิ่งมีเสียไปแค่ 1 ตัว (และมี SSD ยี่ห้อ PIONEER ที่เราตัดสินใจลองใช้ดู เพราะโดน Pitch มา อันนี้ลองแค่ 10 อันเสีย 7 ถึงบอกให้ดูยี่ห้อด้วย ฮือๆ) ส่วนเฉพาะผมคนเดียว อายุก็ไม่ได้มากเท่าไหร่! :P มี HDD ของตัวเองที่เสียอยู่ประมาณ 6 ตัว พร้อมข้อมูลข้้างในนั้นด้วยจ้า เรื่องถัดมาก็คือ แล้วเวลาเข้า Folder ที่รูปเยอะๆ ใน HDD เนี่ย รู้สึกเลยละ...รู้สึกแย่ >.<
  • ถ้าเอาไปทำงาน Office แนะนำใส่ SSD 128GB-250GB ตัวเดียว ด้วยความน่าเชื่อถือของมันเหมือนกัน

แต่ถึงใช้ SSD แล้วสุดท้าย อย่าลืม Backup! อันนี้สำคัญมาก ไว้จะมาเล่าให้ฟังโอกาสต่อไป :D

หวังว่าข้อมูลในโพสนี้จะเป็นประโยชน์นะ วันนี้นั่งเขียนทั้งวันเลย~

BLOG