2012-12-16 51 views
0

可能重复:
Pipe buffer size is 4k or 64k?什么的sizeof管

  1. 在linux下,这头文件规定了可以用于在管道上写入的大小?

  2. 我捕获每个可配置周期主应用程序的延迟并将该数据写入管道。一个单独的报告过程读取该管道。通常,主应用程序每秒交换约10,000条消息。因此,给定1秒的周期,主应用程序为每个消息交换收集10k延迟数据点,然后将它们写入第二个边界的管道。在这种情况下,我有以下问题

    • 有没有办法在创建时指定管道的大小,所以我可以确保管道中有足够的写入空间?
    • 写入管道是否昂贵?管道如何实施?写入管道是否违背一些mmap文件或内存缓冲区?
+4

见http://stackoverflow.com/questions/4624071/pipe-buffer-size-is-4k-or-64k?rq=1的管道缓冲区大小 –

+0

你什么写入管道进入内核端缓冲区,一旦管道一端关闭,缓冲区将被丢弃。在Linux上,管道通常有64k缓冲区。 – fuz

+0

您的第二季度:没有办法配置我所知道的管道(没有标准方式,如POSIX提供的那样)。写入管道(以及读取管道)的设计快速且便宜;它们在Unix中是一个至关重要的IPC机制,并且必须快速。用于管道数据的内存通常位于内核缓冲池中;它通常不会碰到磁盘。 (如果管道已满,它可能会碰到磁盘,但应该读取它的进程忽略了管道足够长的时间,并且内核缓冲池上有足够的压力。) –

回答

1
  • 有没有办法在创建指定管道的大小?也许。从Linux 2.6.35开始,可以使用fcntl(2)F_SETPIPE_SZ操作将管道缓冲区设置为/proc/sys/fs/pipe-max-size。在早期版本,没有,但我想你可以使用套接字机制。对于大多数用途来说,它会比较慢,但是您可以指定最多达wmem_max的缓冲区数量,请​​参阅socket(7),并且对内核内存分配有某些其他控制。
  • 写入管道是否昂贵?编号但是写(2)内核调用,所以如果可能的话应该缓冲管道I/O。
  • 管道是如何实施的?使用将数据传入和传出系统缓冲区高速缓存的内核代码。
  • 写入管道是否违背一些mmap文件或内存缓冲区?这是一个内存缓冲区
相关问题