/ / ¿cuál es el tamaño de la tubería [duplicar] - c, linux

¿cuál es el tamaño de la tubería [duplicado] - c, linux

Posible duplicado:
¿El tamaño del búfer de la tubería es 4k o 64k?

  1. En Linux, ¿qué archivo de cabecera especifica el tamaño disponible para las escrituras en una tubería?

  2. Capturo latencia de mi aplicación principal porciclo configurable y escribir esos datos en una tubería. Un proceso de informe separado lee esa tubería. Típicamente, la aplicación principal intercambia aproximadamente 10,000 mensajes por segundo. Entonces, dado un ciclo de un segundo, la aplicación principal recopila 10k puntos de datos de latencia para cada intercambio de mensajes y luego los escribe en una tubería en el límite de un segundo. Tengo las siguientes preguntas en este escenario

    • ¿Hay alguna manera de especificar el tamaño de la tubería durante la creación, por lo que puedo asegurar que haya suficiente espacio de escritura en la tubería?
    • ¿Las escrituras en la tubería son caras? ¿Cómo se implementa la tubería? ¿Las escrituras en la tubería van en contra de algún archivo mmap o buffer en la memoria?

Respuestas

1 para la respuesta № 1
  • ¿Hay alguna manera de especificar el tamaño de una tubería en la creación? Tal vez. Desde Linux 2.6.35 puedes usar fcntl (2) con el F_SETPIPE_SZ operación para configurar el buffer de tubería hasta /proc/sys/fs/pipe-max-size. En versiones anteriores, no, pero supongo que podrías usar el zócalomecanismo en su lugar. Sería más lento para la mayoría de los propósitos, pero puede especificar la cantidad de almacenamiento en búfer hasta wmem_max, consulte el zócalo (7), y tiene ciertos otros controles sobre la asignación de memoria del kernel.
  • ¿Las escrituras en la tubería son caras? No. Pero escribe (2) es una llamada al kernel, por lo que la E / S de la tubería debe almacenarse en búfer si es posible.
  • ¿Cómo se implementan las tuberías? Con código kernel que transfiere datos dentro y fuera de la memoria caché del buffer del sistema.
  • ¿Las escrituras en la tubería van en contra de algún archivo mmap o buffer en la memoria? Es un buffer en memoria