diff options
author | Mattias Andrée <maandree@kth.se> | 2017-06-13 21:13:25 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2017-06-13 21:13:25 +0200 |
commit | 0751b41ab058f177e65e0a5c57ea0557e8235d93 (patch) | |
tree | ff222db89d2c333f0e5f37d4d975db61bea435cf | |
parent | m (diff) | |
download | pipes-are-slow-0751b41ab058f177e65e0a5c57ea0557e8235d93.tar.gz pipes-are-slow-0751b41ab058f177e65e0a5c57ea0557e8235d93.tar.bz2 pipes-are-slow-0751b41ab058f177e65e0a5c57ea0557e8235d93.tar.xz |
m
Signed-off-by: Mattias Andrée <maandree@kth.se>
-rw-r--r-- | README.md | 11 | ||||
-rw-r--r-- | bench.c | 8 |
2 files changed, 14 insertions, 5 deletions
@@ -2,11 +2,12 @@ Despite unix(7) offering much more features than pipe(7), it is much faster. There is however two features unix(7) does not have: there is no guarantee that small writes are atomic, there is not support for splice(2)/tee(2) which -is extremely efficient, and file descriptor hijacking is -not support. The latter is a double-sided sword: it [the -lack of support] increases security, but other processes' -file cannot be opened and programs must treat /dev/fd/ -paths especially. +is extremely efficient, vmsplice(2) and changing the +capacity (neither of which improves the performance +sufficiently), and file descriptor hijacking is not support. +The latter is a double-sided sword: it [the lack of support] +increases security, but other processes' file cannot be +opened and programs must treat /dev/fd/ paths especially. ![performance graph](graph.png) @@ -61,6 +61,10 @@ main(void) } pipe(rw); +#if 0 + if (fcntl(*rw, F_SETPIPE_SZ, 1 << 20) < 0) + return perror("fcntl F_SETPIPE_SZ"), 1; +#endif if (!fork()) { close(rw[1]); while (read(rw[0], buf, n) > 0); @@ -79,6 +83,10 @@ main(void) } pipe(rw); +#if 0 + if (fcntl(*rw, F_SETPIPE_SZ, 1 << 20) < 0) + return perror("fcntl F_SETPIPE_SZ"), 1; +#endif if (!fork()) { close(rw[1]); while (read(rw[0], buf, n) > 0); |