¿Qué tan grande es (aproximadamente) una sobrecarga de syscall de E/S en Linux desde el programa C
, me refiero a qué tan grave se está ejecutando, p. ¿muchas operaciones pequeñas de read/write
comparadas con read/write
en memorias intermedias grandes (en archivos regulares o sockets de red)? La aplicación es fuertemente multiproceso.Sobrecarga de Syscall
Respuesta
Las llamadas al sistema tardan al menos 1-2 microsegundos en la mayoría de las máquinas modernas solo para la sobrecarga syscall, y mucho más tiempo si están haciendo algo complejo que podría bloquear o dormir. Espere al menos 20 microsegundos y hasta el orden de milisegundos para IO. Compare esto con una pequeña llamada de función o macro que lea un byte de un buffer de espacio de usuario, que probablemente se complete en cuestión de nanosegundos (tal vez 200 ns en un mal día).
+1, gracias por no ser todo místico y nihilista acerca de los problemas de rendimiento como muchos otros. –
Sí, no es la sobrecarga de 'syscall' de la que debe preocuparse: ¡es el trabajo que hace la llamada del sistema lento! – Gabe
@Gabe: No es tan simple, al menos no en todos los casos. Para realizar IO real, el trabajo es moderadamente costoso, pero para multiplexar IO ('select'), timing (' nanosleep'), control de señal ('sigprocmask'), objetos de sincronización (' futex'), y muchos otros casos, el el tiempo total está dominado por la sobrecarga de syscall y no por ningún trabajo realizado. De hecho, para muchos propósitos, el factor constante de la tara de syscall es tan grande que es práctico contar solo syscalls (es decir, considerar todo lo demás 'O (0)') para calcular cómo el tiempo escalan con los datos del tamaño real. –
Puede medir esto usted mismo. Simplemente abra /dev/zero
y lea y escriba mientras mide el tiempo. También varía la cantidad de bytes que coloca en cada llamada, p. Ej. 1 bytes, 2 bytes, 128 bytes, .. 4096bytes. También tenga cuidado de usar las llamadas de sistema read(2)
y write(2)
y nada utilizando los almacenamientos intermedios internos.
Si bien esta es una buena idea, '/ dev/zero' no incluye ninguna E/S real, por lo que es posible que no proporcione respuestas precisas. – Gabe
@Gabe: Ese es exactamente el punto. James quería saber la I/O _syscall overhead_, no el tiempo para la transferencia real de datos a los discos. Hacer la E/S en un dispositivo de bloque basado en RAM proporciona una muy buena aproximación de esta sobrecarga. –
Para ilustrar mi punto, si realiza muchas escrituras en un socket de red, puede enviar muchos paquetes pequeños en lugar de muchos más grandes. Esto podría causar congestión en la red y reducir la velocidad. Si ese fuera el caso, nunca lo descubrirías escribiendo a '/ dev/zero'. – Gabe
- 1. MIPS architecture syscall instruction
- 2. sobrecarga y sobrecarga de Java
- 3. ¿Qué es mejor "int 0x80" o "syscall"?
- 4. ¿Es syscall una instrucción en x86_64?
- 5. PG :: Error: Error SSL SYSCALL: EOF detectado
- 6. ¿Cómo ocurre realmente un syscall en Linux?
- 7. ¿Entonces malloc no invoca ningún syscall?
- 8. Linux futex syscall spurious Wakes con valor de retorno 0?
- 9. Sobrecarga y sobrecarga del operador en Java
- 10. Syscall desde el asm en línea en x86_64 Linux?
- 11. ¿Hay algo así como linux ptrace syscall en Windows?
- 12. operador [] = ¿sobrecarga?
- 13. sobrecarga volátil?
- 14. F #: sobrecarga al curry/problema de sobrecarga tupled
- 15. Sobrecarga de construcción WebClient
- 16. F #: funciones de sobrecarga
- 17. Operador de comparación sobrecarga
- 18. Sobrecarga de memoria ConcurrentHashMap
- 19. Sobrecarga de la horquilla()
- 20. C + + sobrecarga de subprocesos
- 21. Sobrecarga de static_cast?
- 22. función de sobrecarga
- 23. sobrecarga de operadores ->
- 24. Sobrecarga de rendimiento AOP
- 25. Sobrecarga de objetos compartidos
- 26. plantilla de función sobrecarga
- 27. Sobrecarga de la función ==
- 28. Sobrecarga de múltiples operadores
- 29. R - Función de sobrecarga
- 30. Decodificador de sobrecarga de método
Es 20% malo. ¿Cuál es su métrica de rendimiento? –
La E/S suele ser una de las partes, si no la más lenta, de un programa. –
@GregHewgill, para el rendimiento general, la mayoría de las personas usa el tiempo. P.ej. es 2ms malo. Supongo que hay un debate existencial sobre la naturaleza del tiempo, pero eso es lo que usaría. –