【问题标题】:Increase pipe internal buffer size on CentOS在 CentOS 上增加管道内部缓冲区大小
【发布时间】:2012-04-29 21:34:22
【问题描述】:

我正在使用异步管道进行进程间通信(为了简化,我删除了错误检查)

int pipe_fd[2];
pipe(pipe_fd);
int fdflags = fcntl(pipe_fd[1], F_GETFL, 0);
fdflags |= O_NONBLOCK;
fcntl(pipe_fd[1], F_SETFL, fdflags);

我正在寻找一种增加管道内部缓冲区大小的方法。 我知道可以使用 Kernel >= 2.6.35 通过以下方式:

fcntl(fd, F_SETPIPE_SZ, size);

或写信至:

/proc/sys/fs/pipe-max-size

但我正在使用内核 2.6.18 开发 CentOS 5。 是否可以使用 Kernel 2.6.18 增加管道内部缓冲区大小?如果是,该怎么做?

【问题讨论】:

    标签: c linux multithreading ipc pipe


    【解决方案1】:

    在 CentoS 5 的内核上,管道固定为 64 KB

    【讨论】:

      【解决方案2】:

      除非您只想在 C 代码中执行此操作,否则一种选择是在设置限制后运行程序的包装器 shell 脚本中使用 ulimit -p。

      【讨论】:

      • -p The pipe size in 512-byte blocks (this may not be set)。此外,ulimit 显示的值是保证写入是原子的最大大小。在 CentoS 5 的内核上,管道固定为 64 KB。
      • 事实上我想知道shell是如何做到这一点的。我猜“可能未设置”涵盖了操作系统不支持更改管道大小的情况。
      • 好的,我将重新编译内核以更改管道大小
      【解决方案3】:
      /proc/sys/fs/pipe-max-size sets the limit for fcntl F_SETPIPE_SZ
      

      只是改变/proc/sys/fs/pipe-max-size 没有区别 ulimit -p 也没用

      你必须实际使用fcntl F_SETPIPE_SZ

      据我所见pipe-max-size 默认为 1MB,对于任何疯狂的管道需求来说应该绰绰有余

      【讨论】:

      • 能否修改 /proc/sys/fs/pipe-max-size 以将最大管道限制增加到 1MB 以上?我有一个疯狂的需求,我需要它大于 1MB :)
      猜你喜欢
      • 1970-01-01
      • 2019-08-06
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2014-03-26
      相关资源
      最近更新 更多