이 커널 경고는 주의가 필요한 주요 문제입니까?

이 커널 경고는 주의가 필요한 주요 문제입니까?

Linux 기반 Thecus N12000 NAS는 최근 dmesg로그에서 이 메시지를 발견했습니다.

[2014-05-21 11:34:56]  ------------[ cut here ]------------
[2014-05-21 11:34:56]  WARNING: at net/ipv4/tcp_input.c:2966 tcp_ack+0xd88/0x1a1c()
[2014-05-21 11:34:56]  Hardware name: IRONLAKE & IBEX PEAK Chipset
[2014-05-21 11:34:56]  Modules linked in: nfsd lockd nfs_acl auth_rpcgss sunrpc iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi ntfs ses enclosure usblp usb_storage usbhid xhci_hcd uhci_hcd ehci_hcd usbcore sg be2net tehuti igb ixgbe dca e1000e drm_kms_helper drm video backlight sata_sil24 mpt2sas ahci libahci ata_piix
[2014-05-21 11:34:56]  Pid: 1710, comm: smbd Not tainted 2.6.38 #1
[2014-05-21 11:34:56]  Call Trace:
[2014-05-21 11:34:56]   [<ffffffff8103118e>] ? warn_slowpath_common+0x78/0x8c
[2014-05-21 11:34:56]   [<ffffffff81391339>] ? tcp_ack+0xd88/0x1a1c
[2014-05-21 11:34:56]   [<ffffffff81392ca5>] ? tcp_rcv_established+0x780/0x9d1
[2014-05-21 11:34:56]   [<ffffffff81392d42>] ? tcp_rcv_established+0x81d/0x9d1
[2014-05-21 11:34:56]   [<ffffffff8139a52d>] ? tcp_v4_do_rcv+0x1a1/0x377
[2014-05-21 11:34:56]   [<ffffffff8139a52d>] ? tcp_v4_do_rcv+0x1a1/0x377
[2014-05-21 11:34:56]   [<ffffffff81413149>] ? _raw_spin_lock_bh+0x9/0x1f
[2014-05-21 11:34:56]   [<ffffffff8135374c>] ? release_sock+0x19/0x103
[2014-05-21 11:34:56]   [<ffffffff81413149>] ? _raw_spin_lock_bh+0x9/0x1f
[2014-05-21 11:34:56]   [<ffffffff813537cd>] ? release_sock+0x9a/0x103
[2014-05-21 11:34:56]   [<ffffffff8138a89a>] ? tcp_recvmsg+0x48f/0x9f5
[2014-05-21 11:34:56]   [<ffffffff8138c24d>] ? tcp_sendpage+0x595/0x5a7
[2014-05-21 11:34:56]   [<ffffffff81350048>] ? sock_sendmsg+0xc3/0xe0
[2014-05-21 11:34:56]   [<ffffffff813a5f60>] ? inet_recvmsg+0x64/0x75
[2014-05-21 11:34:56]   [<ffffffff8134f84e>] ? sock_sendpage+0x36/0x3d
[2014-05-21 11:34:56]   [<ffffffff8134f7aa>] ? sock_aio_read+0x126/0x13a
[2014-05-21 11:34:56]   [<ffffffff810a0f4d>] ? do_sync_read+0xb1/0xea
[2014-05-21 11:34:56]   [<ffffffff810a1921>] ? vfs_read+0xbd/0x12d
[2014-05-21 11:34:56]   [<ffffffff810a1a47>] ? sys_read+0x45/0x6e
[2014-05-21 11:34:56]   [<ffffffff810027fb>] ? system_call_fastpath+0x16/0x1b
[2014-05-21 11:34:56]  ---[ end trace cdaf61db513385a1 ]---

이 오류 메시지를 조사하는 동안 나는 방금다음 정보를 찾았습니다:

if (WARN_ON(!tp->sacked_out && tp->fackets_out))
    tp->fackets_out = 0;

oops.kernel.org 웹사이트에서도 비슷한 오류를 발견했습니다.경고: net/ipv4/tcp_input.c:2966 tcp_ack+0xdbe/0x1f80에 위치.

이는 무시할 수 있는 문제가 없는 경고인가요, 아니면 제가 걱정해야 하는 다른 문제의 증상인가요?

이거 가전제품 아닌가요?

