Linux skb alloc失败了

时间:2015-05-20 02:57:51

标签: c linux kernel

当我与客户保持联系时,我会收到每个客户的报告。一段时间后,程序崩溃,我收到一条错误消息:

  

skb分配失败。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

您提供的信息太不完整,无法预测任何内容。但是,网络套接字的主要问题仍然在于缓冲区分配。 skbuffs是Linux内核处理网络数据包的缓冲区。当您与客户端保持连接并接收数据包时,内部数据包将由网卡接收,填充到skbuff并传递到网络堆栈。

查看alloc_skb()返回的内容。阅读手册页以了解如果alloc_skb()返回NULL,则没有内存可以分配您想要的块。这可能是分配失败的情况之一。

顺便说一句,希望你在中断的基础上开车。 alloc_skb()的手册页说,

  

只能使用GFP_ATOMIC的gfp_mask从中断分配缓冲区。

无论内存情况如何,交付数据的最佳选择是中断处理程序。可以在加载驱动程序时创建skb列表。并且,在中断期间,执行alloc_skb,如果失败,您可以始终使用一个预分配的缓冲区(如果有的话)来保存数据。对于下一个中断事件,请补充缓冲区。