Свежие комментарии

Title Comment
В принципе, в интернете

В принципе, в интернете рекомендуют делать отступ в 2048 секторов. Так делает и Windows7, кстати.

Я не понимаю вот чего - выше

Я не понимаю вот чего - выше вы пишете, что скорость чтения - 80Mb/sec, а в тестах получается ~55?
C gnop я не стал связываться, не понимаю как с него будет грузиться.

Не может у вас такого быть, что упираетесь вы в процессор?

SPOT

http://en.wikipedia.org/wiki/Single_Point_of_Truth

Забыл уточнить: ZFS RAID10

Забыл уточнить: ZFS RAID10 составлен из WD 20EARS, а тестировал я одиночный диск Samsung серии F4.

benchmark.1.1.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
gpart add -s 20G -t freebsd-ufs -l benchmark $1 && \
newfs -O2 -U /dev/gpt/benchmark && \
if [ ! -d '/mnt/benchmark' ]; then
mkdir -p /mnt/benchmark
fi

echo '
#Do testing
'
for i in 1 2 3 4 5; do
mount /dev/gpt/benchmark /mnt/benchmark
if [ `mount | grep -c benchmark` -ne 1 ]; then
echo "Benchmark FS doesn't mounted or mounted incorrectly. Quit."
exit 1
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo $cmd | sh
umount /mnt/benchmark
done

echo '
#Print out system info
'
dumpfs -m /dev/gpt/benchmark
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1

echo '
#Cleanup
'
rmdir /mnt/benchmark
gpart delete -i 1 $1 && gpart destroy $1

benchmark.1.2.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
gpart add -s 20G -t freebsd-ufs -l benchmark $1 && \
gnop create -v /dev/gpt/benchmark
newfs -O2 -U /dev/gpt/benchmark.nop && \
if [ ! -d '/mnt/benchmark' ]; then
mkdir -p /mnt/benchmark
fi

echo '
#Do testing
'
for i in 1 2 3 4 5; do
mount /dev/gpt/benchmark.nop /mnt/benchmark
if [ `mount | grep -c benchmark` -ne 1 ]; then
echo "Benchmark FS doesn't mounted or mounted incorrectly. Quit."
exit 1
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
umount /mnt/benchmark
done

echo '
#Print out system info
'
dumpfs -m /dev/gpt/benchmark.nop
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1

echo '
#Cleanup
'
rmdir /mnt/benchmark
gnop destroy /dev/gpt/benchmark.nop && gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.1.3.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
gpart add -s 20G -t freebsd-ufs -l benchmark $1 && \
gnop create -v -S 4096 /dev/gpt/benchmark
newfs -O2 -U /dev/gpt/benchmark.nop && \
if [ ! -d '/mnt/benchmark' ]; then
mkdir -p /mnt/benchmark
fi

echo '
#Do testing
'
for i in 1 2 3 4 5; do
mount /dev/gpt/benchmark.nop /mnt/benchmark
if [ `mount | grep -c benchmark` -ne 1 ]; then
echo "Benchmark FS doesn't mounted or mounted incorrectly. Quit."
exit 1
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
umount /mnt/benchmark
done

echo '
#Print out system info
'
dumpfs -m /dev/gpt/benchmark.nop
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Cleanup
'
rmdir /mnt/benchmark
gnop destroy /dev/gpt/benchmark.nop && gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.1.4.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
gpart add -b 2048 -s 20G -t freebsd-ufs -l benchmark $1 && \
newfs -O2 -U /dev/gpt/benchmark && \
if [ ! -d '/mnt/benchmark' ]; then
mkdir -p /mnt/benchmark
fi

echo '
#Do testing
'
for i in 1 2 3 4 5; do
mount /dev/gpt/benchmark /mnt/benchmark
if [ `mount | grep -c benchmark` -ne 1 ]; then
echo "Benchmark FS doesn't mounted or mounted incorrectly. Quit."
exit 1
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
umount /mnt/benchmark
done

echo '
#Print out system info
'
dumpfs -m /dev/gpt/benchmark
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Cleanup
'
rmdir /mnt/benchmark
gnop destroy /dev/gpt/benchmark && gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.1.5.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
gpart add -b 2048 -s 20G -t freebsd-ufs -l benchmark $1 && \
gnop create -v /dev/gpt/benchmark
newfs -O2 -U /dev/gpt/benchmark.nop && \
if [ ! -d '/mnt/benchmark' ]; then
mkdir -p /mnt/benchmark
fi

