What are the correct usage guidelines for SI and IEC binary prefixes when using decimal (power of 10) units of measurement relating to computer networking and binary (power of 2) units of measurement (data transfer in particular, but also file size) ?
This Wiki page gives a detailed description of the problem and different solutions. I find that Wiki paged linked above a bit confusing.
I always use the SI (decimal) units for data throughput and IEC values (binary prefixes of 2^) for file sizes. From time to time however, I do see people calculating speed using a multiple of 1024
in their sums.
I have always used multiples of 1000 for speed measurement, such as 1Kbps = 1000Bps;
- 100 bps == 100bps (bit per second)
- 100 000 bps == 100Kbps (kilo bits per second)
- 100 000 000 bps == 100Mbps (mega bits per second)
- and so on...
With measurements of file size or memory I have always used multiples of 1024 (binary prefixes) such as 1KB file is 1024 bytes in size;
- 100Bs == 100B (byte) file
- 100 000Bs == 100KB (kilobyte) file
- 100 000 000Bs == 100MB (megabyte) file
- and so on...
There is some room for discrepancy to arise here between networks and customers. A standard billing issue example is that a customer of an ISP has a 50GB per month bandwidth allowance. Different operating systems use difference units of measurement for both speed and memory and display this using the different IEC and SI prefixes. This section of the same Wiki page on Operating Systems and Software lists the discrepancies between operating systems and software packages that mix and match different prefixes with units of measurement.
It is possible for an ISP to measure 50GBs of data transfered as (1024^3) bytes * 50 == 50GBs
(1GB == 1073741824 bytes). and the user may disagree when the 50GB limit is reached. A users who's machine displays Gibibytes for example would show 46.57 Gibibytes transfered.
From the network's perspective
- 50GBs in bits:
((((50GBs*1000)*1000)*1000)*8)=400000000000 bits
- Bps to copy 50GBs in one hour:
(((400000000000/60)/60)/24)/24=192901.23
- This speed in Mbps:
((192901.23/1000)/1000)*24*24 = 111.11Mbps
A Gibibyte is this many bits: ((((50GiB*1024)*1024)*1024)*8)=429496729600
which is more. So a link that runs at 111.11Mbps for 1 hour hasn't transfered a Gibibyte.
Purely from a networking and technical view point here (not legal regarding fair usage policies or T&Cs etc), what is a best practice, always used mega/giga/tera or mibi/gibi, IEC or SI notation for measurements and monitoring etc? How do you keep everything uniform?