Các máy tính một bo mạch (máy tính nhúng) như Raspberry Pi, từ đầu luôn được phát triển để sử dụng thẻ nhớ microSD card như lựa chọn lưu trữ chính. Dù hầu hết thiết bị trong số này có thể sử dụng một phương tiện lưu trữ khác như USB Drive, HDD/SSD, NFS để vận hành và lưu dữ liệu, thẻ nhớ microSD vẫn là lựa chọn phổ biến nhất do gọn gàng, rẻ và đơn giản.
Tuy nhiên, lựa chọn thẻ nhớ chuẩn nào, dung lượng bao nhiêu để phù hợp với cách đọc ghi và loại dữ liệu đọc ghi trên các thiết bị như Raspberry Pi hoàn toàn không giống như khi ta chọn thẻ nhớ để sử dụng lưu trữ ảnh, video trên điện thoại thông minh hay máy ảnh, máy ghi hình hoặc lưu trữ dữ liệu sao lưu (như trên USB Drive).
Kết luận: nên sử dụng thẻ nhớ nào
Các kết luận sau rút ra từ kết quả đo dưới đây và chỉ áp dụng khi bạn cân nhắc giữa tốc độ/hiệu suất hoạt động và giá mua thẻ:
- Thẻ A2 cho tốc độ đọc ghi nhanh nhất và cũng có giá cao nhất nên nếu giá cả không là vấn đề, bạn nên chọn thẻ A2 với dung lượng lớn (64GB)
- Thẻ A1 chậm hơn A2 trên Pi nhưng vẫn rất nhanh so với các thẻ khác và chậm hơn không quá nhiều so với A2, bạn nên cân nhắc nếu giá chênh lệch lớn
- Thẻ U3 dung lượng cao cho tốc độ đọc ngẫu nhiên rất tốt, vì vậy là lựa chọn hợp lý khi so với thẻ A1 có dung lượng thấp hơn nhưng mức giá tương đương
- Các loại thẻ trên đều không so được với ổ cứng SSD cắm qua giao tiếp USB 3.0 khi mà tốc độ chênh lệch từ 3 lần ở tốc độ đọc đến 8 lần ở tốc độ ghi
Khác biệt giữa việc sử dụng thẻ nhớ trên Pi và máy ảnh, điện thoại
Thẻ nhớ microSD, ban đầu được phát triển bởi SanDisk để được sử dụng lưu trữ ảnh/video và nhạc đầu tiên trên điện thoại Motorola. Từ đó đến nay, thẻ nhớ microSD vẫn được liên tục phát triển cho mục đích chính này.
Thông tin thêm
Sự thật là ban đầu thẻ nhớ microSD được gọi là T-Flash và có dung lượng tối đa chỉ 128MB vào thời điểm thương mại hoá. Hiện nay thẻ microSD có dung lượng lớn nhất được bán ra là 1TB.
Lưu trữ trên điện thoại, máy ảnh, camera quan sát
Khi sử dụng cho mục đích lưu trữ, thẻ microSD không cần phải được đọc ghi liên tục và thông thường chỉ đọc ghi các file lớn, liền mạch. Như trên các camera quan sát, thẻ sẽ được ghi lần lượt từ đầu đến hết dung lượng, sau đó các file cũ nhất sẽ bị xoá đi và ghi đè dần theo kiểu cuốn chiếu.
Các đặc điểm chính khi thẻ được sử dụng cho mục đích này:
- Chỉ đọc/ghi khi có nhu cầu, ít khi liên tục
- Các file hầu hết có dung lượng lớn (vài MB đến vài chục, vài trăm MB)
- Thẻ thông thường được ghi tuần tự từ đầu đến hết dung lượng
Vận hành trên các máy tính nhúng như Pi
Khi được sử dụng để chứa hệ điều hành – OS và các ứng dụng trên Pi, cách thẻ nhớ được sử dụng khác hẳn. Điển hình là thẻ microSD phải chịu được việc đọc ghi liên tục, số lượng file trên thẻ rất lớn và đa phần các file lại có dung lượng nhỏ, việc đọc ghi lên thẻ là ngẫu nhiên tuỳ vị trí file, không phải từ đầu tuần tự đến cuối.
Các đặc điểm chính khi thẻ được dùng chứa hệ điều hành trên Pi/SMC:
- Đọc ghi liên tục xảy ra trong suốt thời gian hoạt động
- Nhiều file với dung lượng phong phú và đa phần file có dung lượng nhỏ
- Đọc và ghi ngẫu nhiên, không theo thứ tự nào nhất định
Thông số nào quan trọng ảnh hưởng đến hiệu suất của thẻ microSD trên Pi
Có 2 thông số quan trọng liên quan đến tốc độ của một thẻ nhớ microSD: tốc độ đọc/ghi tuần tự (sequential speed) và tốc độ đọc/ghi ngẫu nhiên (random speed).
Các chuẩn thẻ nhớ Class-x, UHS-x, V-x đều là chuẩn quy định tốc độ ghi tuần tự tối thiểu.
Các chuẩn thẻ nhớ A-x là chuẩn quy định tốc độ đọc/ghi ngẫu nhiên tối thiểu, tính bằng IOPS – số hoạt động đọc/ghi tối thiểu trong một giây.
Tốc độ đọc/ghi ngẫu nhiên mới là thông số quan trọng ảnh hưởng chính đến hoạt động của thẻ nhớ trên các máy tính nhúng như Raspberry Pi.
Thẻ nhớ nào phù hợp cho Pi và các thiết bị tương tự?
Một số thông lệ trên thẻ nhớ microSD
Thẻ nhớ microSD bản chất là bộ nhớ Flash đơn giản, và do đó, cũng có một số yếu tố tương tự như đã được đúc kết từ lý thuyết và thực tiễn trên SSD. Bao gồm:
- Thẻ có dung lượng càng lớn thì càng nhanh và càng bền
- Thẻ với chuẩn độ bền càng cao thì càng bền (và có thể, càng nhanh), chuẩn này phụ thuộc nhà sản xuất (Ultra, Extreme, Extreme Pro, EVO, EVO+, Pro Endurance v.v..)
- Thẻ với chuẩn tốc độ A-x sẽ có tốc độ đọc/ghi ngẫu nhiên cao hơn thẻ theo chuẩn tốc độ ghi tuần tự Class-x, UHS-x, V-x
- Thẻ với chuẩn càng cao thì tốc độ đọc/ghi tương ứng càng nhanh, ví dụ thẻ A2 được cho là sẽ có tốc độ đọc/ghi ngẫu nhiên cao hơn thẻ A1
- Chip nhớ trên thẻ microSD hiện được sản xuất chủ yếu bởi 2 nhà sản xuất lớn là SanDisk (Western Digital) và Samsung. Các nhà sản xuất khác như Kingston chỉ thay đổi cách đóng gói và phối hợp giữa chip nhớ và controller (chip điều khiển).
Kết quả đo tốc độ và so sánh
So sánh tốc độ đọc ghi ngẫu nhiên 4K
Ngạc nhiên lớn nhất chính là việc ngôi đầu bảng về tốc độ đọc ngẫu nhiên 4K (block 4K, không phải độ phân giải video 4K) thuộc về thẻ nhớ Samsung EVO Plus U3 64GB. Cách không xa là thẻ nhớ SanDisk Ultra A1 32GB và tiếp theo là SanDisk Extreme A2 64GB. Thẻ nhớ Samsung EVO U1 16GB có tốc độ đọc nhanh hơn Samsung EVO Plus U1 32GB (?). (*)
Ở tốc độ ghi ngẫu nhiên 4K, không có gì ngạc nhiên khi đứng đầu là thẻ nhớ chuẩn A2 SanDisk Extreme 64GB, nhanh gần gấp rưỡi thẻ nhớ ở vị trí tiếp theo SanDisk Ultra A1 32GB. Thẻ nhớ Samsung EVO Plus 64GB rõ ràng không được tối ưu cho tác vụ ghi ngẫu nhiên khi tốc độ thấp hơn đến 3 lần so với đối thủ cùng dung lượng chuẩn A2 từ SanDisk. Các thẻ không đạt chuẩn A có tốc độ ghi ngẫu nhiên tương đối giống nhau và đều thấp hơn khá nhiều so với các thẻ chuẩn A.
(*) Do “cảm thấy” bất thường, phép đo trên thẻ Samsung EVO Plus U3 64GB đã được thực hiện lại thêm 2 lần nữa nhưng kết quả không sai khác nhiều
So sánh tốc độ đọc ghi ngẫu nhiên 4K, 512K và 16M
Bên dưới là biểu đồ so sánh tốc độ đọc/ghi ngẫu nhiên tương ứng với kích thước bản ghi 4K, 512K và 16M. Khi đọc các khối lớn từ 512K, không có chênh lệch đáng kể giữa các loại thẻ.
Tốc độ ghi ngẫu nhiên 16M chênh lệch rất lớn giữa thẻ Sandisk Extreme A2 64GB và các thẻ còn lại. Trên thực tế, trừ phi ghi video chuẩn 4K, rất hiếm khi tác vụ ghi được thực hiện trên các khối 16M.
Thẻ và thiết bị được sử dụng để kiểm tra tốc độ
Do chưa có phương thức kiểm tra độ bền của thẻ (số lượng dữ liệu đọc/ghi, thời gian sử dụng trước khi thẻ bị hỏng hay khả năng chống sốc điện, sốc nhiệt v.v..), tạm thời chúng tôi chỉ kiểm tra thẻ về tốc độ đọc/ghi và thực hiện một vài thao tác liên quan đến dữ liệu.
Các loại thẻ microSD được đo
THẺ | THÔNG SỐ |
---|---|
Thẻ Extreme chuẩn A2 U3 V30, dung lượng 64GB đến từ SanDisk | |
Thẻ Ultra chuẩn A1 U1, dung lượng 32GB đến từ SanDisk | |
Thẻ EVO Plus U3, dung lượng 64GB đến từ Samsung | |
Thẻ EVO Plus U1, dung lượng 32GB đến từ Samsung | |
Thẻ EVO U1, dung lượng 16GB đến từ Samsung |
Một số bài viết liên quan đến Pi và các ứng dụng trên Pi
- Home Assistant: cài đặt mới
- Home Assistant: cài đặt thông qua Docker
- Home Assistant: hiển thị và theo dõi thông số máy chủ
- Flash Zigbee2Mqtt lên CC2531
- Cài đặt và bảo mật Mosquitto MQTT Broker trên Linux
- Khởi động Raspberry Pi 4 từ SSD
- Thẻ nhớ microSD nào thích hợp cho Pi / SMC, U3/A1/A2?
- Raspberry Pi: Điều khiển quạt tản nhiệt
- Home Assistant: tận dụng máy chủ để phát âm thanh thông báo hay phát nhạc
Các thẻ này được chọn vì dễ dàng mua được tại Việt Nam, là các thẻ phổ biến nhất trong ứng dụng cho Pi, giá cả tương đối hợp lí khi so sánh với Pi, dễ truy xuất nguồn gốc so với các thương hiệu khác.
Thiết bị khác
Tất cả thẻ được gắn trực tiếp vào khe đọc thẻ microSD của cùng một thiết bị là mẫu Raspberry Pi 4 2GB RAM. Đi cùng Raspberry Pi này là nguồn USB 5V-3A từ Anker.
Ngoài ra không có bất cứ thiết bị ngoại vi nào được gắn vào thiết bị này kể cả bàn phím hay màn hình. Dù trên ảnh, thiết bị Pi 4 này có gắn quạt tản nhiệt, tuy nhiên quạt bị vô hiệu hoá trong suốt quá trình kiểm tra do không cần thiết.
Phương thức đo tốc độ thẻ nhớ trên Pi
Thứ nhất, đây không phải bài kiểm tra tốc độ thẻ tiêu chuẩn mà chỉ có tính chất tham khảo.
Thứ hai, chúng tôi cố gắng thử nghiệm tốc độ thẻ với các thiết bị và trong môi trường gần nhất với điều kiện sử dụng thông thường.
Các mô tả và tiêu chuẩn
Các mô tả và tiêu chuẩn:
- Tất cả thẻ trên đều là thẻ mới trừ thẻ Samsung EVO 16GB là thẻ đã được sử dụng một thời gian trên chính Pi. Đây sẽ là thẻ mẫu.
- Các thẻ microSD được mua từ nhiều nhà bán hàng khác nhau (nghi ngờ thẻ giả? Mời bạn đọc phần kiểm tra trên máy tính MAC.)
- Hệ điều hành dùng để kiểm tra là Raspbian 10 (buster) dùng nhân 5.4.44 như ảnh dưới.
- Hệ điều hành Raspbian này không phải là hệ điều hành “sạch” vừa flash mà đã được cập nhật, cài đặt và vận hành một phiên bản Home Assistant mới tinh trên Docker.
- Phần mềm kiểm tra là iozone phiên bản 3.489 tải về từ trang chủ và compile cho kiến trúc CPU 32bit – phù hợp với hệ điều hành Raspbian.
- Pi được đặt trong môi trường trong phòng bình thường, nhiệt độ phòng vào khoảng 28 độ C.
Phương thức đo tốc độ thẻ nhớ trên Pi
Trước tiên thẻ Samsung EVO U1 16GB mẫu đang chứa hệ điều hành Raspbian và công cụ iozone sẽ được “clone” – nhân thành một file ảnh dạng .dmg trên máy tính (Mac).
File ảnh này sau đó được sử dụng để flash cho tất cả các thẻ còn lại qua công cụ dd của Mac. Tổng thời gian để flash vào khoảng 5-10 phút tuỳ theo mỗi thẻ.
Tất cả các thẻ này lần lượt:
- Được lắp vào khe đọc thẻ của Pi
- Pi được cắm nguồn, khởi động và chờ 5 phút để hoàn tất khởi động
- Login vào hệ điều hành Rapsbian qua kết nối SSH
- Kiểm tra mức load trung bình của hệ điều hành qua công cụ top và đèn xanh thể hiện hoạt động đọc ghi bộ nhớ lưu trữ của Pi
- Khi tất cả mức load 1m, 5m đều xuống dưới 0.7, tiến hành kiểm tra tốc độ đọc/ghi ngẫu nhiên của thẻ sử dụng công cụ izone
Lưu ý:
- Công cụ izone chỉ được chạy 1 lần trừ phi kết quả cho thấy bất thường (như được giải thích thêm ở phần kết quả)
- Phân vùng của thẻ vẫn giữ nguyên như trên ảnh thẻ gốc (16GB) chứ không được mở rộng ra toàn bộ thẻ vì không ảnh hưởng đến cách kiểm tra tốc độ trong bài này (và thực tế cũng chứng minh không có sự khác biệt sau khi mở rộng phân vùng)
- CPU Governor của Pi được cài đặt ở chế độ ondemand như khi sử dụng thông thường (xem thêm về CPU Governor)
Lệnh iozone dùng để đo – benchmark tốc độ đọc ghi của thẻ nhớ microSD:
./iozone -e -I -a -s 100M -r 4K -r 512k -r 16M -i 0 -i 1 -i 2
Có nghĩa:
- Benchmark các tốc độ Đọc/Đọc lại/Ghi/Ghi lại/Đọc ngẫu nhiên/Ghi ngẫu nhiên
- Benchmark sử dụng file tạm có dung lượng 100MB trên thẻ
- Benchmark sử dụng record size 4KB, 512KB và 16MB mặc dù kết quả 4K sẽ là kết quả so sánh duy nhất quan trọng
Kết quả chi tiết
Bạn có thể xem ảnh chụp các kết quả izone từng thẻ bên dưới.
Bạn cũng có thể tải về file dữ liệu (excel) từ các kết quả đo trên ở dưới.
konnected_microSD_benchmark_on_Pi_4.xlsx.zip
Một số ghi chú khác
Thẻ A1 và A2
Các thẻ tiêu chuẩn A hiện chỉ có duy nhất Sandisk và một vài nhà sản xuất nhỏ khác sản xuất và thương mại hoá.
Thẻ chuẩn A2 được cho là có tốc độ đọc ghi ngẫu nhiên và tuần tự cao hơn rất nhiều so với chuẩn A1 tuy nhiên khi sử dụng trên Pi 4, sự chênh lệch là có nhưng không phải rất lớn. Điều này được cho là do đầu đọc thẻ nhớ trên Raspberry Pi 4 và do sự hỗ trợ từ driver trong nhân – kernel Linux.
Thẻ A2 bổ sung 2 tính năng mới so với A1 là caching (bộ đệm) để hỗ trợ tốc độ ghi và chức năng command queuing (sắp xếp lệnh) để hỗ trợ tốc độ đọc. Cả 2 tính năng này đều cần được hỗ trợ bởi phần mềm thực hiện đọc/ghi thẻ (OS/Firmware). Hi vọng trong tương lai, các bản cập nhật Linux Kernel sẽ cải thiện điều này.
Thực tế, khi benchmark iozone trên máy tính MAC và thẻ được gắn vào bộ đọc thẻ SD trên máy tính MAC, kết quả chênh lệch rất lớn giữa 2 thẻ chuẩn A đã dùng ở trên và cả 2 đều vượt công bố của nhà sản xuất và chênh lệch nhiều lần so với kết quả trên Raspberry Pi.
Kết quả chỉ có tính tham khảo
Các kết quả trong bài chỉ có tính tham khảo chứ không nhắm đến một loại thẻ hay một thương hiệu nào. Kết quả đo thực tế dựa trên thiết bị và phương thức đã được mô tả ở trên, do vậy không đại diện cho tất cả các trường hợp sử dụng và thiết bị.
Tuy kết quả được đo trên Raspberry Pi 4, tương quan giữa các loại và chuẩn thẻ cũng có thể tương đối đồng nhất trên các thiết bị tương đồng với Pi 4.
Kết quả bổ sung khi giải nén file trên thẻ
Để đo tốc độ giải nén một file trên thẻ, chúng tôi sử dụng công cụ tar để giải nén một file nén bởi chuẩn zip (gzip). Thực chất file này là một file sao lưu của ứng dụng SmartHome: Home Assistant có dung lượng khoảng 300MB, được chép vào thẻ nhớ và giải nén ra cũng trên thẻ nhớ. Nén và giải nén các file cũng là một hoạt động tương đối phổ biến của các ứng dụng trên Pi và thiên về ghi tuần tự hơn ngẫu nhiên. Kết quả như sau:
Cảm ơn bạn đã xem bài viết này!
konnectED Team.