echo '
#Do testing
'
for i in 1 2 3 4 5; do
mount /dev/gpt/benchmark.nop /mnt/benchmark
if [ `mount | grep -c benchmark` -ne 1 ]; then
echo "Benchmark FS doesn't mounted or mounted incorrectly. Quit."
exit 1
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
umount /mnt/benchmark
done

echo '
#Print out system info
'
dumpfs -m /dev/gpt/benchmark.nop
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Cleanup
'
rmdir /mnt/benchmark
gnop destroy /dev/gpt/benchmark.nop
gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.1.6.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
gpart add -b 2048 -s 20G -t freebsd-ufs -l benchmark $1 && \
gnop create -v -S 4096 /dev/gpt/benchmark
newfs -O2 -U /dev/gpt/benchmark.nop && \
if [ ! -d '/mnt/benchmark' ]; then
mkdir -p /mnt/benchmark
fi

echo '
#Do testing
'
for i in 1 2 3 4 5; do
mount /dev/gpt/benchmark.nop /mnt/benchmark
if [ `mount | grep -c benchmark` -ne 1 ]; then
echo "Benchmark FS doesn't mounted or mounted incorrectly. Quit."
exit 1
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
umount /mnt/benchmark
done

echo '
#Print out system info
'
dumpfs -m /dev/gpt/benchmark.nop
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Cleanup
'
rmdir /mnt/benchmark
gnop destroy /dev/gpt/benchmark.nop
gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.2.0.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
#zpool create -m /mnt/benchmark samsung /dev/$1 || exit 1
#if [ ! -d '/mnt/benchmark' ]; then
# mkdir -p /mnt/benchmark
#fi

#ln -fhs /samsung/benchmark/ /mnt/benchmark/

echo '
#Do testing
'
for i in 1 2 3 4 5; do
zpool create -m /mnt/benchmark samsung /dev/$1 || exit 1
# zfs create -V 20G samsung/benchmark || exit 1
if [ `mount | grep -c "/mnt/benchmark` -ne 1 ]; then
echo "Benchmark FS doesn't mounted or mounted incorrectly. Quit."
exit 1
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
# zfs delete samsung/benchmark || exit 1
zpool destroy samsung
done

echo '
#Print out system info
'
zfs get all samsung
zfs list -r samsung
zpool status -v samsung
#gnop list
#gpart show -l $1
#gpart list $1
#smartctl -a /dev/$1
camcontrol identify $1

echo '
#Cleanup
'
rmdir /mnt/benchmark
zpool destroy samsung
#gnop destroy /dev/gpt/benchmark.nop
#gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.2.1.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
#gpart add -b 2048 -s 20G -t freebsd-ufs -l benchmark $1 && \
gpart add -s 20G -t freebsd-zfs -l benchmark $1 && \
#gnop create -v -S 4096 /dev/gpt/benchmark
#newfs -O2 -U /dev/gpt/benchmark.nop && \

zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark || exit 1
#if [ ! -d '/mnt/benchmark' ]; then
# mkdir -p /mnt/benchmark
#fi

#ln -fhs /samsung/benchmark/ /mnt/benchmark/

echo '
#Print out system info
'
zfs get all samsung
zfs list -r samsung
zpool status -v samsung
#gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Do testing
'
for i in 1 2 3 4 5; do
if [ `mount | grep -c "/mnt/benchmark` -ne 1 ]; then
zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
zpool destroy samsung
done

echo '
#Cleanup
'
#rmdir /mnt/benchmark
#gnop destroy /dev/gpt/benchmark.nop
gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.2.2.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
#gpart add -b 2048 -s 20G -t freebsd-ufs -l benchmark $1 && \
gpart add -s 20G -t freebsd-zfs -l benchmark $1 && \
gnop create -v /dev/gpt/benchmark
#gnop create -v -S 4096 /dev/gpt/benchmark
#newfs -O2 -U /dev/gpt/benchmark.nop && \

zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark.nop || exit 1
#if [ ! -d '/mnt/benchmark' ]; then
# mkdir -p /mnt/benchmark
#fi

#ln -fhs /samsung/benchmark/ /mnt/benchmark/

