It seems the new drives are SATA. Is that correct? It seems all the recomendations are for NVMe drives.UPDATE:
I got the new Intel SSD's today and it seems to indeed be the issue. IO delay problems are now gone. Thanks for all the help!
Wasn't aware of that, but the SATA drives do the job. NVMe probably would've been overkill. I think the main problem is just that my drives didn't have PLP, so sync write performance sucks.It seems the new drives are SATA. Is that correct? It seems all the recomendations are for NVMe drives.
Wasn't aware of that, but the SATA drives do the job. NVMe probably would've been overkill. I think the main problem is just that my drives didn't have PLP, so sync write performance sucks.
zfs
  mirror-0
    ata-Samsung_SSD_860_EVO_1TB
    ata-Samsung_SSD_860_EVO_1TB
  mirror-1
    ata-Samsung_SSD_860_EVO_1TB
    ata-Samsung_SSD_870_EVO_1TB
  mirror-2
    ata-Samsung_SSD_870_EVO_1TB
    ata-Samsung_SSD_870_EVO_1TB
  mirror-3
    ata-CT2000BX500SSD1_2TB
    ata-CT2000BX500SSD1_2TB
	These are not suitable at all.mirror-3
ata-CT2000BX500SSD1_2TB
ata-CT2000BX500SSD1_2TB
Thank you very much! That answered the question for me.In productive use I would never choose consumer SSDs for anything. They are a total different thing and not suitable for ZFS loads. It's not only about the PLP (power loss protection) but also the much larger cache and how writes are done. A setup of enterprise SSDs in a striped mirror can be sufficient but is not a power horse compared to an equivalent of NMVE drives.
A SLOG attached to a ZFS RAID does the following:
- In ZFS, synchronous writes are first written to the ZFS Intent Log (ZIL) before being committed to the main pool
- The SLOG (Separate Log device) is an optional, dedicated device for storing this ZIL
- It doesn’t store data permanently — it’s a short-term landing zone for synchronous writes to ensure they are safely committed in case of a crash or power loss
- Workloads that generate many small synchronous writes (databases, NFS/SMB with sync=always, VM workloads) benefit the most
Why mirrored?
- The SLOG is a single point of failure for synchronous write integrity. If you have only one SLOG device and it fails, you risk pool corruption for in-flight transactions
- A mirrored SLOG provides redundancy for the ZIL and ensures that even if one NVMe dies, the other still contains valid, crash-consistent logs
Performance gains with SLOG in a RAID1+0 of SSDs:
- All synchronous writes still wait for ZIL commit before returning ACK to the client
- Without a dedicated SLOG, the ZIL is stored on the main pool → each sync write hits your RAID10 vdevs twice (once for the ZIL, once for the actual data)
- With a dedicated SLOG the ZIL writes happen on the NVMe mirror instead of on the main pool → freeing the RAID10 from that extra write burden
- Main pool can focus on normal data writes, improving throughput
- Latency is reduced because the NVMe SLOG completes the ZIL commit much faster
Hello everyone,
we are experiencing similar issues with one of our Proxmox nodes. I am wondering if adding vdevs would help to decrease IO delay?
We are running a pool with the following configuration
Code:zfs mirror-0 ata-Samsung_SSD_860_EVO_1TB ata-Samsung_SSD_860_EVO_1TB mirror-1 ata-Samsung_SSD_860_EVO_1TB ata-Samsung_SSD_870_EVO_1TB mirror-2 ata-Samsung_SSD_870_EVO_1TB ata-Samsung_SSD_870_EVO_1TB mirror-3 ata-CT2000BX500SSD1_2TB ata-CT2000BX500SSD1_2TB
The system hosts VMs with Windows 10/11 for testing purposes which are usually for one test only until they get purged. We experience slow/laggy VMs as soon as larger files are copied to one of the VMs. Currently we run 13 VMs in parallel and handle larger amounts of test data. CPU and RAM are fine.
Are enterprise SSDs with SATA suitable and my only option? Or could I go the route of adding another vdev mirror to reduce IO delay?
If enterprise SSDs are the only way, are any of these good options?
- Intel DC S4500
- Samsung PM893
- Samsung PM863
- Micron 5400 Pro
Thanks
Max
zpool list -v
	zpool status -t *pool_name*
example: zpool status -t rpool
	It's regardless if these have been trimmed or not. Consumer drives on ZFS mirrors won't get any faster if trimmed or not with this kind of workload.Were those drives ever trimmed?
