implement linkat
tcp: Increase tcp_sosend_agglim from 2 to 3 This change makes better use of TSO. When 2 is used, most of the large TCP segments' size are 2*MSS or 3*MSS. When 3 is used, most of the large TCP segments' size are 4*MSS or 5*MSS. The math is quite simple, given 1448B segment size: 2 == 4096B == 2 segments 3 == 6144B == 4 segments Increasing it to a higher value improves single full speed stream's CPU utilization, but does not have much effect on multiple streams'.
bnx: Add TSO support Obtained-from: FreeBSD if_bge.c For TSO header information, ether_tso_pullup() is used instead of making our own wheel. BNX_TSO_DEBUG is added to help testing various TCP parameters tuning
tcp: Add TSO support for IPv4 It is implemented mainly according to NetBSD's TSO implementation. Following stuffs are only in DragonFly - Add comment about devices' expected behaviour upon PUSH and FIN flags Obtained-from: Microsoft's LSO online document - Don't use TSO, if there are SACK or DSACK blocks to report - Don't use TSO, if congestion window needs validation - Don't use TSO, if URG flag is to be set - Take IP and TCP header sizes into consideration when calculate the large TCP segment size - Pseudo checksum for the large TCP segment is calculated using only source address, destination address and IPPROTO_TCP according to Microsoft's LSO online document. This fashion of pseudo checksum calculation seems to be adopted by several NIC chips. Several driver helper functions are added: - tcp_tso_pullup(), which extracts IPv4 and TCP header's location and length. And make sure that IPv4 and TCP headers are in contiguous memory. - ether_tso_pullup(), in addition to what tcp_tso_pullup() does, it also extracts ethernet header's length and make sure that ethernet, IPv4 and TCP headers are in contiguous memory. Sysctl node net.inet.tcp.tso could be used to globally disable TSO. TSO is by default on. tso/-tso are added to ifconfig(8), which could be used to enable or disable TSO on the specific interface.
ciss(4): Sync with FreeBSD. Tons of good stuff. MPSAFEness, MSI interrupts, better performance, and a lot more (I'm too lazy to go through FreeBSD's logs :P). Support for a number of adapters has been added, too: * HP Smart Array P220i * HP Smart Array P222 * HP Smart Array P420 * HP Smart Array P420i * HP Smart Array P421 * HP Smart Array P700m * HP Smart Array P712m * HP Smart Array P721m * HP Smart Array P822 I've tested it with a HP Smart Array P212. Many thanks to FreeBSD.
mptable - use the table's cpu_flags * Sometimes the CPUs are marked as disabled in the APIC table, and for good reason (e.g. a machine having only 24 cores, but 32 appearing in the APIC table, 8 of them disabled). * Just in case, provide an override that falls back to the old behaviour. This is the tunable hw.lapic_force_enable. It will force all lapic entries to be marked as enabled. It is however not the default. * When parsing, don't error out when a lapic id is invalid (255) but it is disabled. Reported-by: Mihai Carabas, Francois Tigeot
gcore(1): Make it work again. Two commits broke things: 64fce751acfda11e21846e900fc774e88f32f52e which changed us to no longer claiming that we're FreeBSD in core files. 0b684e3f9af3abc5ded676c43a1a5a478b45325c which added another field to /proc/<pid>/map (the vnode path for vn-backed vm objects). Both changes need adjustments in gcore(1).