echo '
#Print out system info
'
zfs get all samsung
zfs list -r samsung
zpool status -v samsung
zpool get all samsung
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Do testing
'
for i in 1 2 3 4 5; do
if [ `mount | grep -c "/mnt/benchmark` -ne 1 ]; then
zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark.nop
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
zpool destroy samsung
done

echo '
#Cleanup
'
#rmdir /mnt/benchmark
gnop destroy /dev/gpt/benchmark.nop
gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.2.3.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
#gpart add -b 2048 -s 20G -t freebsd-ufs -l benchmark $1 && \
gpart add -s 20G -t freebsd-zfs -l benchmark $1 && \
#gnop create -v /dev/gpt/benchmark
gnop create -v -S 4096 /dev/gpt/benchmark
#newfs -O2 -U /dev/gpt/benchmark.nop && \

zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark.nop || exit 1
#if [ ! -d '/mnt/benchmark' ]; then
# mkdir -p /mnt/benchmark
#fi

#ln -fhs /samsung/benchmark/ /mnt/benchmark/

echo '
#Print out system info
'
zfs get all samsung
zfs list -r samsung
zpool status -v samsung
zpool get all samsung
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Do testing
'
for i in 1 2 3 4 5; do
if [ `mount | grep -c "/mnt/benchmark` -ne 1 ]; then
zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark.nop
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
zpool destroy samsung
done

echo '
#Cleanup
'
#rmdir /mnt/benchmark
gnop destroy /dev/gpt/benchmark.nop
gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.2.4.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
gpart add -b 2048 -s 20G -t freebsd-ufs -l benchmark $1 && \
#gpart add -s 20G -t freebsd-zfs -l benchmark $1 && \
#gnop create -v /dev/gpt/benchmark
#gnop create -v -S 4096 /dev/gpt/benchmark
#newfs -O2 -U /dev/gpt/benchmark.nop && \

zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark || exit 1

echo '
#Print out system info
'
zfs get all samsung
zfs list -r samsung
zpool status -v samsung
zpool get all samsung
#gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Do testing
'
for i in 1 2 3 4 5; do
if [ `mount | grep -c "/mnt/benchmark` -ne 1 ]; then
zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
zpool destroy samsung
done

echo '
#Cleanup
'
#rmdir /mnt/benchmark
#gnop destroy /dev/gpt/benchmark.nop
gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.2.5.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
gpart add -b 2048 -s 20G -t freebsd-ufs -l benchmark $1 && \
#gpart add -s 20G -t freebsd-zfs -l benchmark $1 && \
gnop create -v /dev/gpt/benchmark
#gnop create -v -S 4096 /dev/gpt/benchmark
#newfs -O2 -U /dev/gpt/benchmark.nop && \

zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark.nop || exit 1

echo '
#Print out system info
'
zfs get all samsung
zfs list -r samsung
zpool status -v samsung
zpool get all samsung
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Do testing
'
for i in 1 2 3 4 5; do
if [ `mount | grep -c "/mnt/benchmark` -ne 1 ]; then
zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark.nop
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
zpool destroy samsung
done

echo '
#Cleanup
'
#rmdir /mnt/benchmark
gnop destroy /dev/gpt/benchmark.nop
gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

benchmark.2.6.sh

#!/bin/sh
# $1 - disk_name
# mount to /mnt/benchmark

echo '
#Create FS
'
if [ `gpart show $1 2>&1 | grep -c 'No such geom'` -ne 1 ]; then
echo "Some gpart already exists, quit"
exit 1
fi
gpart create -s GPT $1 && \
gpart add -b 2048 -s 20G -t freebsd-ufs -l benchmark $1 && \
#gpart add -s 20G -t freebsd-zfs -l benchmark $1 && \
#gnop create -v /dev/gpt/benchmark
gnop create -v -S 4096 /dev/gpt/benchmark
#newfs -O2 -U /dev/gpt/benchmark.nop && \

zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark.nop || exit 1

echo '
#Print out system info
'
zfs get all samsung
zfs list -r samsung
zpool status -v samsung
zpool get all samsung
gnop list
gpart show -l $1
gpart list $1
smartctl -a /dev/$1
camcontrol identify $1