What is the output of theses commands?
Code:zpool list -vCode:zpool status -t *pool_name* example: zpool status -t rpool
I know. I just asked because I was having super high io delay and after trimming it got a lot better. Not better than enterprise ssd, but still....It's regardless if these have been trimmed or not. Consumer drives on ZFS mirrors won't get any faster if trimmed or not with this kind of workload.
zpool list -v
NAME                                              SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zfs                                              4.53T  1.89T  2.64T        -         -    28%    41%  1.00x    ONLINE  -
  mirror-0                                        928G   803G   125G        -         -    50%  86.5%      -    ONLINE
    ata-Samsung_SSD_860_EVO_1TB_S3Z9NB0K844429M   932G      -      -        -         -      -      -      -    ONLINE
    ata-Samsung_SSD_860_EVO_1TB_S3Z9NB0K844377K   932G      -      -        -         -      -      -      -    ONLINE
  mirror-1                                        928G   456G   472G        -         -    35%  49.1%      -    ONLINE
    ata-Samsung_SSD_860_EVO_1TB_S3Z9NB0K844464P   932G      -      -        -         -      -      -      -    ONLINE
    ata-Samsung_SSD_870_EVO_1TB_S6PUNM0T618251X   932G      -      -        -         -      -      -      -    ONLINE
  mirror-2                                        928G   414G   514G        -         -    31%  44.6%      -    ONLINE
    ata-Samsung_SSD_870_EVO_1TB_S6PUNX0RC03088K   932G      -      -        -         -      -      -      -    ONLINE
    ata-Samsung_SSD_870_EVO_1TB_S626NJ0R162083M   932G      -      -        -         -      -      -      -    ONLINE
  mirror-3                                       1.81T   264G  1.55T        -         -    14%  14.2%      -    ONLINE
    ata-CT2000BX500SSD1_2237E665E4D3             1.82T      -      -        -         -      -      -      -    ONLINE
    ata-CT2000BX500SSD1_2237E665E63F             1.82T      -      -        -         -      -      -      -    ONLINE
	zpool status -t zfs
  pool: zfs
 state: ONLINE
status: Some supported and requested features are not enabled on the pool.
        The pool can still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(7) for details.
  scan: scrub repaired 0B in 00:44:18 with 0 errors on Sun Aug 10 01:08:20 2025
config:
        NAME                                             STATE     READ WRITE CKSUM
        zfs                                              ONLINE       0     0     0
          mirror-0                                       ONLINE       0     0     0
            ata-Samsung_SSD_860_EVO_1TB_S3Z9NB0K844429M  ONLINE       0     0     0  (untrimmed)
            ata-Samsung_SSD_860_EVO_1TB_S3Z9NB0K844377K  ONLINE       0     0     0  (untrimmed)
          mirror-1                                       ONLINE       0     0     0
            ata-Samsung_SSD_860_EVO_1TB_S3Z9NB0K844464P  ONLINE       0     0     0  (untrimmed)
            ata-Samsung_SSD_870_EVO_1TB_S6PUNM0T618251X  ONLINE       0     0     0  (untrimmed)
          mirror-2                                       ONLINE       0     0     0
            ata-Samsung_SSD_870_EVO_1TB_S6PUNX0RC03088K  ONLINE       0     0     0  (untrimmed)
            ata-Samsung_SSD_870_EVO_1TB_S626NJ0R162083M  ONLINE       0     0     0  (untrimmed)
          mirror-3                                       ONLINE       0     0     0
            ata-CT2000BX500SSD1_2237E665E4D3             ONLINE       0     0     0  (untrimmed)
            ata-CT2000BX500SSD1_2237E665E63F             ONLINE       0     0     0  (untrimmed)
errors: No known data errors
	zpool trim *pool-name"
	zpool status -t *pool-name*
	cat /etc/cron.d/zfsutils-linux
	You are right. The script wants to run TRIM once a month but that does not happen. I will have to investigate why that does not work.About autotrim, if you
Code:cat /etc/cron.d/zfsutils-linux
You will see that that TRIM and SCRUB is already scheduled but in your case only SCRUB is being executed.
I have one node where TRIM was never executed as well, but I could not figure out exactly why. It has to do with the script that is executed, which checks if TRIM is supported.
We use essential cookies to make this site work, and optional cookies to enhance your experience.