Skip to contentSkip to conversation

Regarding connector netlink running out of buffer space.

DISCUSSION mindentropy 2 participants 3 messages Jul 29, 2011

lore
Share & tools
lore
#0 lore raw

Hi,
I am trying to benchmark connector netlink and am passing a file and sending
the same to listening userspace app's using connectors i.e. cat filename > /dev/myconnector and an app listening. When I do this I always run into ENOBUFS or "No buffer space available" for files greater than 2MB. Now how should I fix this?
a) Increase the socket buffers? My rmem_max is 131071 and rmem_default is 126976
b) Should I check for the seq and ack and resend the packets? If yes how much packets should I not discard to do a resend?

Are there any other ways? Also I am not sure why local loop would cause enobufs? I am running this on a quad core with 3G of RAM.

Thanks.

#1 lore raw
Quoted 11 lines

-----Original Message-----
From: kernelnewbies-bounces at kernelnewbies.org [mailto:kernelnewbies- bounces at kernelnewbies.org] On Behalf Of mindentropy
Sent: Friday, July 29, 2011 1:35 PM
To: kernelnewbies at kernelnewbies.org
Subject: Regarding connector netlink running out of buffer space.

Hi,
I am trying to benchmark connector netlink and am passing a file and
sending
the same to listening userspace app's using connectors i.e. cat

filename >

Quoted 1 line

/dev/myconnector and an app listening. When I do this I always run

into

Quoted 6 lines

ENOBUFS or "No buffer space available" for files greater than 2MB. Now how should I fix this?
a) Increase the socket buffers? My rmem_max is 131071 and rmem_default is
126976
b) Should I check for the seq and ack and resend the packets? If yes

how

Quoted 4 lines

much
packets should I not discard to do a resend?

Are there any other ways? Also I am not sure why local loop would

cause

Quoted 3 lines

enobufs? I am running this on a quad core with 3G of RAM.

Thanks.

Just guessing here, but it's possible the kernel is attempting to kmalloc() a single buffer for the whole file and with the file at 2MB there's no slab/slob/slub with buffers that big. You might need to write to /dev/myconnector in smaller chunks.

Again, just a guess.

#2 lore raw
Quoted 28 lines · Jeff Haran
Quoted 28 lines

-----Original Message-----
From: kernelnewbies-bounces at kernelnewbies.org [mailto:kernelnewbies- bounces at kernelnewbies.org] On Behalf Of mindentropy
Sent: Friday, July 29, 2011 1:35 PM
To: kernelnewbies at kernelnewbies.org
Subject: Regarding connector netlink running out of buffer space.

Hi,

I am trying to benchmark connector netlink and am passing a file and

sending
the same to listening userspace app's using connectors i.e. cat filename >
/dev/myconnector and an app listening. When I do this I always run into

ENOBUFS or "No buffer space available" for files greater than 2MB. Now how should I fix this?
a) Increase the socket buffers? My rmem_max is 131071 and rmem_default is
126976
b) Should I check for the seq and ack and resend the packets? If yes how much packets should I not discard to do a resend?

Are there any other ways? Also I am not sure why local loop would cause enobufs? I am running this on a quad core with 3G of RAM.

Quoted 8 lines
Quoted 1 line

Thanks.

Just guessing here, but it's possible the kernel is attempting to kmalloc() a single buffer for the whole file and with the file at 2MB there's no slab/slob/slub with buffers that big. You might need to write to /dev/myconnector in smaller chunks.

Again, just a guess.

My device write file operation as of now accepts 1024 byte chunks. So my payload size is just 1024 bytes. For simple testing I tried with just 5 bytes. This too fails.