caicloud/cyclone

The result of pvc memory usage is not religious

zhujian7 opened this issue · 2 comments

Cyclone use du -sh to get memory usage, read the annotation of -h for du command:

-h "Human-readable" output. Use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte.

Please pay attention to the unit : Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte. Instead of Kibibyte, Mebibyte, Gibibyte, Tebibyte and Pebibyte.

Unfortunately, we use the following formula to calculate:

var unitMap = map[byte]int64{
	'B': 1,
	'K': 1024,
	'M': 1024 * 1024,
	'G': 1024 * 1024 * 1024,
	'T': 1024 * 1024 * 1024 * 1024,
}

And It is obviously wrong, since 1 Mebibyte=1000Kibibyte (1M=1000K).

There are two ways to fix it:

  • correct the formula from 1 Mebibyte=**1024**Kibibyte to 1 Mebibyte=**1000**Kibibyte
  • find a way to get PVC usage with Kibibyte, Mebibyte unit.

Related Reads:

/kind bug

What happened:

What you expected to happen:

How to reproduce it (as minimally and precisely as possible):

Anything else we need to know?:
@supereagle @hyy0322 @qiuxiaolian

What are the preferred units? Could we convert to these preferred units after 'du -sh'?

A piece of output of man du:

...
       Display values are in units of the first available SIZE from --block-size, and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables.  Otherwise, units default to 1024  bytes  (or
       512 if POSIXLY_CORRECT is set).

       SIZE is an integer and optional unit (example: 10M is 10*1024*1024).  Units are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).
...

So I rethought the description of the issue is wrong
And It is obviously wrong, since 1 Mebibyte=1000Kibibyte (1M=1000K).

The implementation of command du treats 1M=1024K. So I think the only thing we need to do is change the unit from K M G T to Ki Mi Gi Ti to make them more readable. Besides Kubernetes uses Ki Mi Gi Ti instead of K M G T as memory units:
Unit of Memory in Kubernetes