Я начинаю смотреть на ZFS, делаю тесты с FreeNAS на старом HP MicroServer (N40L). У него еще не было дополнительной оперативной памяти, поэтому он работает только с 2 ГБ, поэтому почти нет кеша.
Я создал пул на одном диске SATA емкостью 1 ТБ, создал zvol и экспортировал его с помощью iSCSI. Я только что провел несколько тестов с CrystalDiskMark в Windows 10 и получаю странные результаты при изменении размера блока пула.
ZFS 16K и NTFS 4K
-----------------------------------------------------------------------
CrystalDiskMark 5.1.0 x64 (C) 2007-2015 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
Sequential Read (Q= 32,T= 1) : 105.938 MB/s
Sequential Write (Q= 32,T= 1) : 98.709 MB/s
Random Read 4KiB (Q= 32,T= 1) : 8.330 MB/s [ 2033.7 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 6.243 MB/s [ 1524.2 IOPS]
Sequential Read (T= 1) : 93.946 MB/s
Sequential Write (T= 1) : 72.780 MB/s
Random Read 4KiB (Q= 1,T= 1) : 8.948 MB/s [ 2184.6 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 6.898 MB/s [ 1684.1 IOPS]
Test : 1024 MiB [X: 0.0% (0.2/849.9 GiB)] (x1) [Interval=5 sec]
Date : 2016/01/12 18:54:05
OS : Windows 10 Professional [10.0 Build 10586] (x64)
Здесь все, как я ожидал, по сравнению с тем же диском, который используется в качестве диска SATA на клиентском ПК.
- Небольшая потеря последовательной производительности из-за накладных расходов iSCSI.
- Случайное чтение лучше, там немного кеширования.
- Случайная запись лучше, потому что COW делает запись не на самом деле случайной.
ZFS 4K и NTFS 4K
-----------------------------------------------------------------------
CrystalDiskMark 5.1.0 x64 (C) 2007-2015 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
Sequential Read (Q= 32,T= 1) : 24.405 MB/s
Sequential Write (Q= 32,T= 1) : 81.038 MB/s
Random Read 4KiB (Q= 32,T= 1) : 3.048 MB/s [ 744.1 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 55.971 MB/s [ 13664.8 IOPS]
Sequential Read (T= 1) : 42.362 MB/s
Sequential Write (T= 1) : 45.292 MB/s
Random Read 4KiB (Q= 1,T= 1) : 0.961 MB/s [ 234.6 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 9.576 MB/s [ 2337.9 IOPS]
Test : 1024 MiB [X: 0.0% (0.2/799.9 GiB)] (x1) [Interval=5 sec]
Date : 2016/01/12 19:10:22
OS : Windows 10 Professional [10.0 Build 10586] (x64)
Несколько примечаний:
- Использование сети не превышает 600 Мб (диспетчер задач в Windows 10), то есть меньше, чем в первом тесте, когда он был полностью использован.
- Использование ЦП примерно вдвое больше, чем в первом тесте, но все еще не менее 20% простоя (максимум на сервере FreeNAS)
Вот этого я не ожидал!
- Последовательная производительность ниже. Может быть, передано больше пакетов меньшего размера, поэтому сеть используется не полностью?
- Меньше случайных чтений. Это действительно только меньше кеширования, но все же выше производительности диска. Но почему меньше кеша?
- Случайная запись намного лучше с Q = 32. Я бы сказал, что ZFS записывает 16 КБ (12 КБ пусто) при записи 4K в предыдущем тесте. Так ли это на самом деле?
Отвечая на ваши заметки:
Если вы используете zvols в ZFS, для дистрибутивов, отличных от Solaris, рекомендуется использовать большой размер блока. Под Linux мы создаем zvols с размером блока 128 КБ.
Можешь попробовать сделать то же самое?
Я знал, что у меня недостаточно ОЗУ, поэтому данные не будут кэшироваться, но похоже, что 2 ГБ было недостаточно даже для хранения метаданных в ОЗУ с размером блока 4K - больше блоков, тем больше метаданных. Если метаданные не находятся в ОЗУ при записи, метаданные должны быть прочитаны с диска, чтобы найти свободное место, и это снижает производительность.
Я получил 8 ГБ ОЗУ с ECC и сделал больше тестов, все еще один диск. Теперь результаты имеют смысл, поскольку производительность произвольной записи выше, когда размеры блоков ZFS и NTFS совпадают, а производительность последовательной записи одинакова.
Размер блока может повлиять на скорость последовательной передачи, но здесь он ограничен сетью. Я проведу больше тестов, если получу дополнительные сетевые карты для работы с несколькими путями.
ZFS 4K и NTFS 4K
Sequential Read (Q= 32,T= 1) : 118.472 MB/s
Sequential Write (Q= 32,T= 1) : 101.721 MB/s
Random Read 4KiB (Q= 32,T= 1) : 115.943 MB/s [ 28306.4 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 88.872 MB/s [ 21697.3 IOPS]
Sequential Read (T= 1) : 102.555 MB/s
Sequential Write (T= 1) : 80.744 MB/s
Random Read 4KiB (Q= 1,T= 1) : 9.668 MB/s [ 2360.4 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 9.410 MB/s [ 2297.4 IOPS]
ZFS 8K и NTFS 4K
Sequential Read (Q= 32,T= 1) : 118.154 MB/s
Sequential Write (Q= 32,T= 1) : 102.506 MB/s
Random Read 4KiB (Q= 32,T= 1) : 113.806 MB/s [ 27784.7 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 73.798 MB/s [ 18017.1 IOPS]
Sequential Read (T= 1) : 106.324 MB/s
Sequential Write (T= 1) : 91.004 MB/s
Random Read 4KiB (Q= 1,T= 1) : 10.161 MB/s [ 2480.7 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 9.628 MB/s [ 2350.6 IOPS]
ZFS 8K и NTFS 8K
Sequential Read (Q= 32,T= 1) : 118.051 MB/s
Sequential Write (Q= 32,T= 1) : 99.229 MB/s
Random Read 4KiB (Q= 32,T= 1) : 113.327 MB/s [ 27667.7 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 75.365 MB/s [ 18399.7 IOPS]
Sequential Read (T= 1) : 106.110 MB/s
Sequential Write (T= 1) : 87.242 MB/s
Random Read 4KiB (Q= 1,T= 1) : 9.880 MB/s [ 2412.1 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 9.878 MB/s [ 2411.6 IOPS]
ZFS 16K и NTFS 4K
Sequential Read (Q= 32,T= 1) : 118.040 MB/s
Sequential Write (Q= 32,T= 1) : 100.274 MB/s
Random Read 4KiB (Q= 32,T= 1) : 114.780 MB/s [ 28022.5 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 6.014 MB/s [ 1468.3 IOPS]
Sequential Read (T= 1) : 108.443 MB/s
Sequential Write (T= 1) : 90.182 MB/s
Random Read 4KiB (Q= 1,T= 1) : 11.281 MB/s [ 2754.2 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 8.229 MB/s [ 2009.0 IOPS]
ZFS 16K и NTFS 8K
Sequential Read (Q= 32,T= 1) : 118.046 MB/s
Sequential Write (Q= 32,T= 1) : 99.386 MB/s
Random Read 4KiB (Q= 32,T= 1) : 115.745 MB/s [ 28258.1 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 51.101 MB/s [ 12475.8 IOPS]
Sequential Read (T= 1) : 105.913 MB/s
Sequential Write (T= 1) : 91.225 MB/s
Random Read 4KiB (Q= 1,T= 1) : 10.244 MB/s [ 2501.0 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 9.373 MB/s [ 2288.3 IOPS]
ZFS 16K и NTFS 16K
Sequential Read (Q= 32,T= 1) : 118.046 MB/s
Sequential Write (Q= 32,T= 1) : 101.422 MB/s
Random Read 4KiB (Q= 32,T= 1) : 113.856 MB/s [ 27796.9 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 40.821 MB/s [ 9966.1 IOPS]
Sequential Read (T= 1) : 107.572 MB/s
Sequential Write (T= 1) : 89.345 MB/s
Random Read 4KiB (Q= 1,T= 1) : 11.112 MB/s [ 2712.9 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 9.691 MB/s [ 2366.0 IOPS]
Для информации тот же диск, подключенный локально - NTFS 4K
Sequential Read (Q= 32,T= 1) : 130.080 MB/s
Sequential Write (Q= 32,T= 1) : 121.335 MB/s
Random Read 4KiB (Q= 32,T= 1) : 1.005 MB/s [ 245.4 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 1.290 MB/s [ 314.9 IOPS]
Sequential Read (T= 1) : 129.997 MB/s
Sequential Write (T= 1) : 128.324 MB/s
Random Read 4KiB (Q= 1,T= 1) : 0.406 MB/s [ 99.1 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 1.307 MB/s [ 319.1 IOPS]