Commit 4959e61b authored by Shivasharan S's avatar Shivasharan S Committed by Martin K. Petersen

scsi: megaraid_sas: Selectively apply stream detection based on IO type

Performance improvement:

Current driver calls stream detection unconditionally for all IOs.
Stream Detection logic is not required for most of the fast path IO. To
improve performance, avoid stream detection logic and do it only if
required.

Below are the cases where stream detection is required in driver:

1. All non-FastPath IOs (IOs going to FW)
2. Fast Path reads sent to ReadAhead capable VDs.
Signed-off-by: default avatarSumit Saxena <sumit.saxena@broadcom.com>
Signed-off-by: default avatarShivasharan S <shivasharan.srikanteshwara@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 5f19f7c8
...@@ -2664,16 +2664,6 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, ...@@ -2664,16 +2664,6 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
praid_context = &io_request->RaidContext; praid_context = &io_request->RaidContext;
if (instance->adapter_type == VENTURA_SERIES) { if (instance->adapter_type == VENTURA_SERIES) {
spin_lock_irqsave(&instance->stream_lock, spinlock_flags);
megasas_stream_detect(instance, cmd, &io_info);
spin_unlock_irqrestore(&instance->stream_lock, spinlock_flags);
/* In ventura if stream detected for a read and it is read ahead
* capable make this IO as LDIO
*/
if (is_stream_detected(&io_request->RaidContext.raid_context_g35) &&
io_info.isRead && io_info.ra_capable)
fp_possible = false;
/* FP for Optimal raid level 1. /* FP for Optimal raid level 1.
* All large RAID-1 writes (> 32 KiB, both WT and WB modes) * All large RAID-1 writes (> 32 KiB, both WT and WB modes)
* are built by the driver as LD I/Os. * are built by the driver as LD I/Os.
...@@ -2699,6 +2689,20 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, ...@@ -2699,6 +2689,20 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
} }
} }
if (!fp_possible ||
(io_info.isRead && io_info.ra_capable)) {
spin_lock_irqsave(&instance->stream_lock,
spinlock_flags);
megasas_stream_detect(instance, cmd, &io_info);
spin_unlock_irqrestore(&instance->stream_lock,
spinlock_flags);
/* In ventura if stream detected for a read and it is
* read ahead capable make this IO as LDIO
*/
if (is_stream_detected(&io_request->RaidContext.raid_context_g35))
fp_possible = false;
}
/* If raid is NULL, set CPU affinity to default CPU0 */ /* If raid is NULL, set CPU affinity to default CPU0 */
if (raid) if (raid)
megasas_set_raidflag_cpu_affinity(praid_context, megasas_set_raidflag_cpu_affinity(praid_context,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment