2012-01-20 11 views
9

¿Hay alguna aceleración del nivel del sistema operativo (Linux) al escribir un búfer de bytes fijo en muchos descriptores de archivos? Al escribir muchos búferes en un descriptor de archivo, se puede usar writev(2), por lo que me pregunto si hay algo análogo a esto o si debe ser realizado por múltiples llamadas de sistema.Escribiendo a varios descriptores de archivos

Respuesta

2

No conozco dicho syscall en Linux. Su lista exhaustiva se proporciona en la página del manual syscalls(2).

Y no me molestaré tanto. Para el acceso a archivos, el verdadero cuello de botella es el disco ...

+1

Excepto que escribe no ir en el disco; todo lo que 'write' hace es copiar los datos a un buffer en el kernel. (Hay opciones para cambiar esto, pero este es el comportamiento predeterminado.) Y la pregunta del OP es buena, ya que si existiera esa pregunta, significaría una copia, y probablemente solo un buffer en el kernel (menos recursos). utilizado en kernel). –

+0

Estoy de acuerdo y lo sé, pero cuando tienes suficiente memoria RAM para que todos los archivos calientes entren dentro, no debes preocuparte demasiado. No creo que el núcleo pueda compartir segmentos de archivos entre distintos archivos. –

+0

@JamesKanze: No estoy seguro de que el búfer compartido funcione. Si tiene dos archivos, uno en una SSD y uno en una unidad de red muy, muy lejana, ¿debería la SSD esperar la unidad de red? Dependiendo de la situación, puede preferir tener al menos un archivo escrito con éxito en lugar de dos medios escritos. –

0

Una combinación de vmsplice y tee debe hacer lo que se solicitó, aunque hay varias llamadas a la misma, pero la barrera espacio-usuario/kernel-espacio se cruza solo una vez.

+0

Gracias, pero es solo para tuberías. – Cartesius00

Cuestiones relacionadas