iSCSI 目标
Ubuntu 14.04 (Trusty Tahr) 具有 16 GB RAM 和 16 核 CPU 作为 LVM 支持的 iSCSI 目标,使用三个三星 SSD 磁盘,每个磁盘都能够使用带有板载缓存的 LSI 6 Gbit/s 控制器执行 65k IOPS。
目标中 SSD 磁盘的基准测试:
fio --filename=/dev/sdd --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=ssd-max
iops=65514
Run Code Online (Sandbox Code Playgroud)
凡sdd
在硬件配置RAID 0使用三个三星850固态硬盘EVO。
发起人
我在具有 32 GB RAM 和 8 个核心 CPU 的 Ubuntu 14.04 客户端上导出了一个 500G LUN。
导出 LUN 的基准测试
fio --filename=/dev/sdg --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=client-max
iops=2400 …
Run Code Online (Sandbox Code Playgroud) 在我的本地文件服务器上,我在 7x HDD 驱动器上安装了 raid-6。
dd if=/dev/zero of=tempfile bs=1M count=2048 conv=fdatasync
Run Code Online (Sandbox Code Playgroud)
本地速度测试给了我 349 MB/s 的写入速度。
从 SSD 远程写入 Samba(> 2Gb/s 读取速度)给了我 259 MB/s 的写入速度。但是远程写入 iSCSI 驱动器(在 Win10 iSCSI 启动器上)仅提供 151 Mb/s 的写入速度。
raid6 配置 - 128K 块大小,stripe_cache_size = 8191。写入意图位图在 SSD 上(三星 860 PRO,4096K 位图块)。
使用选项安装的阵列: rw,noatime,nobarrier,commit=999,stripe=128,data=writeback
open-iscsi 设置:目标基于 4Tb 文件。
任何提示为什么 iSCSI 在写入时比 Samba 慢?关于如何提高 iSCSI 写入速度的任何提示?
我认为这与 open-iscsi 在每次操作后刷新写入磁盘的愿望有关,由于过多的奇偶校验重写,这增加了 raid6 上的写入放大。但我不知道如何解决它。在断电的情况下,速度比当前写入数据的安全更重要。
作为旁注,较旧的 ietd iSCSI 目标能够启用回写模式(使用 IOMode=wb
),并且持续写入速度要快得多。不幸的是,它目前似乎没有维护。
我目前正在为无盘启动设置 SAN。我的后端由通过 iSCSI 共享的 ZFS-Vol 组成。到目前为止,除了 TRIM/UNMAP 之外,一切正常。为了测试目的,我在 VirtualBox 中设置了两个运行 Ubuntu20.04 的虚拟机,这些虚拟机通过具有静态 IPv4 地址的内部网络联网在一起。在目标 (tgt) 上有第二个用 ZFS 格式化的虚拟驱动器。在这个 zpool 上,我创建了一个 zVol 并使用 GPT 和 ext4 对其进行了格式化。
/etc/tgt/conf.d/iscsi.conf
<target example.com:lun1>
<backing-store /dev/zvol/tank/iscsi_share>
params thin_provisioning=1
</backing-store>
initiator-address 192.168.0.2
</target>
Run Code Online (Sandbox Code Playgroud)
在启动器 (open-iscsi) 上,我使用此命令来引发 TRIM 操作:
sudo mount /dev/sdb1 /iscsi-share
sudo dd if=/dev/zero of=/iscsi-share/zero bs=1M count=512
sudo rm /iscsi-share/zero
sudo fstrim /iscsi-share
Run Code Online (Sandbox Code Playgroud)
但外壳以“fstrim:/iscsi-share:不支持丢弃选项”作为响应。如果我在目标机器上发出这些命令,zVol 的“REFER”属性会按预期减少。
由于我在搜索网络时一无所获,因此我没有发现任何关于为什么这不起作用或者这是否可行的提示。
编辑:因为我得到了使用选项Thin_provisioning的建议。
在我重新分区驱动器并将其安装在启动器上后,我收到blk_update_request: critical target error, dev sdb, sector 23784 op 0x9:(WRITE_ZEROES) flags 0x800 phys_seg 0 prio …
我安装了 Debian 10 (Buster) 并从 Backports 添加了 ZFS。我有 4 个 iSCSI-LUN,用作 ZFS 的磁盘。每个 LUN 都有一个单独的 zpool。
到目前为止,ZFS 设置有效。但是系统不是重启稳定的。有时重新启动后,所有 ZFS 卷都会恢复并正确安装,有时则不会。我认为会发生这种情况,因为 ZFS 不会等待 iSCSI 完成。
我试过:
/etc/systemd/system/zfs-import-cache.d/after-open-iscsi.conf
[Unit]
After=open-iscsi.service
BindsTo=open-iscsi.service
Run Code Online (Sandbox Code Playgroud)
systemd-analyze 关键链 zfs-import-cache.service
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.
zfs-import-cache.service +1.602s
??open-iscsi.service @2min 1.033s +286ms
??iscsid.service @538ms +72ms
??network-online.target @536ms
??ifup@eth0.service @2min 846ms
??apparmor.service @2min 748ms +83ms
??local-fs.target @2min …
Run Code Online (Sandbox Code Playgroud) 我已将单个磁盘导出为targetcli
Linux 主机上使用的 iSCSI 目标。在远程计算机上,我已连接到该设备,并在其上放置了一个 ZFS 卷(作为带有 的复制目标zrepl
)。
但是,每当我重新启动 iSCSI 目标计算机时,运行 ZFS 的启动器计算机就会失败并出现写入错误。经过一些研究后,这种类型的故障仅在 ZFS 向设备发送写入时发生,它被告知写入成功完成,但随后写入丢失。
这意味着 iSCSI 目标必须缓存写入并在实际写入磁盘之前返回成功,并且当计算机重新启动时,这些缓存的写入并不总是会被刷新。
有没有办法targetcli
禁用此写入缓存,以便写入在实际写入物理磁盘之前不会成功返回?
我尝试将物理磁盘导出为pscsi
后备存储,但这只会导致 iSCSI 目标内核在访问磁盘后立即崩溃。(没有使用虚拟机,只有两个本机 Linux 服务器,因此不应使用不常见的 SCSI 命令。)
/> ls
o- / .............................................................................................. [...]
o- backstores ................................................................................... [...]
| o- block ....................................................................... [Storage Objects: 1]
| | o- ar0 .......... [/dev/disk/by-id/ata-ST22000NT001-3LS101_ZX20XTYG (20.0TiB) write-thru activated]
| | o- alua ........................................................................ [ALUA Groups: 1]
| | o- default_tg_pt_gp ............................................ [ALUA state: Active/optimized]
| o- fileio ...................................................................... [Storage …
Run Code Online (Sandbox Code Playgroud)