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.38
EL5 커널은 출시된 적이 없으므로 Red Hat 또는 CentOS 커널이 아니라는 점은 주목할 가치가 있습니다 . 귀하의 NAS 공급업체가 최신 업스트림 커널을 채택하고 일부 패치를 적용하여 SAN의 펌웨어 이미지에서 사용할 수 있게 만들었다고 가정합니다.
이 문제를 해결하려면 커널 3.3 이상의 소스 코드를 구하고 SAN 공급업체의 패치를 적용한 후 자체 커널을 구축해야 할 수도 있습니다. 이 문제가 해결되었는지 확인하는 것이 좋습니다.ELRepo의 커널-lt즉 3.2.63-1.el5
, 3.3에 매우 가깝습니다. 그렇지 않은 경우 ELRepo의 .config
문서와 make oldconfig
새로운 커널 소스를 사용하여 최소한의 질문에 답할 수 있습니다.
그러고 보면, 크다는 것은 어쨌든 큰 문제가 아니다. 이는 WARN
TCP의 계정 오류로 인해 발생합니다. 패치를 올바르게 이해하면 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 트래픽으로 인해 커널이 혼동될 수 있습니다.