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?

  • 1
    FYI if you're also asking about file sizes the question is a better fit on Server Fault... if it's strictly data transfers, then multiples of 1000 (instead of 1024) are correct per IEC 60027-2. BTW, TY for your comment on my pppoe answer and I updated the units accordingly – Mike Pennington Oct 17 '13 at 15:06

The difference in prefixes usually comes from the professional background of the people counting.

Electrical engineers have a strong professional background in physics and just like physicists, they tend to use powers of ten. Computer science professionals, on the other hand, tend to count everything in powers of two since it makes more sense in their context.

Since the standards for the bottom two layers (Physical, Data-Link) of the OSI model are mostly written by electrical engineers (e.g. IEEE / ITU-T), the standard units of measurements in these layers are usually powers of ten. This is why gigabit Ethernet works at a nominal rate of 1*10^9 bps, not 2^30bps.

The other layers of the OSI are often standardized by computer scientists/software engineers (e.g. IETF) which tend to measure things in Bytes, or powers of two, which is 2^3 bits. This is where powers of two start coming in. This indeed creates conversion problems.

The same conversion problem is encountered in hard drives - electrical engineers build devices that store 1,000,000,000,000 bytes and call it a Terabyte drive; while the operating system, written by software engineers, reports that the same drive can hold only 931 Gigabytes. Add to that the fact that marketing people like to write best case, round numbers in ads, and you get a pretty confused picture.

I hope that somewhat clears the picture. What I suggest doing, as good practice, is using binary prefixes for units that are power of two, and not overriding the term "Kilo" to mean both 1000 and 1024. In the last few years the usage of these prefixes increased and you can find them in use in many documents and user interfaces. This is especially important in documents that contain both powers of two and powers of ten. In such documents, a note regarding the difference between SI and binary prefixes should be provided to the reader, and all units which are a power of two should be written with binary prefixes.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.