При резервном копировании с ZFS в несколько потоков выяснилась такая вещь, что читается с дисков заметно больше чем пишется на ленты:

# iostat -xnz 3 | egrep 'ABCF|rmt'
...
683.7 0.0 87239.8 0.0 0.0 9.9 0.0 14.5 1 100 c12t600C0FF0000000000ABCF1150B265F00d0
0.0 50.3 0.0 12887.6 0.0 0.1 0.0 1.9 0 10 rmt/1
0.0 109.1 0.0 27926.0 0.0 0.2 0.0 2.1 0 23 rmt/2
691.9 0.0 88372.5 0.0 0.0 9.9 0.0 14.4 1 100 c12t600C0FF0000000000ABCF1150B265F00d0
0.0 59.2 0.0 15146.3 0.0 0.1 0.0 2.0 0 12 rmt/1
0.0 112.1 0.0 28692.7 0.0 0.2 0.0 1.9 0 22 rmt/2

Статистика по zpool iostat показывает тоже самое — чтение с пула идет 80-90МБ. При этом суммарная запись на ленты — раза в два меньше. Куда деваются считанные данные???? ;)

Ну понятно, что это ZFS ARC «очень умно» читает с прелоад, кэширует их и тут же эти данные вытесняются другим чтением.

Что делать?
Отключаем кэширование на этой файловой системе:

# zfs get all zARCH/arch |grep cache
zARCH/arch primarycache all default
zARCH/arch secondarycache all default
# zfs set primarycache=metadata zARCH/arch
# zfs set secondarycache=metadata zARCH/arch
# zfs get all zARCH/arch |grep cache
zARCH/arch primarycache metadata local
zARCH/arch secondarycache metadata local

ну вот, теперь все ок:

# iostat -xnz 3 | egrep 'ABCF|rmt'
...
116.0 48.9 84823.9 6094.3 0.0 2.7 0.0 16.7 0 98 c12t600C0FF0000000000ABCF1150B265F00d0
0.0 11.3 0.0 16899.3 0.0 0.0 0.0 2.0 0 13 rmt/1
0.0 10.8 0.0 13768.1 0.0 0.0 0.0 2.1 0 12 rmt/0
0.0 12.3 0.0 18150.9 0.0 0.0 0.0 2.2 0 10 rmt/2
0.0 12.9 0.0 13294.0 0.0 0.0 0.0 2.1 0 12 rmt/3
0.0 12.8 0.0 15284.4 0.0 0.0 0.0 2.0 0 13 rmt/4
0.0 12.1 0.0 17099.1 0.0 0.0 0.0 1.9 0 18 rmt/5

PS Если памяти ну очень много и она не ограничивается ( параметр в /etc/system zfs:zfs_arc_max ), то такая ситуация может и не возникнуть ;)

2 комментария на запись “ZFS и много потоков”

  1. Anton пишет:

    Вместо отключения кэшированя можно отключить prefetch — когда не слишком много памяти от него больше вреда, чем пользы.

  2. ikorolev пишет:

    К сожалению, prefetch отключается для всего zfs, а не для конкретной файловой системы.