echo '
#Do testing
'
for i in 1 2 3 4 5; do
if [ `mount | grep -c "/mnt/benchmark` -ne 1 ]; then
zpool create -m /mnt/benchmark samsung /dev/gpt/benchmark.nop
fi
cmd='time -l sh -c "dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000 && fsync /mnt/benchmark/zero.4G"'
echo "$i: "$cmd
echo $cmd | sh
cmd="time -l dd if=/mnt/benchmark/zero.4G of=/dev/null"
echo "$i: "$cmd
echo $cmd | sh
zpool destroy samsung
done

echo '
#Cleanup
'
#rmdir /mnt/benchmark
gnop destroy /dev/gpt/benchmark.nop
gpart delete -i 1 /dev/$1 && gpart destroy /dev/$1

Информация о диске:

pass5: ATA-8 SATA 2.x device
pass5: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)

protocol ATA/ATAPI-8 SATA 2.x
device model SAMSUNG HD204UI
firmware revision 1AQ10001
serial number S2H7JD2Z903729
WWN 50024e90415d988
cylinders 16383
heads 16
sectors/track 63
sector size logical 512, physical 512, offset 0
LBA supported 268435455 sectors
LBA48 supported 3907029168 sectors
PIO supported PIO4
DMA supported WDMA2 UDMA6
media RPM 5400

Feature Support Enable Value Vendor
read ahead yes yes
write cache yes yes
flush cache yes yes
overlap no
Tagged Command Queuing (TCQ) no no
Native Command Queuing (NCQ) yes 32 tags
SMART yes yes
microcode download yes yes
security yes no
power management yes yes
advanced power management yes no 0/0x00
automatic acoustic management yes no 0/0x00 254/0xFE
media status notification no no
power-up in Standby yes no
write-read-verify no no 0/0x0
unload no no
free-fall no no
data set management (TRIM) no

Интересно

Я провёл у себя на сервере (Celeron3300, 2Gb RAM, 4xWD 20EARS, 4xSamsung HD204UI) тестирование ZFS, после того как обнаружил, что RAID10 из ZFS показывает скорость чтения всего около...80Мбайт/сек.
Для этого на уже работающем сервере протестировал все варианты ZFS и UFS через gpart и gnop, то есть:

1. Один диск
UFS
1.1. GPT -b 34
1.2. GPT -b 34 и GNOP -S 512
1.3. GPT -b 34 и GNOP -S 4096
1.4. GPT -b 2048
1.5. GPT -b 2048 и GNOP -S 512
1.6. GPT -b 2048 и GNOP -S 4096
ZFS
2.0. Whole ZFS w/o GPT и GNOP
2.1. GPT -b 34
2.2. GPT -b 34 и GNOP -S 512
2.3. GPT -b 34 и GNOP -S 4096
2.4. GPT -b 2048
2.5. GPT -b 2048 и GNOP -S 512
2.6. GPT -b 2048 и GNOP -S 4096

Тестировал через dd if=/dev/zero of=/mnt/benchmark/zero.4G bs=4M count=1000, цикл из пяти раз, результаты усреднил. Получил следующие цифры, "запись/чтение", в Мбайт/сек соответственно:

UFS:
1.1. 103/109
1.2. 105/106
1.3. 107/107
1.4. 115/106
1.5. 118/105
1.6. 118/109

ZFS:
2.0. 23/57
2.1. 25/57
2.2. 20/54
2.3. 19/54
2.4. 17/53
2.5. 17/53
2.6. 21/53

Тюнил предлагаемые различные параметры vfs.zfs и vmem size, скорости у массива ZFS не изменялись практически, так что думаю, и для одиночного диска не изменились бы (просто уже не стал это проверять).
В чём проблема, не знаю, но это чудовищно.

P.S. Ещё два интересных вывода:
1. Использование GPT с выровненными разделами и GNOP с любым размером блока ведёт к увеличению скорости записи на 12%
2. ZFS наоборот, НЕ любит GPT с выровненными разделами и GNOP.

PPTP/L2TP VPN есть галкка

PPTP/L2TP VPN есть галкка Negotiate multi-link for single link connection, т.е. точно как-то можно включить multi-link. Но не видно где.

С другой стороны есть такая тулзень у MS, позволяющая создать сложные настройки VPN и потом их быстро ставить (тот самый disk from your internet-provider) -- я точно не помню, что там было вообще, но там точно было настроек раза в 3 больше чем в интерфейсе самой виныд, включая статик-рауты и прочее, чего в интерфейсе винды НЕТ ВООБЩЕ. Можно посмотреть нет ли там и мультилинка.

