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

Reply via email to