On Mon, 4 Feb 2008, James Bottomley wrote:mmap'ing may avoid the copy, but the overhead of a mmap operation is quite often much *bigger* than the overhead of a copy operation. Please do not advocate the use of mmap() as a way to avoid memory copies. It's not realistic. Even if you can do it with a single "mmap()" system call (which is not at all a given, considering that block devices can easily be much larger than the available virtual memory space), the fact is that page table games along with the fault (and even just TLB miss) overhead is easily more than the cost of copying a page in a nice streaming manner. Yes, memory is "slow", but dammit, so is mmap(). "data copies" is irrelevant. The only thing that matters is performance. And if avoiding data copies is more costly (or even of a similar cost) than the copies themselves would have been, there is absolutely no upside, and only downsides due to extra complexity. If you want good performance for a service like this, you really generally *do* need to in kernel space. You can play games in user space, but you're fooling yourself if you think you can do as well as doing it in the kernel. And you're *definitely* fooling yourself if you think mmap() solves performance issues. "Zero-copy" does not equate to "fast". Memory speeds may be slower that core CPU speeds, but not infinitely so! (That said: there *are* alternatives to mmap, like "splice()", that really do potentially solve some issues without the page table and TLB overheads. But while splice() avoids the costs of paging, I strongly suspect it would still have easily measurable latency issues. Switching between user and kernel space multiple times is definitely not going to be free, although it's probably not a huge issue if you have big enough requests). Linus --
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Krzysztof Halasa | [PATCH 0/3] Intel IXP4xx network drivers |
| YOSHIFUJI Hideaki / | Re: 2.6.25-rc8: FTP transfer errors |
| Tony Lindgren | [PATCH 26/90] ARM: OMAP: abstract debug card setup (smc, leds) |
git: | |
| Johannes Schindelin | Re: [VOTE] git versus mercurial |
| Li Frank-B20596 | why not TortoiseGit |
| Johannes Schindelin | Re: Git rescue mission |
| Ken Pratt | pack operation is thrashing my server |
| Nick Guenther | Re: Real men don't attack straw men |
| Diana Eichert | Re: bcw(4) is gone |
| Chris | OpenBSD 4.4 installation error: write failed; file system full |
| Paul de Weerd | Re: Slow SATA write speeds with SMB |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 15/37] dccp: Set per-connection CCIDs via socket options |
| Ilpo Järvinen | net-next/unix: BUG: using smp_processor_id() in preemptible |
| Joakim Tjernlund | raw PF_PACKET protocol selection |
