隠居日録

隠居日録

2016年(世にいう平成28年)、発作的に会社を辞め、隠居生活に入る。日々を読書と散歩に費やす

NanoPi NEO2+NAS kit (Linux 4.14)は安定稼働させられなかった

armbianのインストールで盛大にはまる - 隠居日録の11月6日の追記にも書いたが、kernelのページング問題が結局解決できなかった。こんな感じでsyslogにエラーが吐き出される。

Nov 13 16:10:23 localhost kernel: [   34.896785] Unable to handle kernel paging request at virtual address 20f2080020f208
Nov 13 16:10:23 localhost kernel: [   34.904787] Mem abort info:
Nov 13 16:10:23 localhost kernel: [   34.907704]   Exception class = DABT (current EL), IL = 32 bits
Nov 13 16:10:23 localhost kernel: [   34.913688]   SET = 0, FnV = 0
Nov 13 16:10:23 localhost kernel: [   34.916781]   EA = 0, S1PTW = 0
Nov 13 16:10:23 localhost kernel: [   34.919958] Data abort info:
Nov 13 16:10:23 localhost kernel: [   34.922881]   ISV = 0, ISS = 0x00000004
Nov 13 16:10:23 localhost kernel: [   34.926758]   CM = 0, WnR = 0
Nov 13 16:10:23 localhost kernel: [   34.929767] [0020f2080020f208] address between user and kernel address ranges
Nov 13 16:10:23 localhost kernel: [   34.936957] Internal error: Oops: 96000004 [#1] SMP
Nov 13 16:10:23 localhost kernel: [   34.941856] Modules linked in: sun4i_gpadc_iio iio_hwmon industrialio uas sunxi musb_hdrc [last unloaded: snd_timer]
Nov 13 16:10:23 localhost kernel: [   34.952436] CPU: 2 PID: 871 Comm: tinyproxy Not tainted 4.14.78-sunxi64 #416
Nov 13 16:10:23 localhost kernel: [   34.959492] Hardware name: FriendlyARM NanoPi NEO 2 (DT)
Nov 13 16:10:23 localhost kernel: [   34.964817] task: ffff800036a98d00 task.stack: ffff00000a0e8000
Nov 13 16:10:23 localhost kernel: [   34.970768] PC is at skb_release_data+0xc8/0x158
Nov 13 16:10:23 localhost kernel: [   34.975406] LR is at skb_release_all+0x24/0x30
Nov 13 16:10:23 localhost kernel: [   34.979862] pc : [<ffff000008803bb0>] lr : [<ffff000008802fc4>] pstate: 40000145
Nov 13 16:10:23 localhost kernel: [   34.987266] sp : ffff00000a0ebb50
Nov 13 16:10:23 localhost kernel: [   34.990589] x29: ffff00000a0ebb50 x28: ffff8000359aa000 
Nov 13 16:10:23 localhost kernel: [   34.995918] x27: ffff800034bd6900 x26: ffff8000359aa0c8 
Nov 13 16:10:23 localhost kernel: [   35.001248] x25: 0000000000000000 x24: 00000000000004bb 
Nov 13 16:10:23 localhost kernel: [   35.006578] x23: 0000000000000001 x22: ffff8000359aa51c 
Nov 13 16:10:23 localhost kernel: [   35.011914] x21: ffff800034bd6900 x20: ffff800029888d00 
Nov 13 16:10:23 localhost kernel: [   35.017248] x19: 0000000000000000 x18: 0000000000000000 
Nov 13 16:10:23 localhost kernel: [   35.022611] x17: 0000ffffb0a1fd80 x16: ffff0000081f6a18 
Nov 13 16:10:23 localhost kernel: [   35.027982] x15: 000004c01ac4da60 x14: 588cfd0b2f8b2bb5 
Nov 13 16:10:23 localhost kernel: [   35.033322] x13: d5d6dad28e347e88 x12: 9f236569c15bb044 
Nov 13 16:10:23 localhost kernel: [   35.038652] x11: f81be145f8ba51df x10: 0000000000000263 
Nov 13 16:10:23 localhost kernel: [   35.043982] x9 : 2fda4fb583a7da69 x8 : e3d7beb187cce6a6 
Nov 13 16:10:23 localhost kernel: [   35.049313] x7 : f8d177f7ea163fe0 x6 : 0000000009155c3e 
Nov 13 16:10:23 localhost kernel: [   35.054677] x5 : 00ffffffffffffff x4 : ffff8000359aa0e0 
Nov 13 16:10:23 localhost kernel: [   35.060048] x3 : 0000000000004280 x2 : 0000000000000700 
Nov 13 16:10:23 localhost kernel: [   35.065419] x1 : 0000000000000020 x0 : 0020f2080020f208 
Nov 13 16:10:23 localhost kernel: [   35.070799] Process tinyproxy (pid: 871, stack limit = 0xffff00000a0e8000)
Nov 13 16:10:23 localhost kernel: [   35.077712] Call trace:
Nov 13 16:10:23 localhost kernel: [   35.080221] Exception stack(0xffff00000a0eba10 to 0xffff00000a0ebb50)
Nov 13 16:10:23 localhost kernel: [   35.086717] ba00:                                   0020f2080020f208 0000000000000020
Nov 13 16:10:23 localhost kernel: [   35.094608] ba20: 0000000000000700 0000000000004280 ffff8000359aa0e0 00ffffffffffffff
Nov 13 16:10:23 localhost kernel: [   35.102463] ba40: 0000000009155c3e f8d177f7ea163fe0 e3d7beb187cce6a6 2fda4fb583a7da69
Nov 13 16:10:23 localhost kernel: [   35.110353] ba60: 0000000000000263 f81be145f8ba51df 9f236569c15bb044 d5d6dad28e347e88
Nov 13 16:10:23 localhost kernel: [   35.118241] ba80: 588cfd0b2f8b2bb5 000004c01ac4da60 ffff0000081f6a18 0000ffffb0a1fd80
Nov 13 16:10:23 localhost kernel: [   35.126141] baa0: 0000000000000000 0000000000000000 ffff800029888d00 ffff800034bd6900
Nov 13 16:10:23 localhost kernel: [   35.134035] bac0: ffff8000359aa51c 0000000000000001 00000000000004bb 0000000000000000
Nov 13 16:10:23 localhost kernel: [   35.141929] bae0: ffff8000359aa0c8 ffff800034bd6900 ffff8000359aa000 ffff00000a0ebb50
Nov 13 16:10:23 localhost kernel: [   35.149832] bb00: ffff000008802fc4 ffff00000a0ebb50 ffff000008803bb0 0000000040000145
Nov 13 16:10:23 localhost kernel: [   35.157721] bb20: ffff80003471bc00 ffff800034bd6900 0000ffffffffffff ffff000008801cf4
Nov 13 16:10:23 localhost kernel: [   35.165615] bb40: ffff00000a0ebb50 ffff000008803bb0
Nov 13 16:10:23 localhost kernel: [   35.170559] [<ffff000008803bb0>] skb_release_data+0xc8/0x158
Nov 13 16:10:23 localhost kernel: [   35.176296] [<ffff000008802fc4>] skb_release_all+0x24/0x30
Nov 13 16:10:23 localhost kernel: [   35.181843] [<ffff000008802fe4>] __kfree_skb+0x14/0x28
Nov 13 16:10:23 localhost kernel: [   35.187048] [<ffff0000088788a0>] tcp_recvmsg+0x630/0x810
Nov 13 16:10:23 localhost kernel: [   35.192390] [<ffff0000088a3d94>] inet_recvmsg+0x4c/0xe8
Nov 13 16:10:23 localhost kernel: [   35.197692] [<ffff0000087f6d90>] sock_recvmsg+0x48/0x58
Nov 13 16:10:23 localhost kernel: [   35.202985] [<ffff0000087f6e28>] sock_read_iter+0x88/0xd0
Nov 13 16:10:23 localhost kernel: [   35.208448] [<ffff0000081f3ec4>] new_sync_read+0xbc/0x108
Nov 13 16:10:23 localhost kernel: [   35.213925] [<ffff0000081f63f4>] __vfs_read+0x2c/0x38
Nov 13 16:10:23 localhost kernel: [   35.219041] [<ffff0000081f6490>] vfs_read+0x90/0x168
Nov 13 16:10:23 localhost kernel: [   35.224072] [<ffff0000081f6a78>] SyS_read+0x60/0xd8
Nov 13 16:10:23 localhost kernel: [   35.229002] Exception stack(0xffff00000a0ebec0 to 0xffff00000a0ec000)
Nov 13 16:10:23 localhost kernel: [   35.235505] bec0: 0000000000000008 0000aaaadcbe3730 0000000000000800 0000000000000001
Nov 13 16:10:23 localhost kernel: [   35.243362] bee0: 0000aaaadcbe3730 0000000000000000 0000ffffcdb4b2cc 0000aaaadcbe3f30
Nov 13 16:10:23 localhost kernel: [   35.251213] bf00: 000000000000003f 003b9aca00000000 000000005bea78df 000000000003ece5
Nov 13 16:10:23 localhost kernel: [   35.259064] bf20: 0000000000000018 00000003e8000000 000f50a1178acb56 000004c01ac4da60
Nov 13 16:10:23 localhost kernel: [   35.266914] bf40: 0000000000000000 0000ffffb0a1fd80 0000000000000000 0000aaaadcbe2ff0
Nov 13 16:10:23 localhost kernel: [   35.274799] bf60: 0000000000000000 0000000000000008 0000aaaadcbe3730 0000aaaaabb71000
Nov 13 16:10:23 localhost kernel: [   35.282651] bf80: 0000ffffcdb4b498 0000000000000001 0000000000000007 0000000000000008
Nov 13 16:10:23 localhost kernel: [   35.290502] bfa0: 0000ffffcdb4b528 0000ffffcdb4b3c0 0000aaaaabb54130 0000ffffcdb4b3c0
Nov 13 16:10:23 localhost kernel: [   35.298352] bfc0: 0000ffffb0a1fd68 0000000060000000 0000000000000008 000000000000003f
Nov 13 16:10:23 localhost kernel: [   35.306202] bfe0: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
Nov 13 16:10:23 localhost kernel: [   35.314063] [<ffff000008083318>] __sys_trace_return+0x0/0x4
Nov 13 16:10:23 localhost kernel: [   35.319661] Code: 6b13003f 54fffdcc f9400680 b40000a0 (f9400013) 
Nov 13 16:10:23 localhost kernel: [   35.325774] ---[ end trace 59dd9cbe42058e9b ]---

今実験のためにPCのブラウザでNanoPi NEO2上のtinyproxyを使うように設定している。たまに、DNSであるunboundがエラーになることもあるが、だいたいtinyproxyがエラーになる。あと、aptitudeでパッケージをインストールしようとしたときにも発生した。いろいろ設定を見直してみたり、変更したのだが、どうやってもこの問題が解決できなかった。ネットで検索しても同様の問題は見当たらないので、使っているボードの問題だろうかと思い、秋月で別なNanoPi NEO2を購入して試してみたが、そちらでも問題は発生するので、ボードの問題ではないと思う。

エラーが発生するのは必ずイーサでパケットを受信したときなので、そのあたりに何か問題があると思われる。実際ffmpegコンパイルでは落ちなかったし、stressコマンドで負荷をかけても、それでエラーは発生しなかったので、イーサに関係する問題だろうと想像しているのだが、さっぱり見当がつかない。これが一週間に一度ぐらいならまだしも、一時間もあればこの問題は発生するので、実稼働させるのには程遠いレベルだ。それにしても、検索しても、同様の問題が見当たらないのは本当に不思議だ。smbでも、大きなファイルを書き込めば問題が発生するような気がするが、まだ試していない。

2018/11/19追記
昨日ふと思いついて、NanoPi neo2のイーサの接続先を100BASEのハブにしてみたら、すこぶる快適になった。そこで、ethtoolで接続の設定を変えて100Mで接続するようにして、1000BASEのルータのハブに接続してみたのだが、それだとやはり問題が発生する。なので、物理層の問題なのだろうと妄想している。

Nov 18 07:52:21 localhost kernel: [  736.711107] dwmac-sun8i 1c30000.ethernet eth0: len 1667 larger than size (1536)
Nov 18 07:52:21 localhost kernel: [  736.720572] dwmac-sun8i 1c30000.ethernet eth0: len 1667 larger than size (1536)
Nov 18 07:52:23 localhost kernel: [  738.526400] TCP: eth0: Driver has suspect GRO implementation, TCP performance may be compromised.

のような出力はきっとデータが化けているのだろう。どちらもパケットのサイズが予想より大きいと表示されるようだから。きっと盛大にデータ化けが発生して、つじつまが合わなくなってメモリのアクセスに問題が発生しているか、メモリ上のデータが破壊されているのではなかろうか?

とりあえず回避策は見つかったものの、何とも釈然としない。

それと、OSにこだわらないならばFreeBSDという選択もあるし、実際FreeBSDに移行してしまった。