BÁO CÁO ĐÁNH GIÁ HIỆU NĂNG ĐẦU ĐỌC Ổ CỨNG NGOÀI
Thiết bị chuyển đổi USB Type C & USB-A
Thực hiện trên: MacBook Pro M1 (2020) – RAM 16GB | Ổ cứng: Samsung SSD 240GB SATA 6Gbps
1. Giới thiệu
Mục tiêu của tài liệu này là đánh giá và so sánh hiệu năng truyền dữ liệu của hai thiết bị chuyển đổi giao tiếp cho ổ cứng SSD/HDD 2.5 inch:
- Type C: UGREEN CM321 – Cáp chuyển USB 3.0 & USB-C sang SATA 7+15 (50cm)
- USB A: Đầu chuyển USB-C cái sang USB-A đực 3.0, hỗ trợ sạc nhanh 18W, tốc độ truyền 10Gbps
Các bài kiểm tra sử dụng phần mềm mã nguồn mở fio (Flexible I/O Tester) – công cụ benchmark I/O mạnh mẽ, phổ biến trong kiểm thử hiệu năng đĩa, với các tùy chọn sau:
--rw=readwrite: Đọc và ghi tuần tự--bs=1M / 4K: Kích thước block là 1MB (đánh giá Throughput) hoặc 4KB (đánh giá IOPS)--size=2G: Dữ liệu mẫu 2GB--iodepth=1: Độ sâu hàng đợi là 1--time_based --runtime=30s: Chạy liên tục 30 giây để đo hiệu năng ổn định--direct=1: Truy cập thiết bị trực tiếp, bỏ qua bộ đệm hệ thống--group_reporting: Tổng hợp kết quả
2. Kết quả đánh giá
2.1 Giao tiếp Type C (UGREEN CM321)
Throughput
### Throughput
shell> fio --name=seqrw --rw=readwrite --size=2G --directory=. --bs=1M --numjobs=1 --time_based --runtime=30s --iodepth=1 --direct=1 --group_reporting
seqrw: (g=0): rw=rw, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1
fio-3.40
Starting 1 process
Jobs: 1 (f=1): [M(1)][100.0%][r=156MiB/s,w=160MiB/s][r=156,w=160 IOPS][eta 00m:00s]
seqrw: (groupid=0, jobs=1): err= 0: pid=20925: Mon Jul 28 20:17:47 2025
read: IOPS=150, BW=151MiB/s (158MB/s)(4529MiB/30001msec)
clat (usec): min=2685, max=6276, avg=2860.39, stdev=180.09
lat (usec): min=2685, max=6276, avg=2860.48, stdev=180.10
clat percentiles (usec):
| 1.00th=[ 2737], 5.00th=[ 2769], 10.00th=[ 2769], 20.00th=[ 2802],
| 30.00th=[ 2802], 40.00th=[ 2802], 50.00th=[ 2802], 60.00th=[ 2835],
| 70.00th=[ 2835], 80.00th=[ 2835], 90.00th=[ 2999], 95.00th=[ 3261],
| 99.00th=[ 3523], 99.50th=[ 3720], 99.90th=[ 4621], 99.95th=[ 5014],
| 99.99th=[ 6259]
bw ( KiB/s): min=111524, max=188952, per=100.00%, avg=154707.75, stdev=16704.12, samples=59
iops : min= 108, max= 184, avg=150.78, stdev=16.42, samples=59
write: IOPS=154, BW=154MiB/s (162MB/s)(4635MiB/30001msec); 0 zone resets
clat (usec): min=2688, max=11790, avg=3651.84, stdev=414.28
lat (usec): min=2699, max=11802, avg=3662.11, stdev=414.44
clat percentiles (usec):
| 1.00th=[ 2900], 5.00th=[ 3097], 10.00th=[ 3163], 20.00th=[ 3294],
| 30.00th=[ 3490], 40.00th=[ 3654], 50.00th=[ 3720], 60.00th=[ 3785],
| 70.00th=[ 3818], 80.00th=[ 3851], 90.00th=[ 3916], 95.00th=[ 3982],
| 99.00th=[ 5211], 99.50th=[ 5604], 99.90th=[ 8029], 99.95th=[ 8717],
| 99.99th=[11731]
bw ( KiB/s): min=133120, max=182495, per=99.91%, avg=158053.20, stdev=13039.61, samples=59
iops : min= 130, max= 178, avg=154.07, stdev=12.78, samples=59
lat (msec) : 4=97.95%, 10=2.04%, 20=0.01%
cpu : usr=0.23%, sys=2.52%, ctx=9225, majf=0, minf=10
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=4529,4635,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=151MiB/s (158MB/s), 151MiB/s-151MiB/s (158MB/s-158MB/s), io=4529MiB (4749MB), run=30001-30001msec
WRITE: bw=154MiB/s (162MB/s), 154MiB/s-154MiB/s (162MB/s-162MB/s), io=4635MiB (4860MB), run=30001-30001msec
IOPS (4KB)
shell> fio --name=seqrw --rw=readwrite --size=2G --directory=. --bs=4K --numjobs=1 --time_based --runtime=30s --iodepth=1 --direct=1 --group_reporting
seqrw: (g=0): rw=rw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.40
Starting 1 process
Jobs: 1 (f=1): [M(1)][100.0%][r=27.3MiB/s,w=27.2MiB/s][r=6980,w=6959 IOPS][eta 00m:00s]
seqrw: (groupid=0, jobs=1): err= 0: pid=20935: Mon Jul 28 20:19:54 2025
read: IOPS=9938, BW=38.8MiB/s (40.7MB/s)(1165MiB/30001msec)
clat (nsec): min=0, max=22008k, avg=60972.45, stdev=169992.13
lat (nsec): min=0, max=22008k, avg=61002.91, stdev=169992.31
clat percentiles (nsec):
| 1.00th=[ 0], 5.00th=[ 0], 10.00th=[ 0],
| 20.00th=[ 1004], 30.00th=[ 1004], 40.00th=[ 1004],
| 50.00th=[ 77312], 60.00th=[ 84480], 70.00th=[ 88576],
| 80.00th=[ 93696], 90.00th=[ 98816], 95.00th=[ 101888],
| 99.00th=[ 144384], 99.50th=[ 193536], 99.90th=[3620864],
| 99.95th=[3751936], 99.99th=[3883008]
bw ( KiB/s): min=25296, max=94582, per=100.00%, avg=39888.07, stdev=20471.31, samples=59
iops : min= 6324, max=23645, avg=9971.73, stdev=5117.85, samples=59
write: IOPS=9934, BW=38.8MiB/s (40.7MB/s)(1164MiB/30001msec); 0 zone resets
clat (nsec): min=0, max=4377.0k, avg=39230.48, stdev=151257.11
lat (nsec): min=0, max=4377.0k, avg=39267.50, stdev=151256.79
clat percentiles (nsec):
| 1.00th=[ 0], 5.00th=[ 0], 10.00th=[ 0],
| 20.00th=[ 1004], 30.00th=[ 1004], 40.00th=[ 1004],
| 50.00th=[ 1004], 60.00th=[ 1004], 70.00th=[ 1004],
| 80.00th=[ 112128], 90.00th=[ 124416], 95.00th=[ 138240],
| 99.00th=[ 220160], 99.50th=[ 240640], 99.90th=[3424256],
| 99.95th=[3620864], 99.99th=[3784704]
bw ( KiB/s): min=25416, max=93124, per=100.00%, avg=39887.58, stdev=20493.71, samples=59
iops : min= 6354, max=23281, avg=9971.59, stdev=5123.41, samples=59
lat (nsec) : 2=11.75%
lat (usec) : 2=45.63%, 4=0.48%, 10=0.02%, 20=0.01%, 50=0.01%
lat (usec) : 100=25.55%, 250=16.16%, 500=0.19%, 750=0.01%, 1000=0.01%
lat (msec) : 2=0.01%, 4=0.19%, 10=0.01%, 50=0.01%
cpu : usr=0.83%, sys=15.35%, ctx=251434, majf=0, minf=11
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=298151,298045,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=38.8MiB/s (40.7MB/s), 38.8MiB/s-38.8MiB/s (40.7MB/s-40.7MB/s), io=1165MiB (1221MB), run=30001-30001msec
WRITE: bw=38.8MiB/s (40.7MB/s), 38.8MiB/s-38.8MiB/s (40.7MB/s-40.7MB/s), io=1164MiB (1221MB), run=30001-30001msec
| Tiêu chí | Giá trị |
|---|---|
| Throughput | Read: 151 MiB/s, Write: 154 MiB/s |
| IOPS (4KB) | Read: 9,938, Write: 9,934 |
| CPU sử dụng | usr: 0.83%, sys: 15.35% |
| Độ trễ trung bình | Read: 61 µs, Write: 39 µs |
Nhận xét:
Thiết bị giao tiếp Type C cho thấy hiệu năng cao, đạt gần 160MB/s throughput và gần 10.000 IOPS, rất phù hợp cho SSD SATA sử dụng qua MacBook M1. Độ trễ đọc/ghi thấp, băng thông ổn định.
2.2 Giao tiếp USB A (thông qua đầu chuyển từ USB-C)
a. IOPS (Block size = 4K)
shell> fio --name=seqrw --rw=readwrite --size=2G --directory=. --bs=4K --numjobs=1 --time_based --runtime=30s --iodepth=1 --direct=1 --group_reporting
seqrw: (g=0): rw=rw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.40
Starting 1 process
Jobs: 1 (f=1): [M(1)][100.0%][r=6240KiB/s,w=6518KiB/s][r=1560,w=1629 IOPS][eta 00m:00s]
seqrw: (groupid=0, jobs=1): err= 0: pid=20974: Mon Jul 28 20:22:01 2025
read: IOPS=2018, BW=8075KiB/s (8269kB/s)(237MiB/30004msec)
clat (nsec): min=0, max=31033k, avg=280464.07, stdev=1367191.26
lat (nsec): min=0, max=31033k, avg=280494.86, stdev=1367190.30
clat percentiles (nsec):
| 1.00th=[ 0], 5.00th=[ 0], 10.00th=[ 0],
| 20.00th=[ 1004], 30.00th=[ 1004], 40.00th=[ 5984],
| 50.00th=[ 337920], 60.00th=[ 350208], 70.00th=[ 358400],
| 80.00th=[ 370688], 90.00th=[ 382976], 95.00th=[ 399360],
| 99.00th=[ 460800], 99.50th=[ 493568], 99.90th=[29753344],
| 99.95th=[30539776], 99.99th=[30801920]
bw ( KiB/s): min= 4000, max=19366, per=100.00%, avg=8095.53, stdev=3215.41, samples=59
iops : min= 1000, max= 4841, avg=2023.64, stdev=803.79, samples=59
write: IOPS=2013, BW=8055KiB/s (8248kB/s)(236MiB/30004msec); 0 zone resets
clat (nsec): min=0, max=201387k, avg=214882.62, stdev=1435284.47
lat (nsec): min=0, max=201387k, avg=214965.36, stdev=1435281.92
clat percentiles (nsec):
| 1.00th=[ 0], 5.00th=[ 0], 10.00th=[ 1004],
| 20.00th=[ 1004], 30.00th=[ 1004], 40.00th=[ 1004],
| 50.00th=[ 1004], 60.00th=[ 1004], 70.00th=[ 2008],
| 80.00th=[ 626688], 90.00th=[ 675840], 95.00th=[ 716800],
| 99.00th=[ 757760], 99.50th=[ 774144], 99.90th=[29229056],
| 99.95th=[30277632], 99.99th=[30801920]
bw ( KiB/s): min= 4039, max=20150, per=100.00%, avg=8077.54, stdev=3247.96, samples=59
iops : min= 1009, max= 5037, avg=2019.03, stdev=811.96, samples=59
lat (nsec) : 2=10.00%
lat (usec) : 2=41.18%, 4=5.76%, 10=0.55%, 20=0.01%, 50=0.01%
lat (usec) : 500=29.78%, 750=11.90%, 1000=0.64%
lat (msec) : 2=0.01%, 4=0.01%, 50=0.18%, 250=0.01%
cpu : usr=0.22%, sys=4.55%, ctx=51603, majf=0, minf=10
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=60571,60421,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=8075KiB/s (8269kB/s), 8075KiB/s-8075KiB/s (8269kB/s-8269kB/s), io=237MiB (248MB), run=30004-30004msec
WRITE: bw=8055KiB/s (8248kB/s), 8055KiB/s-8055KiB/s (8248kB/s-8248kB/s), io=236MiB (247MB), run=30004-30004msec
| Tiêu chí | Giá trị |
|---|---|
| IOPS | Read: 2,018, Write: 2,013 |
| Throughput | Read: 8,075 KiB/s, Write: 8,055 KiB/s |
| Độ trễ trung bình | Read: 280 µs, Write: 215 µs |
| CPU sử dụng | usr: 0.22%, sys: 4.55% |
b. Throughput (Block size = 1M)
shell> fio --name=seqrw --rw=readwrite --size=2G --directory=. --bs=1M --numjobs=1 --time_based --runtime=30s --iodepth=1 --direct=1 --group_reporting
seqrw: (g=0): rw=rw, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1
fio-3.40
Starting 1 process
Jobs: 1 (f=1): [M(1)][100.0%][r=15.0MiB/s,w=21.0MiB/s][r=15,w=21 IOPS][eta 00m:00s]
seqrw: (groupid=0, jobs=1): err= 0: pid=20976: Mon Jul 28 20:22:46 2025
read: IOPS=17, BW=17.4MiB/s (18.2MB/s)(522MiB/30011msec)
clat (usec): min=120, max=28853, avg=26030.84, stdev=1176.87
lat (usec): min=120, max=28853, avg=26031.05, stdev=1176.87
clat percentiles (usec):
| 1.00th=[25297], 5.00th=[25560], 10.00th=[25822], 20.00th=[25822],
| 30.00th=[25822], 40.00th=[26084], 50.00th=[26084], 60.00th=[26084],
| 70.00th=[26346], 80.00th=[26346], 90.00th=[26346], 95.00th=[26346],
| 99.00th=[26870], 99.50th=[27132], 99.90th=[28967], 99.95th=[28967],
| 99.99th=[28967]
bw ( KiB/s): min=10138, max=30415, per=100.00%, avg=17841.95, stdev=4428.09, samples=59
iops : min= 9, max= 29, avg=16.75, stdev= 4.38, samples=59
write: IOPS=18, BW=18.7MiB/s (19.6MB/s)(561MiB/30011msec); 0 zone resets
clat (usec): min=25522, max=30689, avg=29248.98, stdev=1115.10
lat (usec): min=25549, max=30704, avg=29267.23, stdev=1114.53
clat percentiles (usec):
| 1.00th=[26346], 5.00th=[26870], 10.00th=[27657], 20.00th=[28181],
| 30.00th=[28705], 40.00th=[29230], 50.00th=[29754], 60.00th=[30016],
| 70.00th=[30016], 80.00th=[30278], 90.00th=[30278], 95.00th=[30278],
| 99.00th=[30540], 99.50th=[30540], 99.90th=[30802], 99.95th=[30802],
| 99.99th=[30802]
bw ( KiB/s): min= 8110, max=26360, per=100.00%, avg=19145.46, stdev=3910.75, samples=59
iops : min= 7, max= 25, avg=18.03, stdev= 3.85, samples=59
lat (usec) : 250=0.09%
lat (msec) : 50=99.91%
cpu : usr=0.04%, sys=0.53%, ctx=8660, majf=0, minf=10
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=522,561,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=17.4MiB/s (18.2MB/s), 17.4MiB/s-17.4MiB/s (18.2MB/s-18.2MB/s), io=522MiB (547MB), run=30011-30011msec
WRITE: bw=18.7MiB/s (19.6MB/s), 18.7MiB/s-18.7MiB/s (19.6MB/s-19.6MB/s), io=561MiB (588MB), run=30011-30011msec
| Tiêu chí | Giá trị |
|---|---|
| Throughput | Read: 17.4 MiB/s, Write: 18.7 MiB/s |
| IOPS | Read: 17, Write: 18 |
| Độ trễ | Read: \~26ms, Write: \~29ms |
Nhận xét:
Thiết bị chuyển từ Type C sang USB A bị giới hạn nghiêm trọng hiệu năng, chỉ đạt \~17-18MB/s throughput và \~2.000 IOPS – giảm hơn 5 lần so với kết nối trực tiếp qua Type C. Điều này phản ánh rõ ràng việc nghẽn cổ chai do giao tiếp USB-A hoặc chipset chuyển đổi.
3. Kết luận
| Thông số | Type C (UGREEN) | USB A (chuyển đổi) |
|---|---|---|
| Max Throughput | 154 MiB/s | 18.7 MiB/s |
| Max IOPS | \~9,938 | \~2,018 |
| Latency | Thấp | Cao (gấp \~4-7 lần) |
| Hiệu năng | Tốt nhất | Giảm đáng kể |
- Khuyến nghị: Để đảm bảo tốc độ truyền tối đa và hiệu năng I/O cao nhất cho ổ cứng SSD, nên sử dụng giao tiếp trực tiếp Type C thay vì chuyển sang USB A.
4. Phụ lục: Cấu hình phần mềm và thiết bị
- Phần mềm:
fiov3.40 - Thiết bị kiểm thử: MacBook Pro M1 (2020), 16GB RAM
- Ổ cứng: Samsung SSD 240GB SATA 6Gbps (2.5”)
- Hệ điều hành: macOS