* Slow OOM in netif_RX function
@ 2008-01-24 17:28 Ivan Dichev
2008-01-24 18:29 ` Stephen Hemminger
2008-01-24 19:12 ` Eric Dumazet
0 siblings, 2 replies; 14+ messages in thread
From: Ivan Dichev @ 2008-01-24 17:28 UTC (permalink / raw)
To: netdev
Hello,
I got problem with my linux router. It has slow persistent OOM
problems from few months ago.
Every working(I mean days when more traffic is generated) day my
router is leaking with 15-20 MB memory and
after 2 weeks the restart is a MUST.
>From /proc/slabinfo I saw that size-2048 and size-512 are growing
rapidly every day when traffic occur.
--------- /proc/slabinfo --------------------
size-2048 20322 20349 2072 3 2 : tunables 24
12 0 : slabdata 6780 6783 0
size-512 50984 51016 536 7 1 : tunables 32
16 0 : slabdata 7288 7288 0
I was wondering who is allocating this mem pools and then I changed
the kernel with 2.6.23-rc12 including options
CONFIG_DEBUG_SLAB=y
CONFIG_DEBUG_SLAB_LEAK=y
Unfortunately changing the kernel didn't solve the mem leak....
Now /proc/slab_allocators is showing that 3c59x driver is allocating
2048 and 512 bytes memory pools
caused by RX function.
--------- from /proc/slab_allocators ------------------------------
7612 size-2048: boomerang_rx+0x33b/0x437 [3c59x]
16018 size-512: boomerang_rx+0x165/0x437 [3c59x]
I was thinking that the 3com driver is bogus, .. but not!
After few days I changed the cards with rtl8139 and now ....
--------- from /proc/slab_allocators ------------------------------
size-2048: 20159 rtl8139_rx+0x155/0x2dc [8139too]
size-1024: 2693 rtl8139_rx+0x155/0x2dc [8139too]
size-512: 50515 rtl8139_rx+0x155/0x2dc [8139too]
the memory leak appear again in the same function(RX).
I did search over the mailing list and found as similar only this
http://www.spinics.net/lists/kernel/old/2003-q4/msg03071.html
For sure it does not depend on kernel version and network
driver(except case if both drivers are bogus :)
Any ideas ?
Ivan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-01-24 17:28 Slow OOM in netif_RX function Ivan Dichev
@ 2008-01-24 18:29 ` Stephen Hemminger
2008-01-24 19:12 ` Eric Dumazet
1 sibling, 0 replies; 14+ messages in thread
From: Stephen Hemminger @ 2008-01-24 18:29 UTC (permalink / raw)
To: Ivan Dichev; +Cc: netdev
On Thu, 24 Jan 2008 19:28:09 +0200
Ivan Dichev <idichev@obs.bg> wrote:
> Hello,
> I got problem with my linux router. It has slow persistent OOM
> problems from few months ago.
> Every working(I mean days when more traffic is generated) day my
> router is leaking with 15-20 MB memory and
> after 2 weeks the restart is a MUST.
> From /proc/slabinfo I saw that size-2048 and size-512 are growing
> rapidly every day when traffic occur.
>
> --------- /proc/slabinfo --------------------
> size-2048 20322 20349 2072 3 2 : tunables 24
> 12 0 : slabdata 6780 6783 0
> size-512 50984 51016 536 7 1 : tunables 32
> 16 0 : slabdata 7288 7288 0
>
>
> I was wondering who is allocating this mem pools and then I changed
> the kernel with 2.6.23-rc12 including options
> CONFIG_DEBUG_SLAB=y
> CONFIG_DEBUG_SLAB_LEAK=y
>
>
> Unfortunately changing the kernel didn't solve the mem leak....
> Now /proc/slab_allocators is showing that 3c59x driver is allocating
> 2048 and 512 bytes memory pools
> caused by RX function.
> --------- from /proc/slab_allocators ------------------------------
> 7612 size-2048: boomerang_rx+0x33b/0x437 [3c59x]
> 16018 size-512: boomerang_rx+0x165/0x437 [3c59x]
>
> I was thinking that the 3com driver is bogus, .. but not!
> After few days I changed the cards with rtl8139 and now ....
> --------- from /proc/slab_allocators ------------------------------
> size-2048: 20159 rtl8139_rx+0x155/0x2dc [8139too]
> size-1024: 2693 rtl8139_rx+0x155/0x2dc [8139too]
> size-512: 50515 rtl8139_rx+0x155/0x2dc [8139too]
>
> the memory leak appear again in the same function(RX).
>
> I did search over the mailing list and found as similar only this
> http://www.spinics.net/lists/kernel/old/2003-q4/msg03071.html
>
>
> For sure it does not depend on kernel version and network
> driver(except case if both drivers are bogus :)
> Any ideas ?
>
> Ivan
>
Receive packets are allocated by the driver, and then consumed by
the protocols or sockets. The problem is in the consumer side, so you need
to go looking to see if lots of data is getting queued to some application
that is never reading. Alternatively, it could be some form of control packet
that is not properly processed by a protocol.
Also look at firewall and classification rules, could be a buggy iptables rule?
--
Stephen Hemminger <stephen.hemminger@vyatta.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-01-24 17:28 Slow OOM in netif_RX function Ivan Dichev
2008-01-24 18:29 ` Stephen Hemminger
@ 2008-01-24 19:12 ` Eric Dumazet
2008-01-24 21:18 ` Ivan H. Dichev
1 sibling, 1 reply; 14+ messages in thread
From: Eric Dumazet @ 2008-01-24 19:12 UTC (permalink / raw)
To: Ivan Dichev; +Cc: netdev
Ivan Dichev a écrit :
> Hello,
> I got problem with my linux router. It has slow persistent OOM
> problems from few months ago.
> Every working(I mean days when more traffic is generated) day my
> router is leaking with 15-20 MB memory and
> after 2 weeks the restart is a MUST.
>>From /proc/slabinfo I saw that size-2048 and size-512 are growing
> rapidly every day when traffic occur.
>
> --------- /proc/slabinfo --------------------
> size-2048 20322 20349 2072 3 2 : tunables 24
> 12 0 : slabdata 6780 6783 0
> size-512 50984 51016 536 7 1 : tunables 32
> 16 0 : slabdata 7288 7288 0
>
>
> I was wondering who is allocating this mem pools and then I changed
> the kernel with 2.6.23-rc12 including options
> CONFIG_DEBUG_SLAB=y
> CONFIG_DEBUG_SLAB_LEAK=y
>
>
> Unfortunately changing the kernel didn't solve the mem leak....
> Now /proc/slab_allocators is showing that 3c59x driver is allocating
> 2048 and 512 bytes memory pools
> caused by RX function.
> --------- from /proc/slab_allocators ------------------------------
> 7612 size-2048: boomerang_rx+0x33b/0x437 [3c59x]
> 16018 size-512: boomerang_rx+0x165/0x437 [3c59x]
>
> I was thinking that the 3com driver is bogus, .. but not!
> After few days I changed the cards with rtl8139 and now ....
> --------- from /proc/slab_allocators ------------------------------
> size-2048: 20159 rtl8139_rx+0x155/0x2dc [8139too]
> size-1024: 2693 rtl8139_rx+0x155/0x2dc [8139too]
> size-512: 50515 rtl8139_rx+0x155/0x2dc [8139too]
>
> the memory leak appear again in the same function(RX).
>
> I did search over the mailing list and found as similar only this
> http://www.spinics.net/lists/kernel/old/2003-q4/msg03071.html
>
>
> For sure it does not depend on kernel version and network
> driver(except case if both drivers are bogus :)
> Any ideas ?
>
Could you post your iptable rules "iptables -t nat -nvL ; iptables -nvL", and
full "cat /proc/slabinfo" ?
^ permalink raw reply [flat|nested] 14+ messages in thread
* Slow OOM in netif_RX function
2008-01-24 19:12 ` Eric Dumazet
@ 2008-01-24 21:18 ` Ivan H. Dichev
2008-01-24 21:51 ` Francois Romieu
2008-01-25 13:21 ` Andi Kleen
0 siblings, 2 replies; 14+ messages in thread
From: Ivan H. Dichev @ 2008-01-24 21:18 UTC (permalink / raw)
To: netdev
Eric Dumazet writes:
> Ivan Dichev a écrit :
>> Hello,
>> I got problem with my linux router. It has slow persistent OOM
>> problems from few months ago.
>> Every working(I mean days when more traffic is generated) day my
>> router is leaking with 15-20 MB memory and
>> after 2 weeks the restart is a MUST.
>>> From /proc/slabinfo I saw that size-2048 and size-512 are growing
>> rapidly every day when traffic occur.
>>
>> --------- /proc/slabinfo --------------------
>> size-2048 20322 20349 2072 3 2 : tunables 24 12 0
>> : slabdata 6780 6783 0
>> size-512 50984 51016 536 7 1 : tunables 32 16 0
>> : slabdata 7288 7288 0
>>
>>
>> I was wondering who is allocating this mem pools and then I changed
>> the kernel with 2.6.23-rc12 including options
>> CONFIG_DEBUG_SLAB=y
>> CONFIG_DEBUG_SLAB_LEAK=y
>>
>>
>> Unfortunately changing the kernel didn't solve the mem leak....
>> Now /proc/slab_allocators is showing that 3c59x driver is allocating
>> 2048 and 512 bytes memory pools
>> caused by RX function.
>> --------- from /proc/slab_allocators ------------------------------
>> 7612 size-2048: boomerang_rx+0x33b/0x437 [3c59x]
>> 16018 size-512: boomerang_rx+0x165/0x437 [3c59x]
>>
>> I was thinking that the 3com driver is bogus, .. but not!
>> After few days I changed the cards with rtl8139 and now ....
>> --------- from /proc/slab_allocators ------------------------------
>> size-2048: 20159 rtl8139_rx+0x155/0x2dc [8139too]
>> size-1024: 2693 rtl8139_rx+0x155/0x2dc [8139too]
>> size-512: 50515 rtl8139_rx+0x155/0x2dc [8139too]
>>
>> the memory leak appear again in the same function(RX).
>>
>> I did search over the mailing list and found as similar only this
>> http://www.spinics.net/lists/kernel/old/2003-q4/msg03071.html
>>
>>
>> For sure it does not depend on kernel version and network
>> driver(except case if both drivers are bogus :)
>> Any ideas ?
>>
>
> Could you post your iptable rules "iptables -t nat -nvL ; iptables -nvL",
> and full "cat /proc/slabinfo" ?
>
>
Sorry but my firewall is 7000+ lines and I cant paste the rules.
And that's why it's very hard to debug the chains :(
I have better idea!
What could happen if I put different Lan card in every slot?
In ex. to-private -> 3com
to-inet -> VIA
to-dmz -> rtl8139
And then to look which RX function is consuming the memory.
(boomerang_rx, rtl8139_rx, ... etc)
With this it will be easier to understand which iptables rules(bound to the
found interface) have to be watched.
(I am not sure that it will work ?)
Any other ideas appreciated.
Ivan Dichev
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-01-24 21:18 ` Ivan H. Dichev
@ 2008-01-24 21:51 ` Francois Romieu
2008-01-25 13:21 ` Andi Kleen
1 sibling, 0 replies; 14+ messages in thread
From: Francois Romieu @ 2008-01-24 21:51 UTC (permalink / raw)
To: Ivan H. Dichev; +Cc: netdev
Ivan H. Dichev <idichev@obs.bg> :
[...]
> Any other ideas appreciated.
Plot the slab values and the counters of the iptables rules against time ?
--
Ueimor
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-01-24 21:18 ` Ivan H. Dichev
2008-01-24 21:51 ` Francois Romieu
@ 2008-01-25 13:21 ` Andi Kleen
2008-01-25 14:12 ` Arnaldo Carvalho de Melo
1 sibling, 1 reply; 14+ messages in thread
From: Andi Kleen @ 2008-01-25 13:21 UTC (permalink / raw)
To: Ivan H. Dichev; +Cc: netdev
"Ivan H. Dichev" <idichev@obs.bg> writes:
>
> What could happen if I put different Lan card in every slot?
> In ex. to-private -> 3com
> to-inet -> VIA
> to-dmz -> rtl8139
> And then to look which RX function is consuming the memory.
> (boomerang_rx, rtl8139_rx, ... etc)
The problem is unlikely to be in the driver (these are both
well tested ones) but more likely your complicated iptables setup somehow
triggers a skb leak.
There are unfortunately no shrink wrapped debug mechanisms in the kernel
for leaks like this (ok you could enable CONFIG_NETFILTER_DEBUG
and see if it prints something interesting, but that's a long shot).
If you wanted to write a custom debugging patch I would do something like this:
- Add two new integer fields to struct sk_buff: a time stamp and a integer field
- Fill the time stamp with jiffies in alloc_skb and clear the integer field
- In __kfree_skb clear the time stamp
- For all the ipt target modules in net/ipv4/netfilter/*.c you use change their
->target functions to put an unique value into the integer field you added.
- Do the same for the pkt_to_tuple functions for all conntrack modules
Then when you observe the leak take a crash dump using kdump on the router
and then use crash to dump all the slab objects for the sk_head_cache.
Then look for any that have an old time stamp and check what value they
have in the integer field. Then the netfilter function who set that unique value
likely triggered the leak somehow.
-Andi
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-01-25 13:21 ` Andi Kleen
@ 2008-01-25 14:12 ` Arnaldo Carvalho de Melo
2008-02-01 12:51 ` Ivan Dichev
0 siblings, 1 reply; 14+ messages in thread
From: Arnaldo Carvalho de Melo @ 2008-01-25 14:12 UTC (permalink / raw)
To: Andi Kleen; +Cc: Ivan H. Dichev, netdev
Em Fri, Jan 25, 2008 at 02:21:08PM +0100, Andi Kleen escreveu:
> "Ivan H. Dichev" <idichev@obs.bg> writes:
> >
> > What could happen if I put different Lan card in every slot?
> > In ex. to-private -> 3com
> > to-inet -> VIA
> > to-dmz -> rtl8139
> > And then to look which RX function is consuming the memory.
> > (boomerang_rx, rtl8139_rx, ... etc)
>
> The problem is unlikely to be in the driver (these are both
> well tested ones) but more likely your complicated iptables setup somehow
> triggers a skb leak.
>
> There are unfortunately no shrink wrapped debug mechanisms in the kernel
> for leaks like this (ok you could enable CONFIG_NETFILTER_DEBUG
> and see if it prints something interesting, but that's a long shot).
>
> If you wanted to write a custom debugging patch I would do something like this:
>
> - Add two new integer fields to struct sk_buff: a time stamp and a integer field
> - Fill the time stamp with jiffies in alloc_skb and clear the integer field
> - In __kfree_skb clear the time stamp
> - For all the ipt target modules in net/ipv4/netfilter/*.c you use change their
> ->target functions to put an unique value into the integer field you added.
> - Do the same for the pkt_to_tuple functions for all conntrack modules
>
> Then when you observe the leak take a crash dump using kdump on the router
> and then use crash to dump all the slab objects for the sk_head_cache.
> Then look for any that have an old time stamp and check what value they
> have in the integer field. Then the netfilter function who set that unique value
> likely triggered the leak somehow.
I wrote some systemtap scripts that do parts of what you suggest, and at
least for the timestamp there was no need to add a new field to struct
sk_buff, I just reuse skb->timestamp, as it is only used when we use a
packet sniffer. Here it is for reference, but it needs some tapsets I
wrote, so I'll publish this git repo in git.kernel.org, perhaps it can
be useful in this case as a starting point. Find another unused field
(hint: I know that at least 4 bytes on 64 bits is present as a hole) and
you're done, no need to rebuild the kernel :)
http://git.kernel.org/?p=linux/kernel/git/acme/nettaps.git
- Arnaldo
#!/usr/bin/stap
global stats_latency
global stats_bufsize
probe new_packet = kernel.function("__alloc_skb").return
{
skb = $return
}
probe tcp_in = kernel.function("tcp_v4_rcv")
{
skb = $skb
sport = skb_tcphdr_sport(skb)
dport = skb_tcphdr_dport(skb)
saddr = skb_iphdr_saddr(skb)
daddr = skb_iphdr_daddr(skb)
len = $skb->len
timestamp = skb_tstamp(skb)
}
probe tcp_out = kernel.function("tcp_transmit_skb")
{
sk = $sk
len = $skb->len
timestamp = skb_tstamp($skb)
sport = inet_sk_sport(sk)
dport = inet_sk_dport(sk)
saddr = inet_sk_saddr(sk)
daddr = inet_sk_daddr(sk)
}
probe ip_in = kernel.function("ip_rcv")
{
skb = $skb
saddr = skb_iphdr_saddr(skb)
daddr = skb_iphdr_daddr(skb)
protocol = skb_iphdr_protocol(skb)
len = $skb->len
timestamp = skb_tstamp(skb)
}
probe ip_out = kernel.function("ip_queue_xmit")
{
sk = $skb->sk
len = $skb->len
protocol = sk_protocol(sk)
timestamp = skb_tstamp($skb)
sport = inet_sk_sport(sk)
dport = inet_sk_dport(sk)
saddr = inet_sk_saddr(sk)
daddr = inet_sk_daddr(sk)
}
probe dev_out = kernel.function("dev_hard_start_xmit")
{
skb = $skb
sk = $skb->sk
len = $skb->len
timestamp = skb_tstamp(skb)
if (sk) {
protocol = sk_protocol(sk)
sport = inet_sk_sport(sk)
dport = inet_sk_dport(sk)
saddr = inet_sk_saddr(sk)
daddr = inet_sk_daddr(sk)
}
}
probe dev_in = kernel.function("netif_rx"), kernel.function("netif_receive_skb")
{
skb = $skb
}
probe user_in = kernel.function("skb_copy_datagram_iovec"),
kernel.function("skb_copy_and_csum_datagram")
{
skb = $skb
sk = $skb->sk
len = len
timestamp = skb_tstamp(skb)
protocol = 0
if (sk) {
protocol = sk_protocol(sk)
dport = inet_sk_dport(sk)
sport = inet_sk_sport(sk)
saddr = inet_sk_saddr(sk)
daddr = inet_sk_daddr(sk)
}
}
probe new_packet
{
if (skb)
skb_take_tstamp(skb)
}
probe dev_in
{
if (skb)
skb_take_tstamp(skb)
}
function add_sample(table_id, saddr, sport, daddr, dport, timestamp, len)
{
/* We're only interested in loopback
if (daddr != 0x100007f)
return 0 */
delay = gettimeofday_ns() - timestamp
if (delay < 0) {
printf("delay < 0! timestamp=%d\n", timestamp)
return 0
}
stats_latency[table_id, saddr, sport, daddr, dport] <<< delay
stats_bufsize[table_id, saddr, sport, daddr, dport] <<< len
}
probe dev_out
{
if (protocol == IPPROTO_TCP)
add_sample("dev_out", saddr, sport, daddr, dport, timestamp, len)
}
probe tcp_out
{
add_sample("tcp_out", saddr, sport, daddr, dport, timestamp, len)
}
probe ip_in
{
if (protocol == IPPROTO_TCP) {
sport = skb_iphdr_tcp_sport(skb)
dport = skb_iphdr_tcp_dport(skb)
add_sample("ip_in", daddr, dport, saddr, sport, timestamp, len)
}
}
probe ip_out
{
if (protocol == IPPROTO_TCP)
add_sample("ip_out", daddr, dport, saddr, sport, timestamp, len)
}
probe tcp_in
{
add_sample("tcp_in", daddr, dport, saddr, sport, timestamp, len)
}
probe user_in
{
if (protocol == IPPROTO_TCP)
add_sample("user_in", saddr, sport, daddr, dport, timestamp, len)
}
probe end
{
printf("%8s %15.15s %5s %15s %5s %23s %18s\n",
"", "", "", "", "", "latency(ns)", "buffer size")
printf("%8.8s %15.15s %5s %15.15s %5s %8s %7s %9s %5s %5s %5s\n",
"entry", "local address", "port", "remote address", "port",
"avg", "min", "max", "avg", "min", "max")
foreach ([table_id-, saddr, sport, daddr, dport] in stats_latency) {
printf("%-8.8s %15.15s %5d %15.15s %5d %8d %7d %9d %5d %5d %5d\n",
table_id, inet_sk_ntop(saddr), sport, inet_sk_ntop(daddr), dport,
@avg(stats_latency[table_id, saddr, sport, daddr, dport]),
@min(stats_latency[table_id, saddr, sport, daddr, dport]),
@max(stats_latency[table_id, saddr, sport, daddr, dport]),
@avg(stats_bufsize[table_id, saddr, sport, daddr, dport]),
@min(stats_bufsize[table_id, saddr, sport, daddr, dport]),
@max(stats_bufsize[table_id, saddr, sport, daddr, dport]))
}
}
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-01-25 14:12 ` Arnaldo Carvalho de Melo
@ 2008-02-01 12:51 ` Ivan Dichev
2008-02-01 13:16 ` Eric Dumazet
2008-02-01 14:29 ` Andi Kleen
0 siblings, 2 replies; 14+ messages in thread
From: Ivan Dichev @ 2008-02-01 12:51 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Andi Kleen, netdev
Arnaldo Carvalho de Melo wrote:
> Em Fri, Jan 25, 2008 at 02:21:08PM +0100, Andi Kleen escreveu:
>
>> "Ivan H. Dichev" <idichev@obs.bg> writes:
>>
>>> What could happen if I put different Lan card in every slot?
>>> In ex. to-private -> 3com
>>> to-inet -> VIA
>>> to-dmz -> rtl8139
>>> And then to look which RX function is consuming the memory.
>>> (boomerang_rx, rtl8139_rx, ... etc)
>>>
>> The problem is unlikely to be in the driver (these are both
>> well tested ones) but more likely your complicated iptables setup somehow
>> triggers a skb leak.
>>
>> There are unfortunately no shrink wrapped debug mechanisms in the kernel
>> for leaks like this (ok you could enable CONFIG_NETFILTER_DEBUG
>> and see if it prints something interesting, but that's a long shot).
>>
>> If you wanted to write a custom debugging patch I would do something like this:
>>
>> - Add two new integer fields to struct sk_buff: a time stamp and a integer field
>> - Fill the time stamp with jiffies in alloc_skb and clear the integer field
>> - In __kfree_skb clear the time stamp
>> - For all the ipt target modules in net/ipv4/netfilter/*.c you use change their
>> ->target functions to put an unique value into the integer field you added.
>> - Do the same for the pkt_to_tuple functions for all conntrack modules
>>
>> Then when you observe the leak take a crash dump using kdump on the router
>> and then use crash to dump all the slab objects for the sk_head_cache.
>> Then look for any that have an old time stamp and check what value they
>> have in the integer field. Then the netfilter function who set that unique value
>> likely triggered the leak somehow.
>>
>
> I wrote some systemtap scripts that do parts of what you suggest, and at
> least for the timestamp there was no need to add a new field to struct
> sk_buff, I just reuse skb->timestamp, as it is only used when we use a
> packet sniffer. Here it is for reference, but it needs some tapsets I
> wrote, so I'll publish this git repo in git.kernel.org, perhaps it can
> be useful in this case as a starting point. Find another unused field
> (hint: I know that at least 4 bytes on 64 bits is present as a hole) and
> you're done, no need to rebuild the kernel :)
>
> http://git.kernel.org/?p=linux/kernel/git/acme/nettaps.git
>
> - Arnaldo
>
Thanks to everyone for the given ideas.
I am not kernel guru so writing patch is difficult. This is a production
server and it is quite difficult to debug (only at night)
I removed some iptables exotics - recent , ulog, string , but no effect.
Since we can reach OOM most of the memory is going to be filled with the
leak, and we are thinking to try to dump and analyze it.
We have looked at the "crash" tool, and we will see what we can do with
it. Meanwhile do you have any hint/ideas ?
Thanks a lot.
Ivan Dichev
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-02-01 12:51 ` Ivan Dichev
@ 2008-02-01 13:16 ` Eric Dumazet
2008-02-01 15:38 ` Ivan Dichev
2008-02-01 14:29 ` Andi Kleen
1 sibling, 1 reply; 14+ messages in thread
From: Eric Dumazet @ 2008-02-01 13:16 UTC (permalink / raw)
To: Ivan Dichev; +Cc: Arnaldo Carvalho de Melo, Andi Kleen, netdev
Ivan Dichev a écrit :
> Arnaldo Carvalho de Melo wrote:
>
>> Em Fri, Jan 25, 2008 at 02:21:08PM +0100, Andi Kleen escreveu:
>>
>>
>>> "Ivan H. Dichev" <idichev@obs.bg> writes:
>>>
>>>
>>>> What could happen if I put different Lan card in every slot?
>>>> In ex. to-private -> 3com
>>>> to-inet -> VIA
>>>> to-dmz -> rtl8139
>>>> And then to look which RX function is consuming the memory.
>>>> (boomerang_rx, rtl8139_rx, ... etc)
>>>>
>>>>
>>> The problem is unlikely to be in the driver (these are both
>>> well tested ones) but more likely your complicated iptables setup somehow
>>> triggers a skb leak.
>>>
>>> There are unfortunately no shrink wrapped debug mechanisms in the kernel
>>> for leaks like this (ok you could enable CONFIG_NETFILTER_DEBUG
>>> and see if it prints something interesting, but that's a long shot).
>>>
>>> If you wanted to write a custom debugging patch I would do something like this:
>>>
>>> - Add two new integer fields to struct sk_buff: a time stamp and a integer field
>>> - Fill the time stamp with jiffies in alloc_skb and clear the integer field
>>> - In __kfree_skb clear the time stamp
>>> - For all the ipt target modules in net/ipv4/netfilter/*.c you use change their
>>> ->target functions to put an unique value into the integer field you added.
>>> - Do the same for the pkt_to_tuple functions for all conntrack modules
>>>
>>> Then when you observe the leak take a crash dump using kdump on the router
>>> and then use crash to dump all the slab objects for the sk_head_cache.
>>> Then look for any that have an old time stamp and check what value they
>>> have in the integer field. Then the netfilter function who set that unique value
>>> likely triggered the leak somehow.
>>>
>>>
>> I wrote some systemtap scripts that do parts of what you suggest, and at
>> least for the timestamp there was no need to add a new field to struct
>> sk_buff, I just reuse skb->timestamp, as it is only used when we use a
>> packet sniffer. Here it is for reference, but it needs some tapsets I
>> wrote, so I'll publish this git repo in git.kernel.org, perhaps it can
>> be useful in this case as a starting point. Find another unused field
>> (hint: I know that at least 4 bytes on 64 bits is present as a hole) and
>> you're done, no need to rebuild the kernel :)
>>
>> http://git.kernel.org/?p=linux/kernel/git/acme/nettaps.git
>>
>> - Arnaldo
>>
>>
> Thanks to everyone for the given ideas.
> I am not kernel guru so writing patch is difficult. This is a production
> server and it is quite difficult to debug (only at night)
> I removed some iptables exotics - recent , ulog, string , but no effect.
> Since we can reach OOM most of the memory is going to be filled with the
> leak, and we are thinking to try to dump and analyze it.
> We have looked at the "crash" tool, and we will see what we can do with
> it. Meanwhile do you have any hint/ideas ?
> Thanks a lot.
>
>
I understand you dont want to tell us exact firewall rules you have.
Maybe you could post at least following infos :
# cat /proc/slabinfo
# lsmod
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-02-01 12:51 ` Ivan Dichev
2008-02-01 13:16 ` Eric Dumazet
@ 2008-02-01 14:29 ` Andi Kleen
1 sibling, 0 replies; 14+ messages in thread
From: Andi Kleen @ 2008-02-01 14:29 UTC (permalink / raw)
To: Ivan Dichev; +Cc: Arnaldo Carvalho de Melo, Andi Kleen, netdev
On Fri, Feb 01, 2008 at 02:51:40PM +0200, Ivan Dichev wrote:
> Arnaldo Carvalho de Melo wrote:
> > Em Fri, Jan 25, 2008 at 02:21:08PM +0100, Andi Kleen escreveu:
> >
> >> "Ivan H. Dichev" <idichev@obs.bg> writes:
> >>
> >>> What could happen if I put different Lan card in every slot?
> >>> In ex. to-private -> 3com
> >>> to-inet -> VIA
> >>> to-dmz -> rtl8139
> >>> And then to look which RX function is consuming the memory.
> >>> (boomerang_rx, rtl8139_rx, ... etc)
> >>>
> >> The problem is unlikely to be in the driver (these are both
> >> well tested ones) but more likely your complicated iptables setup somehow
> >> triggers a skb leak.
> >>
> >> There are unfortunately no shrink wrapped debug mechanisms in the kernel
> >> for leaks like this (ok you could enable CONFIG_NETFILTER_DEBUG
> >> and see if it prints something interesting, but that's a long shot).
> >>
> >> If you wanted to write a custom debugging patch I would do something like this:
> >>
> >> - Add two new integer fields to struct sk_buff: a time stamp and a integer field
> >> - Fill the time stamp with jiffies in alloc_skb and clear the integer field
> >> - In __kfree_skb clear the time stamp
> >> - For all the ipt target modules in net/ipv4/netfilter/*.c you use change their
> >> ->target functions to put an unique value into the integer field you added.
> >> - Do the same for the pkt_to_tuple functions for all conntrack modules
> >>
> >> Then when you observe the leak take a crash dump using kdump on the router
> >> and then use crash to dump all the slab objects for the sk_head_cache.
> >> Then look for any that have an old time stamp and check what value they
> >> have in the integer field. Then the netfilter function who set that unique value
> >> likely triggered the leak somehow.
> >>
> >
> > I wrote some systemtap scripts that do parts of what you suggest, and at
> > least for the timestamp there was no need to add a new field to struct
> > sk_buff, I just reuse skb->timestamp, as it is only used when we use a
> > packet sniffer. Here it is for reference, but it needs some tapsets I
> > wrote, so I'll publish this git repo in git.kernel.org, perhaps it can
> > be useful in this case as a starting point. Find another unused field
> > (hint: I know that at least 4 bytes on 64 bits is present as a hole) and
> > you're done, no need to rebuild the kernel :)
> >
> > http://git.kernel.org/?p=linux/kernel/git/acme/nettaps.git
> >
> > - Arnaldo
> >
> Thanks to everyone for the given ideas.
> I am not kernel guru so writing patch is difficult. This is a production
> server and it is quite difficult to debug (only at night)
> I removed some iptables exotics - recent , ulog, string , but no effect.
> Since we can reach OOM most of the memory is going to be filled with the
> leak, and we are thinking to try to dump and analyze it.
You could perhaps use crash to look for leaked packets and then
see if you can see a pattern, as in what types of packets they are.
Still I expect without modifying the kernel to add some more
netfilter tracing it will be difficult to diagnose this.
I suppose it would be possible to write a suitable systemtap script
to also trace this without modifying the kernel, although it will be
probably not easy and more complicated than just changing the C code.
-Andi
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-02-01 13:16 ` Eric Dumazet
@ 2008-02-01 15:38 ` Ivan Dichev
2008-02-04 14:54 ` Ivan Dichev
0 siblings, 1 reply; 14+ messages in thread
From: Ivan Dichev @ 2008-02-01 15:38 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Arnaldo Carvalho de Melo, Andi Kleen, netdev
> I understand you dont want to tell us exact firewall rules you have.
>
> Maybe you could post at least following infos :
>
> # cat /proc/slabinfo
> # lsmod
>
I have changed slab with slub.
firewall # cat /sys/slab/kmalloc-2048/alloc_calls
1 add_sect_attrs+0x57/0x120 age=20565254 pid=1115
1 __vmalloc_area_node+0x5d/0xf3 age=586962 pid=31548
6 journal_init_revoke+0xe0/0x241 age=20562046/20563010/20566655
pid=1-1510
6 journal_init_revoke+0x1c7/0x241 age=20562046/20563010/20566655
pid=1-1510
6 journal_init_inode+0x7d/0x123 age=20562046/20563010/20566655
pid=1-1510
1 tty_write+0xe8/0x1bc age=685813 pid=21217
1 input_allocate_device+0x10/0x6c age=20566814 pid=38
2 reqsk_queue_alloc+0x58/0xa8 age=5679409/8932742/12186076
pid=1135-2500
5 alloc_netdev_mq+0x3c/0x9a age=20555675/20561345/20565141
pid=1233-3041
1 neigh_hash_alloc+0x14/0x2c age=20527064 pid=0
11 neigh_sysctl_register+0x24/0x1fd age=20555673/20560511/20567588
pid=1-3041
6 qdisc_alloc+0x1b/0x70 age=585308/585373/585539 pid=31629-31818
26 qdisc_get_rtab+0x5e/0xa2 age=585498/585519/585535 pid=31630-31664
11 devinet_sysctl_register+0x21/0xd7 age=20555673/20560511/20567588
pid=1-3041
1 netlink_proto_init+0x2a/0x123 age=20567604 pid=1
3106 boomerang_rx+0x30d/0x40d [3c59x] age=1/9966140/20553543 pid=0-22895
3 bm_init+0x28/0xa3 [ts_bm] age=586918/586918/586918 pid=31548
firewall # cat /sys/slab/kmalloc-2048/free_calls
109 <not-available> age=20515711 pid=0
1 rcu_do_batch+0x1a/0x71 age=608627 pid=31627
19 kobject_uevent_env+0x3c5/0x3da age=20578755/20585359/20590686
pid=1-3041
3055 kfree_skbmem+0x8/0x68 age=3/9973654/20579063 pid=0-31818
1 pskb_expand_head+0xe3/0x13d age=15946314 pid=695
1 huft_build+0x498/0x4a2 age=20590653 pid=1
3 htb_destroy_class+0x5e/0x12e [sch_htb] age=608630/608630/608630
pid=31625
6 htb_destroy_class+0x69/0x12e [sch_htb] age=608630/608630/608630
pid=31625
fire-sp # lsmod
Module Size Used by
xt_string 2272 3
ipt_ULOG 8004 5
ipt_recent 9360 40
softdog 5792 0
act_mirred 5060 4
cls_u32 7972 4
sch_sfq 5760 56
cls_fw 5408 54
sch_htb 16192 6
ifb 5156 0
aes 28512 0
des 15456 0
md5 3936 0
sha256 9248 0
ipsec 312176 2
nf_nat_tftp 1792 0
nf_conntrack_tftp 5144 1 nf_nat_tftp
nf_nat_pptp 3712 0
nf_conntrack_pptp 6688 1 nf_nat_pptp
nf_conntrack_proto_gre 4992 1 nf_conntrack_pptp
nf_nat_proto_gre 2724 1 nf_nat_pptp
nf_nat_ftp 3236 0
nf_conntrack_ftp 8680 1 nf_nat_ftp
ipt_tos 1536 492
xt_mark 1760 12
xt_DSCP 2336 13
ipt_NETMAP 1888 6
xt_TCPMSS 4064 4
xt_length 1856 3
ts_bm 2304 3
xt_mac 1792 28
ipt_REJECT 4416 74
xt_limit 2496 153
xt_state 2368 2948
iptable_nat 7172 1
nf_nat 18412 6
nf_nat_tftp,nf_nat_pptp,nf_nat_proto_gre,nf_nat_ftp,ipt_NETMAP,iptable_nat
nf_conntrack_ipv4 16744 2950 iptable_nat
nf_conntrack 57412 11
nf_nat_tftp,nf_conntrack_tftp,nf_nat_pptp,nf_conntrack_pptp,nf_conntrack_proto_gre,nf_nat_ftp,nf_conntrack_ftp,xt_state,iptable_nat,nf_nat,nf_conntrack_ipv4
nfnetlink 5784 3 nf_nat,nf_conntrack_ipv4,nf_conntrack
xt_MARK 2176 28
iptable_mangle 2720 1
xt_multiport 3232 2325
iptable_filter 2852 1
ip_tables 12824 3 iptable_nat,iptable_mangle,iptable_filter
binfmt_misc 10792 1
dm_mirror 20608 0
dm_mod 53280 1 dm_mirror
i2c_viapro 8252 0
i2c_core 23376 1 i2c_viapro
3c59x 41132 0
mii 5280 1 3c59x
floppy 53892 0
pata_via 11684 0
libata 110188 1 pata_via
scsi_mod 137996 1 libata
raid1 20448 7
firewall#
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-02-01 15:38 ` Ivan Dichev
@ 2008-02-04 14:54 ` Ivan Dichev
2008-02-04 15:55 ` Andi Kleen
0 siblings, 1 reply; 14+ messages in thread
From: Ivan Dichev @ 2008-02-04 14:54 UTC (permalink / raw)
Cc: Eric Dumazet, Arnaldo Carvalho de Melo, Andi Kleen, netdev
Hi,
Thanks again for your help...
Here's more debug info (long email !):
We installed crash, compiled a kernel with debug symbols, dumped all the
allocated size-2048 slabs, waited some time, and re-dumped them. Then we
compared both dumps: we assumed that slab dumps which were not modified
could be considered as leaks (see end of mail for commands we used).
>From the 3c59x driver source, boomerang_rx() has only a "struct
net_device" as argument, so the idea was to take a dumped slab that
looked like a leak, remove any offset, and "apply" a struct net_device
to the dumped slab data. Then we could have a clue on which interface
the problem happens, and dig deeper to find - say - the packet ip header.
Result: none of the "leaked" slabs seem to match struct net_device.
"Valid" slabs are found in the dumps though, but not in the leaked one.
Example:
a valid slab hexdump:
c0 88 56 63 c5 56 41 d8 00 00 00 00 00 00 00 00 |..Vc.VA.........|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
65 74 68 32 00 00 00 00 00 00 00 00 00 00 00 00 |eth2............|
00 00 00 00 28 6f 37 c0 00 00 00 00 00 00 00 00 |....(o7.........|
00 20 82 d0 0c 00 00 00 08 00 00 00 06 00 00 00 |. ..............|
[...]
There seems to be a 32 byts slab header, then struct net_device which
begins with a 16 bytes interface name (here eth2). If we "apply" a
struct net_device, we can also find the irq, in this case 12, which is
the correct value on our machine.
Now, with a "leaked" slab:
c0 88 56 63 c5 56 41 d8 5a 5a 5a 5a 5a 5a 5a 5a |..Vc.VA.ZZZZZZZZ|
5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 00 0a 5e 5d cf 88 |ZZZZZZZZZZ..^]..|
00 11 20 da 91 01 08 00 45 20 05 d8 5e de 00 00 |.. .....E ..^...|
38 32 00 00 d5 5b 97 c2 55 5f 42 32 61 14 cd 3b |82...[..U_B2a..;|
[...]
Nothing that looks like a struct net_device. All the dumped leaked slab
look the same until "45 20 05 d8" (the ascii 'E' on the 3rd line).
It took quite a bit of time to dig that far (for non kernel experts like
us!), and we're now out of ideas. Is it possible to have something else
than a struct net_device for boomerang_rx() ? Any idea ? Writing a patch
with the ideas mentioned before in this thread is above my level...
Things are also quite weird since we don't seem to have this problem on
two other similar machines (one 100% identical with less traffic, and
another one with the same distro/soft but different hardware).
Also note that all the machines use the out-of-tree openswan ipsec.ko
module, but it doesn't seem to be the problem since the other 2 machines
don't leak, and we didn't find any correlation between plotted IKE
packets / VPN traffic against slab leaks.
Another weird fact is that the leak increase is somewhat correlated to
network traffic - it grows slowly - but there are huge steps (ie. 1000+
more slabs in a few minutes) that are not bound to any traffic peak; if
needed, I can upload the graphs somewhere.
Some other things that might be useful: when we switched from 2.6.16.x
to 2.6.23.14, we began to have "eth1: Too much work in interrupt, status
8401" messages. Playing with 3c59x driver option "max_interrupt_work"
didn't help.
When doing tests with a kernel with slub instead of slab and misc
changes - I think we tried tickless, but not sure - we also got the
following oopses (once):
swapper: page allocation failure. order:1, mode:0x4020
[<c0136e1a>] __alloc_pages+0x295/0x2a4
[<c0149a77>] allocate_slab+0x59/0x96
[<c0149b05>] new_slab+0x32/0x126
[<c014982a>] alloc_debug_processing+0xcf/0x10c
[<c0149eee>] __slab_alloc+0x80/0xdb
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<c014ada5>] __kmalloc_track_caller+0x44/0x91
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<c021ee94>] __alloc_skb+0x46/0xef
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<d0886b0d>] boomerang_interrupt+0x11e/0x324 [3c59x]
[<c011295b>] profile_tick+0x38/0x52
[<c0131c31>] handle_IRQ_event+0x1a/0x3f
[<c0132782>] handle_level_irq+0x0/0x85
[<c01327d2>] handle_level_irq+0x50/0x85
[<c010356e>] do_IRQ+0x7d/0xa3
[<c010cc7e>] update_stats_wait_end+0xa5/0xc2
[<c0102547>] common_interrupt+0x23/0x28
[<c010083c>] default_idle+0x0/0x39
[<c0100863>] default_idle+0x27/0x39
[<c01008bc>] cpu_idle+0x44/0x60
[<c031c7b5>] start_kernel+0x1cd/0x1d1
[<c031c33f>] unknown_bootoption+0x0/0x139
swapper: page allocation failure. order:1, mode:0x4020
[<c0136e1a>] __alloc_pages+0x295/0x2a4
[<c0149a77>] allocate_slab+0x59/0x96
[<c0149b05>] new_slab+0x32/0x126
[<c014982a>] alloc_debug_processing+0xcf/0x10c
[<c0149eee>] __slab_alloc+0x80/0xdb
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<c014ada5>] __kmalloc_track_caller+0x44/0x91
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<c021ee94>] __alloc_skb+0x46/0xef
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<d0886b0d>] boomerang_interrupt+0x11e/0x324 [3c59x]
[<c0131c31>] handle_IRQ_event+0x1a/0x3f
[<c01327d2>] handle_level_irq+0x50/0x85
[<c0103579>] do_IRQ+0x88/0xa3
[<c0102547>] common_interrupt+0x23/0x28
[<c0131c2d>] handle_IRQ_event+0x16/0x3f
[<c01327d2>] handle_level_irq+0x50/0x85
[<c0103579>] do_IRQ+0x88/0xa3
[<c0102547>] common_interrupt+0x23/0x28
[<c0131c2d>] handle_IRQ_event+0x16/0x3f
[<c01327d2>] handle_level_irq+0x50/0x85
[<c0103579>] do_IRQ+0x88/0xa3
[<c0149a77>] allocate_slab+0x59/0x96
[<c0102547>] common_interrupt+0x23/0x28
[<c014adb7>] __kmalloc_track_caller+0x56/0x91
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<c021ee94>] __alloc_skb+0x46/0xef
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<d0886b0d>] boomerang_interrupt+0x11e/0x324 [3c59x]
[<c011295b>] profile_tick+0x38/0x52
[<c0131c31>] handle_IRQ_event+0x1a/0x3f
[<c0132782>] handle_level_irq+0x0/0x85
[<c01327d2>] handle_level_irq+0x50/0x85
[<c010356e>] do_IRQ+0x7d/0xa3
[<c010cc7e>] update_stats_wait_end+0xa5/0xc2
[<c0102547>] common_interrupt+0x23/0x28
[<c010083c>] default_idle+0x0/0x39
[<c0100863>] default_idle+0x27/0x39
[<c01008bc>] cpu_idle+0x44/0x60
[<c031c7b5>] start_kernel+0x1cd/0x1d1
[<c031c33f>] unknown_bootoption+0x0/0x139
swapper: page allocation failure. order:1, mode:0x4020
[<c0136e1a>] __alloc_pages+0x295/0x2a4
[<c0149a77>] allocate_slab+0x59/0x96
[<c0149b05>] new_slab+0x32/0x126
[<c014982a>] alloc_debug_processing+0xcf/0x10c
[<c0149eee>] __slab_alloc+0x80/0xdb
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<c014ada5>] __kmalloc_track_caller+0x44/0x91
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<c021ee94>] __alloc_skb+0x46/0xef
[<d088731f>] boomerang_rx+0x30d/0x40d [3c59x]
[<d0886b0d>] boomerang_interrupt+0x11e/0x324 [3c59x]
[<c011295b>] profile_tick+0x38/0x52
[<c0131c31>] handle_IRQ_event+0x1a/0x3f
[<c0132782>] handle_level_irq+0x0/0x85
[<c01327d2>] handle_level_irq+0x50/0x85
[<c010356e>] do_IRQ+0x7d/0xa3
[<c010cc7e>] update_stats_wait_end+0xa5/0xc2
[<c0102547>] common_interrupt+0x23/0x28
[<c010083c>] default_idle+0x0/0x39
[<c0100863>] default_idle+0x27/0x39
[<c01008bc>] cpu_idle+0x44/0x60
[<c031c7b5>] start_kernel+0x1cd/0x1d1
[<c031c33f>] unknown_bootoption+0x0/0x139
(I'm wondering what's the unknown_bootoption; ours are "ro root=/dev/md1
nousb panic=10").
Slab dump commands:
# in crash:
kmem -S size-2048 > kmem_S
# in another shell:
awk -f extract_slabs.awk kmem_S > dump_cmds
# in crash:
source dump_cmds
then redo a dump later and find the same slabs; these should be leaks:
for i in $(ls memdump/); do
[ -f memdump1/$i ] || continue
cmp -s memdump/$i memdump1/$i || continue
echo $i
done > same_slabs
extract_slabs.awk:
/ *\[[a-f0-9]+\] */ {
beg_hex = strtonum(gensub(/ *\[([a-f0-9]+)\] */, "0x\\1", "g",
$1));
printf("dump memory /home/slab_analysis/memdump/memdump-%x 0x%x
0x%x\n", beg_hex, beg_hex, beg_hex + 2072);
}
Ivan Dichev
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-02-04 14:54 ` Ivan Dichev
@ 2008-02-04 15:55 ` Andi Kleen
2008-02-05 9:04 ` Ivan Mitev
0 siblings, 1 reply; 14+ messages in thread
From: Andi Kleen @ 2008-02-04 15:55 UTC (permalink / raw)
To: Ivan Dichev; +Cc: Eric Dumazet, Arnaldo Carvalho de Melo, Andi Kleen, netdev
> Nothing that looks like a struct net_device. All the dumped leaked slab
> look the same until "45 20 05 d8" (the ascii 'E' on the 3rd line).
45 ... is often the start of an IP header (IPv4, 5*4=20 bytes length)
You could dump them to a file (e.g. using a sial script) and then
look at them with tcpdump or similar to get an idea what kinds
of packets they are.
-Andi
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Slow OOM in netif_RX function
2008-02-04 15:55 ` Andi Kleen
@ 2008-02-05 9:04 ` Ivan Mitev
0 siblings, 0 replies; 14+ messages in thread
From: Ivan Mitev @ 2008-02-05 9:04 UTC (permalink / raw)
To: Andi Kleen; +Cc: Ivan Dichev, Eric Dumazet, Arnaldo Carvalho de Melo, netdev
[(the other) Ivan took a few days holidays, so I'm replacing him for
this issue.]
Andi, you spotted it, it was really the start of an IP header, and it
shows up that these are ESP packets for a quite complicated VPN tunnel
we have (re-routing packets from an office to another, with some NAT on
top of that). So openswan/ipsec.ko seems to be the problem here, I will
file a bug report there. Meanwhile we'll try to set up manual keying and
decrypt the encrypted payload to gather more details on the packets.
My apologies, the issue seems to be with an out-of-tree module, but we
really didn't think the problem was there (there's no correlation
between the leak increase and vpn/ike traffic). But it was interesting
to understand slabs, learn how to setup/use crash, and analyze memory
bits :)
Thanks again to all the people who helped !
Ivan Mitev
Andi Kleen wrote:
>> Nothing that looks like a struct net_device. All the dumped leaked slab
>> look the same until "45 20 05 d8" (the ascii 'E' on the 3rd line).
>
> 45 ... is often the start of an IP header (IPv4, 5*4=20 bytes length)
>
> You could dump them to a file (e.g. using a sial script) and then
> look at them with tcpdump or similar to get an idea what kinds
> of packets they are.
>
> -Andi
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2008-02-05 9:32 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-24 17:28 Slow OOM in netif_RX function Ivan Dichev
2008-01-24 18:29 ` Stephen Hemminger
2008-01-24 19:12 ` Eric Dumazet
2008-01-24 21:18 ` Ivan H. Dichev
2008-01-24 21:51 ` Francois Romieu
2008-01-25 13:21 ` Andi Kleen
2008-01-25 14:12 ` Arnaldo Carvalho de Melo
2008-02-01 12:51 ` Ivan Dichev
2008-02-01 13:16 ` Eric Dumazet
2008-02-01 15:38 ` Ivan Dichev
2008-02-04 14:54 ` Ivan Dichev
2008-02-04 15:55 ` Andi Kleen
2008-02-05 9:04 ` Ivan Mitev
2008-02-01 14:29 ` Andi Kleen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).