Hi...
I am working on client server application. I want to know how to implement zero copy from socket point of view. Like for example when we received something on socket, how is the zero copy concept implemented here? I am not able to understand how we can use that chunk of data from socket into my application without making a copy of it.
Well, here is the illustration: when a packet is received from the network card, interrupt handler put it on kernel space memory. Through functions, it is brought to the listener socket. The system call which is listening for it, take the buffer, copy it to user space buffer and continue to do another capture. So how about zero copy? In zero copy, there is no copying from kernel to user space. Either the kernel mode page which holds the data is remapped to user space, or it is the user space pages which is also mapped to kernel space, that is used to keep the packets. Via remapping, data duplication is avoided because the page(s) are now accessible from kernel and user space's point of view. Of course, there is a complication for this nice feature. The pages must be locked so they always exist in RAM, if not : either the work will get longer (since the page must be brought back to RAM) or kernel get panics (if data is accessed in uninterruptible style). I am not too familiar with real world implementation of so called zero copy network, so I could say something wrong here. Somebody please CMIIW. regards, Mulyadi -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/