I was interested in seeing what FD would do after the job was completed, and the system didn’t disappoint. There was a pause of about twenty seconds, and then FD began moving data. Based on the observed throughput and the amount of data moved, it’s clear that FD was transferring things from the SSD to the HDD:
disk0 disk1
KB/t tps MB/s KB/t tps MB/s
4.00 1 0.00 1010.35 75 73.90
4.00 3 0.01 1024.00 72 71.94
4.00 1 0.00 1009.97 73 71.90
5.33 3 0.02 932.87 78 70.99
8.00 38 0.30 1011.09 79 77.91
4.80 10 0.05 969.86 56 52.98
0.00 0 0.00 999.47 75 73.14
4.00 1 0.00 404.18 88 34.70
30.72 304 9.11 748.71 68 49.66
30.29 295 8.71 484.47 93 43.94
29.43 318 9.13 0.00 0 0.00
29.89 316 9.21 0.00 0 0.00
30.78 289 8.68 0.00 0 0.00
20.92 646 13.20 0.00 0 0.00
29.62 468 13.55 0.00 0 0.00
23.18 428 9.70 75.83 46 3.40
29.27 406 11.62 0.00 0 0.00
29.69 239 6.92 4.00 1 0.00
28.89 369 10.40 0.00 0 0.00
29.09 517 14.68 0.00 0 0.00
disk0 disk1
KB/t tps MB/s KB/t tps MB/s
30.12 455 13.39 0.00 0 0.00
28.90 587 16.57 0.00 0 0.00
30.40 25 0.74 69.92 50 3.41
0.00 0 0.00 0.00 0 0.00
13.33 156 2.03 6.67 3 0.02
0.00 0 0.00 0.00 0 0.00
8.00 9 0.07 0.00 0 0.00
0.00 0 0.00 0.00 0 0.00
0.00 0 0.00 0.00 0 0.00
128.00 202 25.21 128.00 202 25.21
128.00 455 56.90 128.00 454 56.78
125.69 359 44.12 128.00 353 44.18
111.18 427 46.39 128.00 367 45.92
128.00 485 60.64 128.00 484 60.52
119.74 667 78.00 128.00 622 77.76
124.13 681 82.54 128.00 659 82.36
128.00 665 83.13 128.00 665 83.13
123.59 597 72.06 128.00 575 71.89
128.00 679 84.88 128.00 678 84.75
123.42 683 82.31 128.00 658 82.25
disk0 disk1
KB/t tps MB/s KB/t tps MB/s
123.56 676 81.56 128.00 650 81.24
128.00 503 62.91 128.00 503 62.91
122.32 506 60.47 128.00 483 60.41
128.00 643 80.38 128.00 642 80.25
122.73 682 81.74 128.00 652 81.50
123.80 685 82.82 128.00 662 82.75
128.00 565 70.64 128.00 564 70.52
122.57 529 63.34 128.00 506 63.28
128.00 555 69.40 128.00 555 69.40
121.91 708 84.28 128.00 672 84.00
128.00 661 82.63 128.00 661 82.63
122.28 586 69.96 128.00 558 69.74
128.00 458 57.28 128.00 457 57.16
108.32 381 40.34 127.76 319 39.86
This was correlated with fs_usage, which showed reads from disk0 and writes to disk1, along with what are obviously Core Storage calls occurring between each:
15:33:27.189432 RdChunkCS D=0x00debd00 B=0x20000 /dev/disk0s2
0.000328 W kernel_task.17601
15:33:27.189468 RdBgMigrCS D=0x0033d8a0 B=0x20000 /dev/CS
0.000367 W kernel_task.17601
15:33:27.190136 WrChunkCS D=0x0aeac500 B=0x20000 /dev/disk1s2
0.000629 W kernel_task.17601
15:33:27.190172 WrBgMigrCS D=0x0033d8a0 B=0x20000 /dev/CS
0.000670 W kernel_task.17601
15:33:27.190531 RdChunkCS D=0x00debe00 B=0x20000 /dev/disk0s2
0.000328 W kernel_task.17601
15:33:27.190568 RdBgMigrCS D=0x0033d8c0 B=0x20000 /dev/CS
0.000369 W kernel_task.17601
15:33:27.191233 WrChunkCS D=0x0aeac600 B=0x20000 /dev/disk1s2
0.000627 W kernel_task.17601
15:33:27.191269 WrBgMigrCS D=0x0033d8c0 B=0x20000 /dev/CS
0.000667 W kernel_task.17601
15:33:27.191638 RdChunkCS D=0x00debf00 B=0x20000 /dev/disk0s2
0.000336 W kernel_task.17601
15:33:27.191673 RdBgMigrCS D=0x0033d8e0 B=0x20000 /dev/CS
0.000376 W kernel_task.17601
The four calls listed, “RdChunkCS,” WrChunkCS,” “RdBgMigrCS,” and “WrBgMigCS,” are all referenced in the fs_usage source as being Core Storage operations; the last two are noted in the code comments as referring to “composite disk block migration” calls. This is the actual “tiering” activity that forms the core of Fusion Drive. The blocks being referenced are sequential (on disk0, the process is reading block 0x00debd00, then 0x00debe00, and then 0x00debf00), and the actual chunk size being moved around is 128KB (0x20000 bytes).
The FD migration process ran for a short amount of time (though longer than the iostat output above), then stopped. I totaled up the amount of data copied, and it came out to approximately 4GB.
I repeatedly copied large files to the drive, and the results remained consistent—the copy operations would land on the SSD until it filled, then shift seamlessly over to the HDD and continue until completion. The SSD would then immediately move data off of itself until it had 4GB of free space. If I copied in a 2GB file, it would demote 2GB of data from somewhere else to the HDD; if I copied a 1GB file, it would demote 1GB. If I copied in 50GB, it would smoothly ingest all 50GB, and then demote 4GB of data off of the SSD.