Re: Вообще-то ключ "-b" отвечает за смещение

Ну да. Но тогда надо для gpt понимать, сколько еще уходит на служебные сектора, а я этого не знаю и знать не хочу.
Посмотрел что получается с -s 128 почесал репу, добавил 6 секторов и получилось хорошо.

Вообще-то ключ "-b" отвечает за смещение

man gpart:

...[-b start] [-s size]...

Сходу не нашел, чтобы Windows

Сходу не нашел, чтобы Windows в этом месте умела бы multilink/multipath.

Но буду изучать.

КСТАТИ! Я идиот, да, сразу бы

КСТАТИ! Я идиот, да, сразу бы мог придумать -- конечно всё что угодно PPP-based Умеет мультилинк. PPPoE, L2TP -- всё должно уметь. И шифрования там легко может и не быть.
читать доку на mpd5 на стороне FreeBSD.

Что-то я далек от уверенности, что два маршрута с одинаковым

Что-то я далек от уверенности, что два маршрута с одинаковым весом сделают мне load balance.
failover - да, будет.

Что касается iscsi и агрегирования - агрегирование имеет ту проблему, что канал в агрегате выбирается по по адресам потока (L2 или L3), то есть для одного потока счастья все еще не будет

pps относился к iSCSI

pps относился к iSCSI

я не отследил причинно-следственную связь между "routing tab

я не отследил причинно-следственную связь между "routing table" и "будет существовать один маршрут".
возможно в трактовка слова "одномоментно". для данного пакета - да, все верно.
Gor
P.S. ок. забей на gated. просто пропиши два статических маршрута с одинаковым весом...

BSD en0 - 192.168.0.1 en1 192.168.1.1
win en0 - 192.168.0.2 en1 192.168.1.2

BSD=10.0.0.1
WIN=10.0.0.2

