optimize performance: reduce allocations, buffered I/O, and zero-copy reads

- Read path: eliminate redundant allocation in bsPerformCommand - remove
  the pre-allocation before bs.Read() and the append loop for zero-fill,
  use direct copy and in-place zero-fill instead
- parseHeader: use command pool (getCommand) instead of direct allocation,
  reducing GC pressure on the hot path
- Unmap: use a shared 1MB zero buffer instead of allocating per-descriptor,
  dramatically reducing allocations for large unmap operations
- Network I/O: add 256KB bufio.Writer to iSCSI connections, batching
  small PDU writes into fewer syscalls. Flush after txHandler completes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Lei Xue
2026-03-14 19:03:30 +08:00
parent 729b450ac9
commit 16108ced95
5 changed files with 41 additions and 10 deletions

View File

@@ -830,6 +830,13 @@ SendRemainingData:
}
}
// Flush buffered writes to the network
if err := conn.flush(); err != nil {
log.Errorf("failed to flush data to client: %v", err)
conn.state = CONN_STATE_CLOSE
return
}
log.Debugf("connection state: %v", conn.State())
switch conn.state {
case CONN_STATE_CLOSE, CONN_STATE_EXIT: