Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Jun 2006 16:22:21 +0300
From:      Volodymyr Kostyrko <arcade@synergetica.dn.ua>
To:        freebsd-stable@freebsd.org
Subject:   ahd(4) poor performance
Message-ID:  <449BEB0D.4050708@synergetica.dn.ua>

next in thread | raw e-mail | index | archive | help
Hi all.

 > uname -a
FreeBSD someserver 6.1-STABLE FreeBSD 6.1-STABLE #13: Thu Jun 22 
20:55:06 UTC 2006     arcade@someserver:/usr/obj/usr/src/sys/OGRE  i386

   I have:

ahd0: <Adaptec (Dell OEM) 39320 Ultra320 SCSI adapter> port
0xdc00-0xdcff,0xd800-0xd8ff mem 0xdfbfe000-0xdfbfffff irq 66 at device
7.0 on pci3
ahd0: [GIANT-LOCKED]
aic7902: Ultra320 Wide Channel A, SCSI Id=7, PCI-X 101-133Mhz, 512 SCBs
ahd1: <Adaptec (Dell OEM) 39320 Ultra320 SCSI adapter> port
0xd400-0xd4ff,0xd000-0xd0ff mem 0xdfbfc000-0xdfbfdfff irq 67 at device
7.1 on pci3
ahd1: [GIANT-LOCKED]
aic7902: Ultra320 Wide Channel B, SCSI Id=7, PCI-X 101-133Mhz, 512 SCBs

da0 at ahd0 bus 0 target 0 lun 0
da0: <SEAGATE ST373307LW DS09> Fixed Direct Access SCSI-3 device
da0: 320.000MB/s transfers (160.000MHz, offset 63, 16bit), Tagged 
Queueing Enabled
da0: 70007MB (143374650 512 byte sectors: 255H 63S/T 8924C)
da1 at ahd0 bus 0 target 1 lun 0
da1: <SEAGATE ST373207LW D702> Fixed Direct Access SCSI-3 device
da1: 320.000MB/s transfers (160.000MHz, offset 63, 16bit), Tagged 
Queueing Enabled
da1: 70007MB (143374650 512 byte sectors: 255H 63S/T 8924C)
cd0 at ata0 bus 0 target 0 lun 0
cd0: <TEAC CD-224E K.9A> Removable CD-ROM SCSI-0 device
cd0: 3.300MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present

   Booting machine also results in:

ahd0: Invalid Sequencer interrupt occurred.
>>>>>>>>>>>>>>>>>> Dump Card State Begins <<<<<<<<<<<<<<<<<
ahd0: Dumping Card State at program address 0x23b Mode 0x0
Card was paused
INTSTAT[0x0] SELOID[0x1] SELID[0x0] HS_MAILBOX[0x0]
INTCTL[0x80] SEQINTSTAT[0x0] SAVED_MODE[0x11] DFFSTAT[0x33]
SCSISIGI[0x0] SCSIPHASE[0x0] SCSIBUS[0x0] LASTPHASE[0x1]
SCSISEQ0[0x0] SCSISEQ1[0x12] SEQCTL0[0x0] SEQINTCTL[0x6]
SEQ_FLAGS[0x0] SEQ_FLAGS2[0x0] QFREEZE_COUNT[0x2]
KERNEL_QFREEZE_COUNT[0x2] MK_MESSAGE_SCB[0xff00] MK_MESSAGE_SCSIID[0xff]
SSTAT0[0x0] SSTAT1[0x0] SSTAT2[0x0] SSTAT3[0x0] PERRDIAG[0x0]
SIMODE1[0xa4] LQISTAT0[0x0] LQISTAT1[0x0] LQISTAT2[0x0]
LQOSTAT0[0x0] LQOSTAT1[0x0] LQOSTAT2[0x0]

SCB Count = 16 CMDS_PENDING = 0 LASTSCB 0xffff CURRSCB 0x8 NEXTSCB 0xff00
qinstart = 29 qinfifonext = 29
QINFIFO:
WAITING_TID_QUEUES:
Pending list:
Total 0
Kernel Free SCB list: 8 15 1 2 3 4 5 6 7 9 10 11 12 13 14 0
Sequencer Complete DMA-inprog list:
Sequencer Complete list:
Sequencer DMA-Up and Complete list:
Sequencer On QFreeze and Complete list:


ahd0: FIFO0 Free, LONGJMP == 0x8000, SCB 0xf
SEQIMODE[0x3f] SEQINTSRC[0x0] DFCNTRL[0x0] DFSTATUS[0x89]
SG_CACHE_SHADOW[0x2] SG_STATE[0x0] DFFSXFRCTL[0x0]
SOFFCNT[0x0] MDFFSTAT[0x5] SHADDR = 0x00, SHCNT = 0x0
HADDR = 0x00, HCNT = 0x0 CCSGCTL[0x10]