организуй нахождение целевых адресов bind`а (и назначения, и, что не менее важно, источника) только на 10.x адресах. ???? PROFIT

P.P.S. эээ, я не знаю, насколько корректно сделан в BSD таргет. в смысле я видел его корректно сделанным только в железе - и только в netapp. что мы (Hp), что итаки, что ибм настоятельно не рекомендуют MP отличный от агрегирования каналов...

OSPF (gated) - это же средство редактирования routing table,

OSPF (gated) - это же средство редактирования routing table, правильно. Значит с сервера куда-то (неважно куда) одномоментно будет существовать один маршрут. Понятно что в разные "неважно куда" их может быть несколько и если клиентов много, то даже возможна какая-то балансировка.

Но у меня другая проблема, которая в исходном посте описана. У меня не просто один сервер и один клиент, у меня еще и один TCP-поток, который я хочу пропустить по двум паралелльным гигабитам одновременно.

Правда этот поток - это работа с файловым сервером и multipath iSCSI меня скорее всего вылечит (и виндовый клиент это вроде бы умеет), буду в следущую порцию выходных развлекаться.

у тебя есть сервер. в него воткнуты две карточки. ты имеешь

у тебя есть сервер. в него воткнуты две карточки. ты имеешь на них два интерфейса - lan0 и lan1 (для примера)
lan0 - 192.168.0.1/24
lan1 - 192.168.1.1/24

зачем-то тебе хочется:
а - отказоустойчивости
б - балансировки нагрузки

ты поднимаешь свой настоящий (внешний серверный) IP на lo1 10.0.0.7/16 и поднимаешь на каждом из серверов gated. на внешних цисках ты занимаешься той же фигней... OSPF

очевидно, что клиентских машин это не касается - у них только одна карточка и одна внешняя сеть - 10.0.x.x/16

Gor
P.S. собственно, идея не моя - а заказчика (в теле письма заменена CU)
-=-
Почему мы отдаем предпочтение OSPF при подключении систем HP-UX и IBM к локальной сети CU:

1. Протокол обеспечивает использование всех существующих физических интерфейсов хоста. Обеспечивается балансировка нагрузки по маршрутам. Обеспечивается доступность хоста при отказах как сетевых адаптеров (кроме последнего), так и всего коммутатора (кроме последнего) .
Все интерфейсы активны. Каждый интерфейс отдельный маршрут. При отсутствии связи по одному из маршрутов, работают оставшиеся, хост не доступен только при отказе всех маршрутов.

2. Все интерфейсы должны находиться в разных подсетях, т.е. мы можем подключить хост к любым коммутаторам.

3. Для приложений создается виртуальный LAN с соответствующим IP адресом. Виртуальный LAN может быть перемещен на любой хост.

4. OSPF протокол динамической маршрутизации, все маршруты строятся автоматически.

5. Пяти летний опыт использования протокола OSPF при эксплуатации сетевой структуры CU показал надежность данного решения, высокую доступность ресурсов при отказах сетевого оборудования и ПО, и удобства при сопровождении сетевого обеспечения.

-=-

Ну вот я ничего конкретного

Ну вот я ничего конкретного не нашел. VPN в этом месте странен тем, что там шифрование будет (почти обязательно) т.е. производительность просядет очень сильно....

Надо только zpool пересобрать. Там (по ссылке выше, из поста

Надо только zpool пересобрать. Там (по ссылке выше, из поста) патч на одну строчку, в создание тома передается дополнительный атрибут и все.

Т.е. все уже предусмотрено внутри, но не подперто утилитами.

Но - я никакой значимой разницы не увидел и с 4к-блоками (ashift=12) при наливке первых сотен гигабайт на том больше всего занят 4-й диск из четырех, независимо от того, какие у него внутри секторы.

Может не в тему, но ихмо

Может не в тему, но ихмо наверняка должны быть решения этих задач на базе vpn, но конкретно названия не знаю. Конечно будет overhead, но по-идеи должно получиться больше 1Gb

Это без пересборки системы-то можно сделать?

Это без пересборки системы-то можно сделать?

Если целиком, т.е. загрузчик еще где-то, то можно и ashift=1

Если целиком, т.е. загрузчик еще где-то, то можно и ashift=12 поставить и тогда вообще все должно быть хорошо.

А, тогда понятно. Вопрос в том, что будет, если отдать zfs

А, тогда понятно.

Вопрос в том, что будет, если отдать zfs такие диски целиком (вперемешку).

Нет, там же еще раздел на котором загрузчик лежит. Т.е. gpa

Нет, там же еще раздел на котором загрузчик лежит.

Т.е.
gpart create -s GPT $disk
gpart add -s 134 -t freebsd-boot $disk
gpart add -t freebsd-zfs $disk

И так по всем четырем дискам. А 134 - это магическое число (вместо обычных 128) которое и дает нужное выравнивание:
gpart list ada0
...
2. Name: ada0p2
...
offset: 86016 (== 21x4096)

Так ведь потребность в читалке PDF-ов удовлетворена (почему-

Так ведь потребность в читалке PDF-ов удовлетворена (почему-то мне их неприятно читать с монитора, но вполне приятно - лежа на диване).

При этом, выбор по цена-качество-фичи, очевидно, оптимальный. Потому что "из одного".

Ага, я на это надеялся. Тогда следующий вопрос - как понимат

Ага, я на это надеялся. Тогда следующий вопрос - как понимать фразу про выравнивание разделов? У тебя zpool собирается не из дисков целиком, что ли?

28-ю версию, как я понимаю, доимпортят. А дальше да, судьба

28-ю версию, как я понимаю, доимпортят.

А дальше да, судьба туманна.

Это повод садиться на банальный зонд? ;-)

Это повод садиться на банальный зонд? ;-)

Это мои маркера, причем только для ясности изложения.

Это мои маркера, причем только для ясности изложения.

Теперь, когда из Оракла ушло большинство инженеров высшег

Теперь, когда из Оракла ушло большинство инженеров высшего класса,
которые и двигали Sun вперёд, судьба zfs несколько туманна и в целом, и особенно bsd-версии, Оракл очень любит всё закрывать.

Я вот чего-то не понимаю, -512 и -4k - это твои маркера, что

Я вот чего-то не понимаю, -512 и -4k - это твои маркера, чтобы в дисках не запутаться, или это такие специальные хаки для zfs, чтобы она понимала, какой размер?

Да наверное достаточно. Просто обидно - ethernet-порты свобо

Да наверное достаточно.
Просто обидно - ethernet-порты свободные есть, патч-корд - есть, а использовать разумно - не могу.

Pages

Subscribe to comments_recent_new