Module vs Kernel main performacne
Abu Rasheda
rcpilot2010 at gmail.com
Wed May 30 20:17:11 EDT 2012
On Wed, May 30, 2012 at 2:44 PM, Abu Rasheda <rcpilot2010 at gmail.com> wrote:
> I did another experiment.
>
> Wrote a stand alone module and user program which does ioctl and pass
> buffer to kernel module.
>
> User program passes a buffer through ioctl and kernel module does
> kmalloc on it and calls copy_from_user, kfree and return. Test program
> send 120 gigabyte data to module.
>
> If I pass 1k buffer per call, I get
>
> 115,396,349,819 instructions # 0.90 insns per cycle
> [95.00%]
>
> as I increase size of buffer, insns per cycle keep decreasing. Here is the data:
>
> 1k 0.90 insns per cycle
> 8k 0.43 insns per cycle
> 43k 0.18 insns per cycle
> 100k 0.08 insns per cycle
>
> Showing that cop_from_user is more efficient when copy data is small,
> why it is so ?
Did another experiment:
User program sending 43k and allocating 43k after entering ioctl and
copy_from_user smaller portion in each call to copy_from_user:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
copy_from_user 0.25k at a time 0.56 insns per cycle
copy_from_user 0.50k at a time 0.42 insns per cycle
copy_from_user 1.00k at a time 0.36 insns per cycle
copy_from_user 2.00k at a time 0.29 insns per cycle
copy_from_user 3.00k at a time 0.26 insns per cycle
copy_from_user 4.00k at a time 0.23 insns per cycle
copy_from_user 8.00k at a time 0.21 insns per cycle
copy_from_user 16.00k at a time 0.19 insns per cycle
User program sending 43k, allocating smaller chunk and sending that
chunk to call to copy_from_user:
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Allocated 0.25k and copy_from_user 0.25k at a time 1.04 insns per cycle
Allocated 0.50k and copy_from_user 0.50k at a time 0.90 insns per cycle
Allocated 1.00k and copy_from_user 1.00k at a time 0.79 insns per cycle
Allocated 2.00k and copy_from_user 2.00k at a time 0.67 insns per cycle
Allocated 4.00k and copy_from_user 4.00k at a time 0.53 insns per cycle
Allocated 8.00k and copy_from_user 8.00k at a time 0.42 insns per cycle
Allocated 16.00k and copy_from_user 16.00k at a time 0.33 insns per cycle
Allocated 32.00k and copy_from_user 32.00k at a time 0.22 insns per cycle
More information about the Kernelnewbies
mailing list