sysctl netdev\_max\_backlog设置内核的积压队列中允许的最大数据包数限制.

有没有办法检查当前队列大小(即,在给定时间当前队列中有多少数据包)?

从字面上看,来自net / core / dev.c:netif\_rx()的queue-> input\_pkt\_queue.qlen的值:

  queue = &__get_cpu_var(softnet_data);

  __get_cpu_var(netdev_rx_stat).total++;
  if (queue->input_pkt_queue.qlen <= netdev_max_backlog) {
    if (queue->input_pkt_queue.qlen) {
enqueue:
      __skb_queue_tail(&queue->input_pkt_queue, skb);
      local_irq_restore(flags);
      return NET_RX_SUCCESS;
    }

解决方法:


probe kernel.statement("enqueue_to_backlog@net/core/dev.c:3536") {
    printf("probe enqueue_to_backlog on cpu: %d qlen: %d\n", $sd->cpu, $qlen + 1)
}

systemtap探针.行号(3536)取决于内核版本,寻找此行

if (qlen <= netdev_max_backlog && !skb_flow_limit(skb, qlen)) {

标签: linux, networking

相关文章推荐

添加新评论,含*的栏目为必填