Fun with pre-2.1.37-4 =)

J. Sean Connell (ankh@canuck.gen.nz)
Tue, 6 May 1997 02:01:38 +1200 (NZST)


Just booted pre-2.1.37-4 for the heck of it, and noticed that my system
seemed to be _really_ slow. Thanks to the good offices of Alt+ScrLock, I
found that it was spending an inordinate amount of time at 0xc010584c in
here:

/usr/src/linux/include/asm/system.h:191
/*
* Note: no "lock" prefix even on SMP: xchg always implies lock anyway
*/
static inline unsigned long __xchg(unsigned long x, void * ptr, int size)
{
c010854c: 31 c0 xorl %eax,%eax
/usr/src/linux/include/asm/system.h:212
switch (size) {
case 1:
__asm__("xchgb %b0,%1"
:"=q" (x)
:"m" (*__xg(ptr)), "0" (x)
:"memory");
break;
case 2:
__asm__("xchgw %w0,%1"
:"=r" (x)
:"m" (*__xg(ptr)), "0" (x)
:"memory");
break;
case 4:
__asm__("xchgl %0,%1"
:"=r" (x)
:"m" (*__xg(ptr)), "0" (x)
:"memory");
break;
}
return x;
c010854e: 89 c3 movl %eax,%ebx
c0108550: 87 1d 04 38 1c xchgl %ebx,0xc01c3804
c0108555: c0

In my /usr/src/linux/Makefile, I remembered to set SMP = 0, but when it
still compiled with __SMP__, I commented it out, and it went away, and I
was happy. I suspect that that may be my problem, but nonetheless I shall
enthrall you all with the gory details. =)

It also seemed to be spending a lot of time at 0xc01084bf in hard_idle():

if (hlt_works_ok && !hlt_counter) {
c01084ac: 80 3d cb 35 1c cmpb $0x0,0xc01c35cb
c01084b1: c0 00
c01084b3: 74 0a je c01084bf <hard_idle+1f>
c01084b5: 83 3d 7c 2f 1c cmpl $0x0,0xc01c2f7c
c01084ba: c0 00
c01084bc: 75 01 jne c01084bf <hard_idle+1f>
/usr/src/linux/arch/i386/kernel/process.c:86
#ifdef CONFIG_APM
/* If the APM BIOS is not enabled, or there
is an error calling the idle routine, we
should hlt if possible. We need to check
need_resched again because an interrupt
may have occurred in apm_do_idle(). */
start_bh_atomic();
if (!apm_do_idle() && !need_resched)
__asm__("hlt");
end_bh_atomic();
#else
__asm__("hlt");
c01084be: f4 hlt
/usr/src/linux/arch/i386/kernel/process.c:89
#endif
}
if (need_resched)
c01084bf: 83 3d 40 38 1c cmpl $0x0,0xc01c3840
c01084c4: c0 00
c01084c6: 75 0e jne c01084d6 <hard_idle+36>
/usr/src/linux/arch/i386/kernel/process.c:91
break;
schedule();
c01084c8: e8 23 6f 00 00 call c010f3f0 <schedule>
/usr/src/linux/arch/i386/kernel/process.c:92
}
c01084cd: 83 3d 40 38 1c cmpl $0x0,0xc01c3840
c01084d2: c0 00
c01084d4: 74 d6 je c01084ac <hard_idle+c>

Below you can find a copy of my .config. Feel free to ask for any other
additional details you may find relevant to this. =)

Enjoy!

--
J. S. Connell      | Systems Adminstrator, ICONZ.  Any opinions stated above
ankh@canuck.gen.nz | are not my employers', not my boyfriends', my God's, my
ankh@iconz.co.nz   | friends', and probably not even my own.
-------------------+---------------------------------------------------------
            PGP key at http://www.canuck.gen.nz/~ankh/pgpkey.html

CONFIG_EXPERIMENTAL=y CONFIG_MODULES=y CONFIG_KERNELD=y CONFIG_NET=y CONFIG_PCI=y CONFIG_PCI_OPTIMIZE=y CONFIG_SYSVIPC=y CONFIG_SYSCTL=y CONFIG_BINFMT_AOUT=m CONFIG_BINFMT_ELF=y CONFIG_M486=y CONFIG_BLK_DEV_FD=y CONFIG_BLK_DEV_IDE=y CONFIG_BLK_DEV_IDEDISK=y CONFIG_BLK_DEV_IDECD=m CONFIG_BLK_DEV_LOOP=m CONFIG_FIREWALL=y CONFIG_NET_ALIAS=y CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_FIREWALL=y CONFIG_IP_ACCT=y CONFIG_NET_IPIP=m CONFIG_IP_MROUTE=y CONFIG_IP_ALIAS=y CONFIG_INET_RARP=m CONFIG_PATH_MTU_DISCOVERY=y CONFIG_IP_NOSR=y CONFIG_SKB_LARGE=y CONFIG_NETDEVICES=y CONFIG_NET_ETHERNET=y CONFIG_NET_ISA=y CONFIG_NE2000=y CONFIG_PPP=y CONFIG_SHAPER=m CONFIG_MINIX_FS=m CONFIG_EXT2_FS=y CONFIG_FAT_FS=m CONFIG_MSDOS_FS=m CONFIG_VFAT_FS=m CONFIG_PROC_FS=y CONFIG_NFS_FS=m CONFIG_NFSD=m CONFIG_SUNRPC=m CONFIG_LOCKD=m CONFIG_SMB_FS=m CONFIG_SMB_WIN95=y CONFIG_ISO9660_FS=m CONFIG_UFS_FS=m CONFIG_BSD_DISKLABEL=y CONFIG_SMD_DISKLABEL=y CONFIG_VT=y CONFIG_VT_CONSOLE=y CONFIG_SERIAL=y CONFIG_SOUND=y CONFIG_SB=y CONFIG_ADLIB=y CONFIG_YM3812=y SBC_BASE=230 SBC_IRQ=5 SBC_DMA=1 SB_DMA2=5 SB_MPU_BASE=330 SB_MPU_IRQ=-1 CONFIG_PROFILE=y CONFIG_PROFILE_SHIFT=2