X520 live as the product NIC: rate buckets re-keyed to read time (one shared clock, one commit per drained batch) with the backward smear as a settled window — each completed bucket enters once, donates excess to the nearest earlier deficits once, locks for display when nothing later can refill it (per-sample recompute double-counted excess and read >20G on a 20G wire); timestamp machinery deleted (ts.go, SO_TIMESTAMPING, rx_filter=ALL check) after the audit confirmed the buckets were its sole consumer; testDriver ixgbe; RollBall mailbox hardened against orphaned-command completions (never sample status before a poll gap, value from the same block read, devad/reg echo required — a killed session's 7.60 read answered a PHY ID as 0x0006); full hardware pass: 20.00G flat both directions, zero errors, ECD 42m, SNR +7.4dB
This commit is contained in:
@@ -101,22 +101,6 @@ func newMmsghdrs(bufs [][]byte) ([]mmsghdr, []unix.Iovec) {
|
||||
return hdrs, iovs
|
||||
}
|
||||
|
||||
// Room for one SCM_TIMESTAMPING and its three timespecs.
|
||||
const cmsgLen = 128
|
||||
|
||||
// Receive headers carry a control buffer each, so the mac's receive stamp comes
|
||||
// back alongside every frame.
|
||||
func newRxMmsghdrs(bufs [][]byte) ([]mmsghdr, [][]byte) {
|
||||
hdrs, _ := newMmsghdrs(bufs)
|
||||
oob := make([][]byte, len(bufs))
|
||||
for i := range bufs {
|
||||
oob[i] = make([]byte, cmsgLen)
|
||||
hdrs[i].hdr.Control = &oob[i][0]
|
||||
hdrs[i].hdr.Controllen = cmsgLen
|
||||
}
|
||||
return hdrs, oob
|
||||
}
|
||||
|
||||
func packetDrops(fd int) uint64 {
|
||||
st, err := unix.GetsockoptTpacketStats(fd, unix.SOL_PACKET, unix.PACKET_STATISTICS)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user