tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: FIXED: mpt Serious performance issues



Hi all!

>At the very last this change should apply only when the controller is in
>RAID mode.

But what´s the sense in simply scrubbing all mode pages on driver
initialisation?

>In this case, the driver should also probably ignore the
>modes set from the upper layer.

Does this have an impact to the scsipi layer, e.g. would the SCBs then
be different?

>So the controller does not present us any such page for the logical target
>device it provides?

Not to my knowledge...

>If the firmware vendor did *not* get it wrong, then there is a separate
>page which holds these settings for the "logical" disk, and when we are
>operating in RAID mode we need to use that one instead of ever accessing
>the 16 pages for the physical disks.  Do you have enough documentation
>to say if it actually works this way?

Mhhh... you could also have one RAID set containing 2 disks, and 2
other disks not being part of any RAID set. So the driver needs to
decide weather a target is part of an array or not. Unfortunately I do
not have any kind of documentation. There are other drivers (e.g.
Linux and FreeBSD) which serve as a reference. I´m currently making
the driver capable of reading RAID-settings with "mpt_mpilib.h" being
the only documentation I have ;) As a start, removing the said code
isn´t the best solution but stops the driver making things worse...


I tested this on 2 different servers (FSC and IBM) sucessfully. While
SCSI controllers are fine with that, SAS controllers still do not work
optimal (120MB reading, only 1 disk is being accessed; 25MB write
speed). There are 2 issues I see:

1)Write caching is not enabled by default in contrast to SCSI controllers.
2)Mode changing is ignored; tagged queueing won´t be enabled:

        if (!mpt->is_scsi) {
                /*
                 * SCSI transport settings don't make any sense for
                 * Fibre Channel; silently ignore the request.
                 */
                return;
        }

=> 1)

I have no idea how to enable write caching. Just changing the RAID
page and sending it back to the controller doesn´t work:

mpt0: DEBUG: Write Cache: 0
mpt0: DEBUG: Applying write caching hack...
mpt0: DEBUG: Sending setting to adapter...
mpt0: page type 0x8 not changeable
mpt0: DEBUG: ERROR sending setting to adapter...

The Linux driver enables write caching by default.


=> 2)

I made some modifications to mpt_set_xfer_mode() so that

-for FC, settings are completely ignored.
-for SAS, TQ and disconnecting are configured but no parallel port settings.
-for SCSI the behaving is still the same

sd0 at scsibus0 target 0 lun 0: <LSILOGIC, Logical Volume, 3000> disk fixed
sd0: 68664 MB, 68664 cyl, 16 head, 128 sec, 512 bytes/sect x 140623872 sectors
mpt0: DEBUG: mpt_set_xfer_mode() called
mpt0: DEBUG: mpt_set_xfer_mode(): Requested Target: 0
mpt0: Tagged queueing is requested...
mpt0: DEBUG: mpt_set_xfer_mode(): PERIPH_CAP_TQING is set TRUE
sd0: async, 8-bit transfers, tagged queueing

This makes nothing faster but leads to ugly messages on writing:

sd0(mpt0:0:0:0): adapter resource shortage
sd0(mpt0:0:0:0): adapter resource shortage
sd0(mpt0:0:0:0): adapter resource shortage
sd0(mpt0:0:0:0): adapter resource shortage
sd0(mpt0:0:0:0): adapter resource shortage
sd0(mpt0:0:0:0): adapter resource shortage


Regards,

Stephan


Home | Main Index | Thread Index | Old Index