¿Por qué tiene 'cat' este extraño comportamiento del tiempo?

8

Estoy usando cat para canalizar diferentes archivos en un archivo grande. El número de archivos diferentes varía, desde dos hasta diez, pero el tamaño total de todos los archivos es siempre el mismo (un par de GB).

Mi problema: cuando llego al caso donde tengo un total de seis archivos, el tiempo que lleva concatenarlos picos (es decir, significativamente más que con cinco o siete), y no tengo idea de por qué.

Alguien tiene una idea?

Los archivos (todos del mismo tamaño)

output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5

Mando

cat outputTEMP* >> output && rm -f outputTEMP*

Actualmente, la Máquina debe realizar algunos cálculos, pero actualizaré más adelante cuando haya nuevas mediciones disponibles.

brandstaetter
fuente
¿Cuál es la línea de comando exacta que está utilizando?
innaM
Agregué la línea de comando.
brandstaetter
Esto es definitivamente extraño. No puedo decir por qué actúa de esta manera, pero quizás debería presentar un informe de error de texto simple a [email protected].
Reynolds
¡Mídelo! ¡Y asegúrese de no estar guardando caché cuando mida!
Davide

Respuestas:

4

Una forma de depurar este problema es usar strace.

strace -tt -e trace=open,close -o /tmp/strace.cat.log cat apt.list authors.txt >/tmp/t.test
cat /tmp/strace.cat.log 

23:12:08.022588 open("apt.list", O_RDONLY|O_LARGEFILE) = 3
23:12:08.023451 close(3)                = 0
23:12:08.023717 open("authors.txt", O_RDONLY|O_LARGEFILE) = 3
23:12:08.025403 close(3)                = 0

La opción -tt registra la marca de tiempo de la llamada del sistema a una resolución de milisegundos. -e trace = abrir, cerrar solo registro abrir, cerrar API. Intenta eliminarlos y verás un archivo de registro muy ruidoso.

tony-p-lee
fuente
2

Así que el comentario de Davides es perfecto. Necesitamos dos cosas aquí, para hacer una evaluación precisa:

  1. el almacenamiento en caché de seguridad no es parte del escenario
  2. Medida actual del tiempo que está tomando.

Suponiendo que tenga el espacio en disco, describiré un escenario de prueba que determinará con mayor precisión si se trata de un problema real. Si es así, la evidencia de apoyo de este enfoque ayudará a los desarrolladores a saber que es real y poder reproducirlo.

Para ayudar con el aislamiento del problema, no hagamos la parte completa aquí. Deje que los archivos TEMP se asienten después. Luego puede repetir las pruebas haciendo la parte 'rm' más tarde, si lo desea.

Aquí está el escenario de prueba:

  • haga 9 directorios, uno para cada cantidad de archivos (2 3 4 5 6 7 8 9 y 10), si no tiene espacio, tal vez solo haga 2, 5, 6, 7 y 10.
  • asegúrese de colocar archivos DIFERENTES en cada uno de estos directorios; NO duplicados en ningún lado
  • usa el comando de tiempo así:

    tiempo (cat outputTEMP * & gt; & gt; output)

Capture los números reales, de usuario y de sistema informados para cada prueba que ejecute.

Estoy de acuerdo con Reynolds; Si esto es real, definitivamente debe enviar los detalles por correo electrónico a [email protected].

pbr
fuente
Otro pensamiento: para asegurarse de que está copiando la misma cantidad TOTAL de datos en el archivo de salida. Por lo tanto, si es un total de 1 GB, en el directorio '2' tendría archivos con un tamaño de 1/2 GB, y en el directorio '10' tendría archivos que son 1/10 de un GB de tamaño grande, etc.
pbr