備忘録:Random freeze Problem (Ubuntu 16.04 on Intel Joule 570x)

まず,結論:

Intel のBay TrailとUbuntu 16.04の組み合わせはc-state bugがあり,ランダムにフリーズする.解決策はgrubに intel_idle.max_cstate=1 を追記する.

ことの成り行き:

Intel Joule 570x とGPSモジュールで遊んでいた時のこと

「あれ,gpsd動かしてるとフリーズするぞ?しかもシステムが完全に」

被害者:Intel Joule 570x(Ubuntu 16.04)

被害状況:起動後1分から20分程度の間にシステムが完全にフリーズ.フリーズまでの時間はランダム.gpsdを止めるとフリーズしない.

状況から考えてまず浮かび上がった容疑者は4人

容疑者1:gpsd

容疑者2: シリアルポートの設定(stty)

容疑者3: gpsmonなどのgpsdクライアント

容疑者4: FTDIのUSB-Serial変換ドライバ

捜査:

まずgpsmonを使っているとフリーズしたので,gpsmonを停止してみるがフリーズする.また,gpsdを起動するとフリーズする傾向があったため,そこのバグを疑う.とりあえずgpsdを止めてみるとフリーズしない.そこで,gpsdを止めた状態でscreenコマンドでシリアル通信内容を確認してみる.すると止まる.

シリアルポートの設定かとおもい,sttyでいろいろ設定を変えてみるものの,シリアル通信内容を見ていると止まる.しかも止まるまでの時間はランダム.突然完全にフリーズするので,ソフトウエアな感じがしない.もっとローレベルな部分で止まってる気がする.そこで,FTDIのドライバを疑うも,海外の同じような症状の人が「ドライバビルドして入れ直したけどダメ」と書き込んでいたので,行き止まる.

手がかりとしては,突然がっつり止まることから非常にローレベルな部分,なんならハードウエアの障害くさい.

で,いろいろ調べてみて最初に書いたBay TrailアーキテクチャとUbuntu 16.04(kernel 4.2以降)のバグにたどり着く.Intel Joule 570xはBay Trailらしく,もろにこの問題にぶち当たった.

Bay TrailはAtomとかCeleron, Pentiumみたいな最近の省電力なチップで採用されているので,Ubuntuを使う人も多い気がします.謎のフリーズに悩まされている人は,c-stateを1にするという対策で解決する可能性があります.

残存課題:

しかし,なぜusb-serialを使うと起きるのかは謎のまま.また,これでC-stateがmaxで1になると,たとえばjouleで最低でも0.5A程度,常に消費することになる(c-stateが通常範囲だと,0.1Aとか必要に応じて電力消費を抑えられる).

組み込み&ubuntuでこの問題は結構痛い.

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s