¿El kilobyte utilizado por los comandos time y ulimit es 1000 (SI) o 1024 (vieja escuela)?

¿El kilobyte utilizado por los comandos time y ulimit es 1000 (SI) o 1024 (vieja escuela)?

De man time:

M      Maximum resident set size of the process during its lifetime, in Kilobytes.

De ulimit -a:

max memory size         (kbytes, -m) unlimited

pero un"kilobyte" puede significar 1000 o 1024 bytes. Supongo que aquí es una ronda 1024, pero quiero estar seguro. Se agradecería una referencia autorizada.

No dude en reformular mi pregunta como:cumplir timey ulimitcumplir con la recomendación IEC, o utilizar "kilobyte/kbyte" en el sentido de kibibyte.

Respuesta1

Porman dir.1:

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

Porinfo ls:

‘-h’
‘--human-readable’
Append a size letter to each size, such as ‘M’ for mebibytes. Powers of 1024 are used, not 1000; ‘M’ stands for 1,048,576 bytes. This option is equivalent to --block-size=human-readable. Use the --si option if you prefer powers of 1000.

La salida de lstiene una copia de seguridad adicional en la fuente.aquíyaquí.

Parecería que la letra única es la medida 1024. Los dosdígitoLas abreviaturas de caracteres son las 1000 unidades SI.

Dado que ulimitestá integrado en bash, ir a su fuente es la fuente definitiva.... A menudo soy un tonto, pero puedes verlo.aquíyaquí:

Values are in 1024-byte increments, except for -t, which is in seconds,
-p, which is in increments of 512 bytes, and -u, which is an unscaled
number of processes.

Su versión probablemente sea anterior a bash-5.2-rc3, lo cual está bien, el tamaño de ese elemento no ha cambiado al menos en la última década desde que se lanzó 4.0.38. Puedes verloaquíyaquí.

Editar: la página de manual units.7explica esto en detalle, pero parece bastante confuso desde el principio.UnidadesPolítica.

Respuesta2

No, kilobytes son 1000. Seguimos elSistema Internacional de Unidadesentonces el prefijo "kilo" se refiere a 1000, no a 1024. Cualquier otra referencia es incorrecta.

1024 esKibibytes(kimirabinada)

De ulimit -a:

tamaño máximo de memoria (kbytes, -m) ilimitado

Esto lo considero un error. Debe indicar explícitamente kilo o kibi; no kbytes

tiempo hombre:

M Tamaño máximo del conjunto residente del proceso durante su vida útil, en kilobytes.

  • límiteutiliza KIBIbytes

    limit.rlim_cur = newlimit * 512;
    limit.rlim_max = newlimit * 512;
    
  • tiempo GNUusus KIBIbytes si nos fijamos en la fuente. El manual está mal.

    Usa:

    tmp = pages / 1024;  /* Smaller first, */
    size = tmp / 1024;    /* then smaller.  */
    

Respuesta3

Akilobytees de 1000 bytes (el prefijo SI significa mil). Akibibytees de 1024 bytes (prefijo IEC que significa kilo binario).

Esta convención se ha utilizado desde 1998, pero supongo que el uso de estos prefijos no es tan conocido como debería.

Esta es también la razón por la que un disco duro de 1 TB (terabyte) tiene sólo 0,91 TiB (tebibytes, según lo informado por el sistema de archivos).

Un problema relacionado es cuando los autores afirman que se da un número en"kbytes". Como no se trata de una declaración oficial, no se sabe si se refieren a uno u otro.

Dado que la ulimitpágina de ayuda dice:"Los valores están en incrementos de 1024 bytes", creo que es seguro asumir que de hecho significankibibytescuando escribenkbytes.

Por otro lado, dado que man timese afirma explícitamente que los valores están enkilobytes, habría que suponer que los autores saben lo que es un kilobyte y que, de hecho, significan 1000 bytes.

En cualquier caso, sin embargo, para estar 100% seguro de que los autores no han escrito nada explícitamente incorrecto, debes comprobar el código fuente o consultar al autor del programa.

Referencias:

información relacionada