Назад | Перейти на главную страницу

Странная производительность ZFS с размером блока пула 4K?

Я начинаю смотреть на 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 в предыдущем тесте. Так ли это на самом деле?

Отвечая на ваши заметки:

  1. использование сети не должно быть причиной, поскольку стандартные кадры Ethernet имеют размер не более 1500 байт (исключая кадры большого размера). Снижение производительности чтения, похоже, связано с чем-то не так с FS и выравниванием устройства. Можете ли вы это дважды проверить? Во всяком случае, это также может быть из-за большей фрагментации
  2. меньшие блоки менее удобны для кеширования. Однако это может быть побочным эффектом того, как Windows кэширует диски iSCSI.
  3. с более высокой глубиной очереди планировщики ввода-вывода Windows и FreeNAS имеют возможность переупорядочивать и объединять несколько операций записи. Но эта оптимизация, похоже, работает только с небольшими (4 КБ) запросами ввода-вывода. Возможно, запросы ввода-вывода большего размера (> = 16 КБ) обрабатываются по-другому.

Если вы используете 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]