Я читав, що ZFS розміщує дані у zpool у всіх vdevs верхнього рівня, припускаючи, що всі vdevs додані на початку життя пулу. Все, що я прочитав, здається, вважає це гарною справою. Але, мені здається, як для розгортання з багатьма дисками, це не призведе до хорошої загальної продуктивності всіх цих дисків у багатокористувацькому (або навіть просто багатопроцесорному) середовищі.
Припустимо, наприклад, що у мене є 96 дисків, які я використовую для створення 12 vdevs з 8 дисків кожен, які я додаю до моєї zpool. Тоді я накладаю його на користувачів, і вони наповнюють його всілякими божевіллями. Деякі файли - це десятки гігабайт, інші - невеликі файли конфігурації програм користувача тощо.
Пізніше користувач A хоче скопіювати декілька багатогігабайтних файлів. Вона запускає rsync або колись, і відчуває спалахуючу ефективність від основної послідовної зчитування 12 смугастих vdevs. Але тоді користувач B запускає іншу програму, яка також вимагає досить великих фрагментів даних одночасно. Тепер дискові головки постійно витягують rsync користувача A для роботи з користувачем B, і хоча кожна програма індивідуально відносно послідовна, 96 дисків є залученими до запитів обох користувачів, і дивіться схеми пошуку та ефективність, що більше відповідають випадковим I / О.
У цьому 12-ти Vdevs з 8 дисковими конфігураціями, кожен vdev все ще має 8 дисків, які мають ефективність, тому я б очікував, що послідовний введення-вивід буде дуже хорошим навіть без додаткової смуги на інші vdevs. Чи не було б краще для ZFS поставити багато гігабайт на один vdev, перш ніж перейти на інший? (У своїх експериментах я отримую смужки близько 500 тис.) Таким чином, читання користувача A матиме лише 1/12 шансу використовувати ті самі диски, що і читання користувача B, і вони обидва отримують продуктивність, що відповідає послідовним I / O більшу частину часу.
Чи є спосіб отримати хороші показники від ZFS в цій конфігурації / навантаженні?