Is the size reported by `zfs send` exact or estimated?

Solution 1:

  1. I would judge from the man page description Print machine-parsable verbose information about the stream package generated that it is the same information, only in a better format (for example, bytes instead of conversion to KB/MB/GB). Also, from your example 4903284160/1024^3~=4.566, rounded up to 4.57, which checks out.
  2. Have a look at this Oracle documentation, it may be helpful:

    Use the following dry-run syntax to estimate the size of the snapshot stream but not send it.
    # zfs send -rnv tank/source@snap1
    estimated stream size: 10.0G
    
    You can monitor the progress of the send stream by inserting the pv command between the zfs send and the zfs receive commands. [...] When the snapshot stream is completely received, the progress monitor identifies the total size received. For example:
    # zfs send tank/source@snap1 | pv |zfs recv pond/target
    10GB 0:01:55 [88.5MG/s] [       <=>   ]
    

    Solaris 11.3 also introduced some new monitoring capabilities of send/recv, something similar might be adopted by illumos/OpenZFS in the future.

  3. The estimated size is already there, did you mean the real size? It is not possible to get the real size unfortunately, for details see this thread.
  4. Maybe logicalused? From the FreeBSD manpage of zfs (illumos also has the property, but the man page is missing the description):

    logicalused
    
    The amount of space that is "logically" consumed by this dataset and
    all its descendents.  See the used property.  The logical space
    ignores the effect of the compression and copies properties, giving a
    quantity closer to the  amount of data that applications see.