ahd0: FIFO1 Free, LONGJMP == 0x8063, SCB 0x8
SEQIMODE[0x3f] SEQINTSRC[0x0] DFCNTRL[0x0] DFSTATUS[0x89]
SG_CACHE_SHADOW[0x2] SG_STATE[0x0] DFFSXFRCTL[0x0]
SOFFCNT[0x0] MDFFSTAT[0x5] SHADDR = 0x00, SHCNT = 0x0
HADDR = 0x00, HCNT = 0x0 CCSGCTL[0x10]
LQIN: 0x8 0x0 0x0 0xf 0x0 0x2 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
0x0 0x0 0x0 0x0
ahd0: LQISTATE = 0x0, LQOSTATE = 0x0, OPTIONMODE = 0x42
ahd0: OS_SPACE_CNT = 0x20 MAXCMDCNT = 0x1
ahd0: SAVED_SCSIID = 0x0 SAVED_LUN = 0x0
SIMODE0[0xc]
CCSCBCTL[0x4]
ahd0: REG0 == 0xb960, SINDEX = 0x10e, DINDEX = 0x104
ahd0: SCBPTR == 0xf, SCB_NEXT == 0xff00, SCB_NEXT2 == 0xff20
CDB 12 40 0 80 88 86
STACK: 0x236 0x2 0x0 0x0 0x0 0x0 0x0 0x0
<<<<<<<<<<<<<<<<< Dump Card State Ends >>>>>>>>>>>>>>>>>>
Copied 18 bytes of sense data offset 12: 0x70 0x0 0x6 0x0 0x0 0x0 0x0
0xa 0x0 0x0 0x0 0x0 0x29 0x2 0x2 0x0 0x0 0x0
Copied 18 bytes of sense data offset 12: 0x70 0x0 0x6 0x0 0x0 0x0 0x0
0xa 0x0 0x0 0x0 0x0 0x29 0x2 0x2 0x0 0x0 0x0

   Performance of SCSI drives is very good on copying files, etc. But it
is very poor at large scale operations. For example, loading MySQL or
PgSQL with INSERT's results in:

     2 users    Load  0.02  0.10  0.07                  21 чер 21:12

Mem:KB    REAL            VIRTUAL                     VN PAGER  SWAP PAGER
         Tot   Share      Tot    Share    Free         in  out     in  out
Act  106448   13964   378720    29372 1859780 count
All  186516   20436 72438316    46856         pages
                                                       129 zfod   Interrupts
Proc:r  p  d  s  w    Csw  Trp  Sys  Int  Sof  Flt     96 cow    8134 total
           22114      2807  598 5379  876   29  396  72152 wire     18
4: sio0
                                                     87364 act
14: ata
  1.5%Sys   0.0%Intr  0.4%User  0.0%Nice 98.1%Idl    31312 inact     2
16: uhc
|    |    |    |    |    |    |    |    |    |         20 cache
19: uhc
=                                                 1859760 free
20: em1
                                                           daefr
23: ehc
Namei         Name-cache    Dir-cache                 380 prcfr     2
32: em0
     Calls     hits    %     hits    %                     react    94
66: ahd
       867      835   96                                   pdwak
67: ahd
                                                           pdpgs  2004
cpu0: time
Disks   da0   da1   cd0 pass0 pass1 pass2                 intrn  2005
cpu3: time
KB/t  16.19  0.00  0.00  0.00  0.00  0.00           53808 buf    2004
cpu1: time
tps      94     0     0     0     0     0              81 dirty  2005
cpu2: time
MB/s   1.48  0.00  0.00  0.00  0.00  0.00          100000 desiredvnodes
% busy  100     0     0     0     0     0            1733 numvnodes
                                                       345 freevnodes

^^^^^^^^^^^ and it gives me write speed near 3 Mb/s

   Here is a sample speed test:

 > dd if=/dev/zero of=somefile count=128
128+0 records in
128+0 records out
65536 bytes transferred in 0.004415 secs (14844624 bytes/sec)
 > dd if=/dev/zero of=somefile count=1024
1024+0 records in
1024+0 records out
524288 bytes transferred in 0.007078 secs (74073610 bytes/sec)
 > dd if=/dev/zero of=somefile count=10240
10240+0 records in
10240+0 records out
5242880 bytes transferred in 0.494883 secs (10594180 bytes/sec)
 > dd if=/dev/zero of=somefile count=20480
20480+0 records in
20480+0 records out
10485760 bytes transferred in 1.435380 secs (7305215 bytes/sec)
 > dd if=somefile of=/dev/null count=20480
20480+0 records in
20480+0 records out
10485760 bytes transferred in 0.065061 secs (161167906 bytes/sec)

   On the same hardware Linux runs perfectly.

   The problem can be reproduced on GENERIC/SMP kernel.

   Any thoughts? Am I just too dumb to miss something important?

-- 
[WBR], Arcade.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?449BEB0D.4050708>