노트:이것은 Linux 장치이지만 실제로는 CentOS를 기반으로 합니다. 때때로 CentOS 5에 구축된 바이너리를 컴퓨터에 설치했는데 문제 없이 실행되었습니다. 예를 들어 도구 df.

$ uname -a
Linux tank 2.6.38 #1 SMP Fri Oct 26 14:35:05 CST 2012 x86_64 GNU/Linux

인용하다

답변1

WARN에 대한 귀하의 의견은 정확합니다. 이 코드는 업스트림 커널 태그에서 나옵니다 v2.6.38.

net/ipv4/tcp_input.c
2953 static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked, int flag)
2954 {
...
2964         if (WARN_ON(!tp->sacked_out && tp->fackets_out))
2965                 tp->fackets_out = 0;
2966 

이것은 논의된다여기다음을 커밋하여 수정했습니다.

commit 5b35e1e6e9ca651e6b291c96d1106043c9af314a
Author: Neal Cardwell <[email protected]>
Date:   Sat Jan 28 17:29:46 2012 +0000

    tcp: fix tcp_trim_head() to adjust segment count with skb MSS

해당 날짜에 커널 3.3에 수정 사항이 적용되었습니다. 이 수정 사항은 Red Hat의 EL5 소스(5.11 커널 2.6.18-398 확인)로 백포트되지 않았으므로 NAS가 CentOS 5를 기반으로 하는 경우 이 문제는 아직 해결되지 않았습니다.

2.6.38EL5 커널은 출시된 적이 없으므로 Red Hat 또는 CentOS 커널이 아니라는 점은 주목할 가치가 있습니다 . 귀하의 NAS 공급업체가 최신 업스트림 커널을 채택하고 일부 패치를 적용하여 SAN의 펌웨어 이미지에서 사용할 수 있게 만들었다고 가정합니다.

이 문제를 해결하려면 커널 3.3 이상의 소스 코드를 구하고 SAN 공급업체의 패치를 적용한 후 자체 커널을 구축해야 할 수도 있습니다. 이 문제가 해결되었는지 확인하는 것이 좋습니다.ELRepo의 커널-lt3.2.63-1.el5, 3.3에 매우 가깝습니다. 그렇지 않은 경우 ELRepo의 .config문서와 make oldconfig새로운 커널 소스를 사용하여 최소한의 질문에 답할 수 있습니다.

그러고 보면, 크다는 것은 어쨌든 큰 문제가 아니다. 이는 WARNTCP의 계정 오류로 인해 발생합니다. 패치를 올바르게 이해하면 TCP 분할 오프로드를 사용하여 데이터를 전송하는 함수가 잘못된 가정을 하게 되어 어떤 경우에는 계산된 세그먼트 수가 가비지이게 됩니다. WARN세그먼트 수 중 하나를 0으로 반환하여 이 문제를 해결하세요.생각하다최악의 시나리오는 패킷 손실이 발생하여 필요한 것보다 조금 더 많은 데이터가 재전송되는 경우입니다.

TSO를 비활성화하면 이 문제를 해결할 수 있습니다. TSO를 사용하고 있는지 확인하십시오.

ethtool -g ethX

그렇다면 다음을 사용하여 비활성화하십시오.

ethtool -G ethX tso off

이것이 작동하고 네트워크가 일반 CentOS init 스크립트(및 친구)에 의해 제어되는 경우 다음과 같이 인터페이스가 시작될 때마다 변경 사항을 적용하도록 /etc/init.d/network작성할 수 있습니다 ./sbin/ifup-local

#!/bin/bash
if [ $1 == "ethX" ]]; then
  /sbin/ethtool -G $1 tso off
fi

ethX네트워크 인터페이스의 이름으로 바꾸십시오 .

답변2

이는 네트워크 코드 경로의 버그이며 하드웨어 문제 자체와는 아무런 관련이 없습니다. 기기 자체에 대한 고민이 많으실 것 같은데요. ethtool -S를 사용하여 문제를 일으킬 수 있는 네트워크 패킷 손실을 확인하고 만일의 경우에 다른 네트워크 장치를 확인할 수 있습니다.

네트워크 문제가 있거나 일부 TCP 트래픽으로 인해 커널이 혼동될 수 있습니다.

관련 정보