Re: 2.5.38-mm3

Dipankar Sarma
2002-09-27T09:58:34Z

On Fri, Sep 27, 2002 at 02:20:20AM -0700, William Lee Irwin III wrote:
> On Fri, Sep 27, 2002 at 01:57:43PM +0530, Dipankar Sarma wrote:
> > What application were you all running ?
> > Thanks
>
> Basically, the workload on my "desktop" system consists of numerous ssh
> sessions in and out of the machine, half a dozen IRC clients, xmms,
> Mozilla, and X overhead.

Ok, from a relatively idle system (4CPU) running SMP kernel -

18 fget 0.2250
0 0.00 c013d460: push %ebx
0 0.00 c013d461: mov $0xffffe000,%edx
0 0.00 c013d466: mov %eax,%ecx
0 0.00 c013d468: and %esp,%edx
0 0.00 c013d46a: mov (%edx),%eax
1 5.56 c013d46c: mov 0x674(%eax),%ebx
1 5.56 c013d472: lea 0x4(%ebx),%eax
0 0.00 c013d475: lock subl $0x1,(%eax)
3 16.67 c013d479: js c013d61b <.text.lock.file_table+0x30>
0 0.00 c013d47f: mov (%edx),%eax
1 5.56 c013d481: mov 0x674(%eax),%edx
0 0.00 c013d487: xor %eax,%eax
0 0.00 c013d489: cmp 0x8(%edx),%ecx
0 0.00 c013d48c: jae c013d494 <fget+0x34>
0 0.00 c013d48e: mov 0x14(%edx),%eax
0 0.00 c013d491: mov (%eax,%ecx,4),%eax
0 0.00 c013d494: test %eax,%eax
0 0.00 c013d496: je c013d49c <fget+0x3c>
0 0.00 c013d498: lock incl 0x14(%eax)
0 0.00 c013d49c: lock incl 0x4(%ebx)
5 27.78 c013d4a0: pop %ebx
0 0.00 c013d4a1: ret
7 38.89 c013d4a2: lea 0x0(%esi,1),%esi

I tried an SMP kernel on 1 CPU -

15 fget 0.1875
0 0.00 c013d460: push %ebx
2 13.33 c013d461: mov $0xffffe000,%edx
0 0.00 c013d466: mov %eax,%ecx
0 0.00 c013d468: and %esp,%edx
0 0.00 c013d46a: mov (%edx),%eax
0 0.00 c013d46c: mov 0x674(%eax),%ebx
0 0.00 c013d472: lea 0x4(%ebx),%eax
0 0.00 c013d475: lock subl $0x1,(%eax)
3 20.00 c013d479: js c013d61b <.text.lock.file_table+0x30>
0 0.00 c013d47f: mov (%edx),%eax
0 0.00 c013d481: mov 0x674(%eax),%edx
0 0.00 c013d487: xor %eax,%eax
0 0.00 c013d489: cmp 0x8(%edx),%ecx
0 0.00 c013d48c: jae c013d494 <fget+0x34>
0 0.00 c013d48e: mov 0x14(%edx),%eax
0 0.00 c013d491: mov (%eax,%ecx,4),%eax
0 0.00 c013d494: test %eax,%eax
0 0.00 c013d496: je c013d49c <fget+0x3c>
0 0.00 c013d498: lock incl 0x14(%eax)
0 0.00 c013d49c: lock incl 0x4(%ebx)
4 26.67 c013d4a0: pop %ebx
0 0.00 c013d4a1: ret
6 40.00 c013d4a2: lea 0x0(%esi,1),%esi

The counts are off by one.

With a UP kernel, I see that fget() cost is negligible.
So it is most likely the atomic operations for rwlock acquisition/release
in fget() that is adding to its cost. Unless of course my sampling
is too less.

Please try running the files_struct_rcu patch where fget() is lockfree
and let me know what you see.

Thanks
--
Dipankar Sarma <dipankar@in.ibm.com> http://lse.sourceforge.net
Linux Technology Center, IBM Software Lab, Bangalore, India.