Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Код, где даже игнорирование результата функции прописывается явно, меня разует.
Про структуры хотелось бы подробнее, ибо привычные нам оценки скорости работы могут быть не применимы к операциям чтения/записи на диск.
Естественно, реализации у обеих систем разные, к примеру, мне бы хотелось видеть механизм нетапповской дедубликации WAFL в ZFS.
Так же опасаюсь, что Ваш вариант ускорения мы увидим нескоро, так как пока актуальный zpool появится в ОС отличных от Solaris, пройдет немало времени.
Пока же приходится выкручиваться или объемом RAM+процессором, благо это недорого либо использовать сжатие — зависит от характера использования.
root@myhost:/# dtrace -qn 'lzjb_decompress:entry{self->t = timestamp} lzjb_decompress:return/self->t/{self->t=(timestamp - self->t)/1000; @=quantize(self->t); @a=avg(self->t)} tick-60sec{printa("Latency in microseconds: %@d\nAvg latency: %@d us",@,@a); trunc(@); trunc(@a); exit(0)}'
Latency in microseconds:
value ------------- Distribution ------------- count
4 | 0
8 | 54
16 |@ 385
32 | 131
64 | 39
128 |@@@@@@@ 1789
256 |@@@@@@@@@@@@@@@@@@@@@@@ 6289
512 |@@@@@@@@ 2149
1024 | 32
2048 | 1
4096 | 0
Avg latency: 361 us
root@myhost:/# prtdiag | head -10 | tail -2
Intel(R) Xeon(R) CPU E5620 @ 2.40GHz CPU 1
Intel(R) Xeon(R) CPU E5620 @ 2.40GHz CPU 2
Зато есть другой вариант, который ускоряет online-dedup больше чем на порядок для реальных нагрузок, и почти готов
интересно, что имелось в виду?
Пока все хорошо, продолжайте писать, пожалуйста.
Не понял, почему onboard write cache работает, только если диск выделен полностью? Контроллеру не все равно ли, что кэшировать, особенно если у него батарейка?
PS В принципе для ZFS должна работать схема дефрагментации «скинул все на стриммер, отформатировал диск, вернул назад».
Но вопрос в другом — является ли фрагментация проблемой для ZFS?
первый: zfs использует 128-ми битные указатели. Бывает ли что в старших 64-х битах содержатся не нули? Если сейчас нет, то когда (и какие конкретно) наступят условия того, что такая длина указателей окажется востребованной?
второй: когда zfs отдает данные os, маппит ли она страницу своего кеша на страницу, где os хочет видеть данные (либо передает указатель на страницу кеша, а OS делает это самостоятельно), или же только копирует данные из своего кеша в ту страницу, где хочет видеть данные os?
The vdev portion of each DVA is a 32 bit integer which uniquely identifies the vdev ID containing this block. The offset portion of the DVA is a 63 bit integer value holding the offset (starting after the vdev labels (L0 and L1) and boot block) within that device where the data lives. Together, the vdev and offset uniquely identify the block address of the data it points to. The value stored in offset is the offset in terms of sectors (512 byte blocks).
#define DVA_GET_VDEV(dva) BF64_GET((dva)->dva_word[0], 32, 32)
#define DVA_GET_OFFSET(dva)
BF64_GET_SB((dva)->dva_word[1], 0, 63, SPA_MINBLOCKSHIFT, 0)
По поводу копирования данных — я спросил потому что, например, во FreeBSD именно так и происходит (возможно в соляре ситуация другая), и такой подход крайне тормознутый. Технология маппинга страниц отработана десятилетиями, она позволяет очень эффективно кешировать данные файловых систем, особенно страниц с кодом программ, которые не надо копировать от процесса к процессу, например. А так получается, что ZFS требует двойного кеширования (raw block-ов средствами zfs и страниц с данным средствами os)… ;(
zfs set primarycache=metadata pool/fs
), оставив большую часть оперативной памяти для внутреннего кеша программы. Нормальные базы данных кешируют более эффективно, чем ZFS, поскольку они знают собственно какие данные более важны для них самих.zfs set atime=off pool/fs
", а дальше надо смотреть.
Как работает ZFS — часть 1: vdev