2012-12-16 53 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文件或內存緩衝區?這是一個內存緩衝區
相關問題