I don't see the practicality of this in most cases. The logic insures that a pool will do unnecessary write I/Os on parts of the pool that certainly will never get written to ... ever.
This will also not insure that all physical blocks even get initialized in the first place. (you must not skip over all areas of disk used for housekeeping, dumps, swap, metadata, etc ...) Depending on the configuration of the disks, expander, and backplane you could start saturating devices and then you'll *really* get a performance hit much worse than if you did nothing at all. Initialization requires 100% of them in order to calculate ECC Data. The penalty is approximately 50% hit on first write, and reading a block that has not been initialized can be much, much worse as it can result in ECC recovery. So if you even do this, you had better get 100% of all physical blocks on all disks, and leave nothing to chance. What if you have to resilver?? So bottom line, unless EVERY LBA of the disk drive that could ever be read from, even slices not used for ZFS, are initialized, then perhaps this entire project should be suspended until performance is modeled on uninitialized storage before doing any more development. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/openzfs/openzfs/pull/586#issuecomment-374703978 ------------------------------------------ openzfs: openzfs-developer Permalink: https://openzfs.topicbox.com/groups/developer/discussions/T6777d2c2033b2134-M6d265ef7e596ac0c22c993d0 Delivery options: https://openzfs.topicbox.com/groups
