タグ: M720q

  • ミニPC「Lenovo M720q tiny」を購入してサーバに運用して苦労した話

    また、ミニPCを買ってしまった・・・。

    ヤフオクで購入したのは、Lenovo M720q tiny(Core i3 8300T、メモリ8GB)です。現在、メインPCとして使用している、NECのMK21と同じ構成で、色と型番や内蔵しているCPU、メモリ、SSDなどが異なるだけのものです。中身はそっくりそのままです。

    メインPCの方は、先日書いたブログ記事にあるように、

    CPUをアップグレードしていましたので、もともと入っていたCore i5が余っている状態です。これを今回購入したM720q tinyのCPUと換装して、ProxmoxのLXCとVMを運用することにしました。

    色が違うだけの同一機種ですでに換装作業していたので特に悩むところはありません。苦労するのも、ヒートシンクを止めているネジが固いことくらいです。

    とっとと交換して、手持ちのSSDを入れてProxmox VEをインストール。いつものようにUSBメモリに入れたVentoy経由です。Ventoyを考えた人マジ天才。

    すでに存在する別のPC(minisforum UN100P、DELL Wyse5070)のProxmoxとクラスター化して、いくつかのサーバをマイグレートしても問題なし。素晴らしく安定稼働しています。

    そう、ここまでは安定稼働していました。

    暗雲立ち込めたのは、メモリを8GB→16GBに増設してからです。

    なぜか、メモリ増設後のM720q tinyが、数分ごとにネット接続が切れてしまいます。Proxmoxの管理画面で繋がらなくなり、ただ実機の電源は落ちてはいません。この時点で電力不足の可能性はなさそうでした。

    追加したメモリも別PCで使っていたもので、Core i5 8500Tの必要とするDDR4−2666です。もしかしたら最初の8GBのものとの相性の可能性もあるかと思って、DELL Wyse5070に入れていたメモリ(PC-3200)の8GB✕2と入れ替えてみると、Wyse5070の方は全く落ちずに、やはりM720qの方だけがネットが途切れます。

    これは何だ?と悩み、AIに聞いてみました。GeminiでもChatGPTでも回答は同じで、

    Lenovo M720q(および同世代のTinyシリーズ)に搭載されているオンボードLANは Intel I219-V 等が多く、Linuxでは e1000e というドライバが使われますが、メモリを増設してデュアルチャネルになったり、アドレス空間が広がったりすると、特定の条件下で通信がハングアップする既知の不具合が世界中で報告されています。

    とのこと。なんじゃそら。そんな知らんわー。

    色々コマンドラインでの対策も教えてもらいましたが、面倒なので解決策の一つに挙げられていた、別のネットワークカードを使うという方法を試します。M720qにはPCIeスロットがあり、以前にNEC MK21をルータとして使っていたときのIntelチップのLANカードも余っています。しかしライザーカードが無いので、発注しようかと思いましたが、とりあえず、同じく余っていたUSB-LANアダプタを使ってみました。

    しかしこのUSB-LAN経由でもM720qのネット寸断は発生します。ずっと途切れているわけではなく、

    数分〜十数分接続→数十秒〜数分間遮断→数分〜十数分接続→数十秒〜数分間遮断

    が続く感じです。ということで、別の原因があるだろうということで再びGeminiとChatGPTに確認すると、Geminiの方で結論を出してきやがりました。

    USB-LANアダプタでの検証、誠にありがとうございます。この検証結果は非常に大きな手掛かりになります。USB-LANアダプタ(通信経路もドライバもオンボードLANとは全く別物)を使っても「同じように通信が途切れる」ということは、オンボードLAN(e1000e)のバグではありません。
    この事実から導き出される結論は、「ネットワークだけが切れているのではなく、M720qのシステム(Proxmox自体)が完全にフリーズ(ハングアップ)している」可能性が極めて高いということです。
    なぜ16GB(8GB×2枚)の時だけフリーズするのか?
    PCは、同じ容量のメモリを2枚挿す(8GB×2枚)と「デュアルチャネル」という高速モードで動作します。
    M720qに搭載されているCore i5-8500T(第8世代CPU)の場合、デュアルチャネルになると内蔵GPU(UHD Graphics 630)やメモリコントローラーの動作が高速化・複雑化します。
    実は、Linuxカーネル(Proxmox)のCPU/GPU省電力機能と、この第8世代CPUのデュアルチャネル時の動作には相性問題(バグ)があり、システム全体が突然フリーズするという症状が世界中で報告されています。
    これを解消するために、以下の手順でCPUとGPUの深い省電力機能をオフにしてみてください。

    いや、先にその可能性も言ってくれよ。

    対策:省電力機能(C-State / DC)の無効化
    M720qのProxmoxコンソールを開き、GRUBの設定ファイルを編集します。
    
    nano /etc/default/grub
    
    GRUB_CMDLINE_LINUX_DEFAULT="quiet" という行を探し、その括弧の中に以下のようにパラメータを追記します。
    
    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_idle.max_cstate=1 i915.enable_dc=0"
    
    解説:
    intel_idle.max_cstate=1 : CPUが深すぎる省電力状態(スリープ)に入るのを防ぎ、フリーズを回避します。
    i915.enable_dc=0 : 内蔵GPUのディープスリープ機能を無効にします。
    
    保存(Ctrl + O → Enter → Ctrl + X)したら、設定を反映して再起動します。

    ホンマかいな、と思いつつ、試してみたらこれで確かにネット接続が途切れなくなりました。

    ホンマか? ホンマに大丈夫か?と疑いつつ、数時間経っても大丈夫だったので、改めて既存のProxmoxクラスタにM720qを参加させて、LXCとVMをマイグレートしていきました。

    このブログのWordpressサーバのLXCもマイグレートして動作しています。ネットも途切れません。

    結局、先の対処方法が正解だったのでしょう。ただ、「Lenovo M720qがメモリ2枚刺し時にネット接続が途切れる」ということは、検索しても見当たらないんですけどねえ・・・。