FreeBSD: syslog-ng: I/O error occurred while writing; fd='xx', error='No buffer space available (yy)'

Traiano Welcome Traiano.Welcome at mtnbusiness.co.za
Fri Mar 23 12:51:23 UTC 2012


Hi John




On 22/03/2012 19:49, "John Baldwin" <jhb at freebsd.org> wrote:

>On Thursday, March 22, 2012 11:00:35 am Traiano Welcome wrote:
>> Hi John
>> 
>> 
>> 
>> On 22/03/2012 14:16, "John Baldwin" <jhb at freebsd.org> wrote:
>> 
>> >On Thursday, March 22, 2012 6:03:21 am Traiano Welcome wrote:
>> >> Hi List
>> >> 
>> >> I've been seeing the following in the messages log of my freebsd
>>syslog
>> >> server for quite some time now:
>> >> 
>> >> ---
>> >> Mar 20 12:19:12 syslog2 syslog-ng[35313]: I/O error occurred while
>> >> writing; fd='12', error='No buffer space available (55)'
>> >> Mar 20 12:19:12 syslog2 syslog-ng[35313]: Connection broken;
>> >> time_reopen='60'
>> >> Mar 20 12:19:12 syslog2 syslog-ng[35313]: I/O error occurred while
>> >> writing; fd='13', error='No buffer space available (55)'
>> >> Mar 20 12:19:12 syslog2 syslog-ng[35313]: Connection broken;
>> >> time_reopen='60'
>> >> ---
>> >> 
>> >> These happen at a frequency of about 7 per minute on average. See
>> >>attached
>> >> trend graphs for an idea of the volume of traffic we're doing, as
>>well
>> >>as
>> >> the memory and cpu utilisation trends on this server during this
>>period.
>> >> As can be seen from the graphs, load does not seem to be the issue.
>> >> Occasionally during the week, the system freezes and requires a
>>reboot,
>> >>I
>> >> think it's related to the above message, though I'm not sure.
>> >> 
>> >> My question is: What does this error mean, and how can I resolve it?
>> >> 
>> >> I have tried to frame this as an operating system kernel resource
>>issue,
>> >> and experimented with increasing the freebsd kernel sysctls for UDP
>> >> performance:
>> >
>> >It means that the network driver has "filled" up with packets.  Are you
>> >using 
>> >igb(4)?  We have to crank the number of descriptors assigned to igb to
>> >the max 
>> >to workaround this at work (we get DNS timeouts during a simple boot
>> >otherwise).  hw.igb.maxtxd is the tunable you would set.  The max value
>> >you 
>> >can set it to is 4096.
>> 
>> 
>> Thanks for the clue. It seems igb is indeed being used. However, I not
>> that when I try to list this tunable, I don't get anything:
>> 
>> ---
>> [root at syslog2]# sysctl -a  | grep igb
>> [root at syslog2]#
>> ---
>> 
>> 
>> ---
>> [root at syslog2 /boot]# sysctl hw.igb.maxtxd=4000
>> sysctl: unknown oid 'hw.igb.maxtxd'
>
>> ---
>> 
>> 
>> Is this due to the way igb is compiled into the kernel, or am I tuning
>>in
>> the wrong place :-)
>
>You need to put it in /boot/loader.conf and then reboot.  Do try using
>4096
>rather than 4000.



I'm an idiot :-) Looks like the correct driver is bce:


---
[root at syslog2]# sysctl dev.bce | grep -v stat
dev.bce.0.%desc: Broadcom NetXtreme II BCM5708 1000Base-T (B2)
dev.bce.0.%driver: bce
dev.bce.0.%location: slot=0 function=0
dev.bce.0.%pnpinfo: vendor=0x14e4 device=0x164c subvendor=0x1028
subdevice=0x01b3 class=0x020000
dev.bce.0.%parent: pci7
dev.bce.0.l2fhdr_error_count: 0
dev.bce.0.mbuf_alloc_failed_count: 0
dev.bce.0.fragmented_mbuf_count: 0
dev.bce.0.dma_map_addr_rx_failed_count: 0
dev.bce.0.dma_map_addr_tx_failed_count: 0
dev.bce.0.unexpected_attention_count: 0
dev.bce.0.com_no_buffers: 0
dev.bce.1.%desc: Broadcom NetXtreme II BCM5708 1000Base-T (B2)
dev.bce.1.%driver: bce
dev.bce.1.%location: slot=0 function=0
dev.bce.1.%pnpinfo: vendor=0x14e4 device=0x164c subvendor=0x1028
subdevice=0x01b3 class=0x020000
dev.bce.1.%parent: pci3
dev.bce.1.l2fhdr_error_count: 0
dev.bce.1.mbuf_alloc_failed_count: 0
dev.bce.1.fragmented_mbuf_count: 0
dev.bce.1.dma_map_addr_rx_failed_count: 0
dev.bce.1.dma_map_addr_tx_failed_count: 0
dev.bce.1.unexpected_attention_count: 0
dev.bce.1.com_no_buffers:
---



And it looks like the buffer full errors have returned, and the perceived
improvement may just have been due to traffic backoff due to the reboot
But I can't seem to find any tunables for the bce driver. The man page
only indicates one:


---
SYSCTL VARIABLES
     The following variables are available as both sysctl(8) variables and
     loader(8) tunables:

     hw.bce.msi_enable
             Whether or not MSI support is enabled in the driver.  The
default
             value is 1.
---



 The only other solution I can think of is an upgrade. Is there an
alternative to this ?




>
>-- 
>John Baldwin



More information about the freebsd-net mailing list