tizen.moe

tizen.moe

USB赤外線リモコンアドバンスをLinux (ubuntu) で使うメモ (3)

f:id:moguriso:20170704001344p:plain

blog.tizen.moe

取りあえずコマンドで各種リモコンデータを操作出来るようにしたのでWebから操作出来るようにI/Fを追加した。

sgykfjsm.github.io
qiita.com

概ね↑のコードを参照させていただいた。(と言うか、ほぼそのまま、、、orz)

github.com

↑のURLを適当にでっち上げたhtmlから呼ぶだけ

いろいろ問題があるので後でなんとかしたいけど必要最低限やりたいことは出来るようになった。部屋のリアルタイムストリーミングはffserver/ffmpegで適当にWebカメラの内容をswfに変換して出してるだけ。*1この角度なら扇風機とエアコンがついてるかもよく分かる、と。(ゴテゴテだけどちょっとIoTっぽくなった)

エアコンの温度と扇風機の強さは今は変更出来ません(そこも学習させればいいだけではありますが・・・もう良いメンドイ、眠い。。。。)

*1:気が向いたら別にPostするかも

USB赤外線リモコンアドバンスをLinux (ubuntu) で使うメモ (2)

blog.tizen.moe

ちょっとした問題点の調査と解決。

NEC LEDシーリングライトの信号が学習できなかった

うんうん唸って結局こちらを拝見し

qiita.com

どうもミソは↓の一文だった模様。

リモコンから出力される波形は38kHz(=約26us)なので,これよりも小さいサンプリング周波数でサンプリングします.

github.com

こちらのコマンドを拝借していたので、取得時の周波数はデフォルトで38kHzになっていてこれだとチト早すぎる模様。

$ ./bto_advanced_USBIR_cmd -r -f 36000

とか指定して取れば良いはず。が、

$ ./bto_advanced_USBIR_cmd -r -f 36000
エラー: -fオプションは-dオプションまたは-rオプションを指定した場合のみ使用できます。

と、怒られる。どうもコード読むと条件判定間違ってる臭いので↓のパッチを当てる

diff --git bto_advanced_USBIR_cmd.c bto_advanced_USBIR_cmd.c
index 955b295..223c975 100644
--- bto_advanced_USBIR_cmd.c
+++ bto_advanced_USBIR_cmd.c
@@ -424,7 +424,7 @@ else if(((!type_flag)&&(code_flag||Code_flag))||(((!code_flag)&&(!Code_flag))&&t
   fprintf(stderr, "エラー: -tオプションと-cまたは-Cオプションとは必ずセットで指定して下さい。\n");
   exit(1);
 }
-else if(((!data_flag)||(!read_flag))&&freq_flag)
+else if(((!data_flag)&&(!read_flag))&&freq_flag)
 {
   fprintf(stderr, "エラー: -fオプションは-dオプションまたは-rオプションを指定した場合のみ使用できます。\n");
   exit(1);

これで取ったものと -f ツケないで取ったものだと2byte目とか明らかに違う。が、 -t NEC -c `cat xxx.txt` だとNG(反応しない)

$ ./bto_advanced_USBIR_cmd -d `cat xxx.txt`

なら反応した。ナンデダロ~ォ♪*1ナンデダロ~♪

*1:乂(゚д゚ ;)≡(; ゚д゚)乂

mdadmのraid5が超遅い件 (補足)

blog.tizen.moe

どうも認識が違った模様なので補足。

5TB程 cp中にPCがストールしていて反応しなくなった。再起動もNG

実はmd2のjournal errorが根本だった模様。書い直したHDDでも同様の現象が再現した。"/etc/fstab"からmd2のmount設定を外して、"/etc/mdadm/mdadm.conf"からも外し、更にUSB接続を外す(or HDDケースの電源をOFF)。

この状態で再起動しないと起動もできなかった、、、(試してないけど元のHitachi HDDでも同じ構成にしたら起動する気がする)

むぅ。

$ sudo umount /dev/md2
$ sudo fsck -f -y /dev/md2

してみたけど、果たして。。

mdadmのraid5が超遅い件 (おまけ)

いろいろ死んだ

5TB程cpして寝て起きたらPCがストールしていて反応しなくなっておりました、と。出社する前の1時間程度で再起動したり→OS起動しなくなってるからrescueで復旧試みたり→それでもNGなのでOS入れ直したり(この辺で時間切れ)しても結局直らず。多分、適当に転がってたHDDを繋いだのが悪かったのでしょう。。。

もともとアクセス時に「ふおーん、ガガガガリガリ…」とか不穏な音がしてたのでやや怪しいかと思っていたらjournal errorを吐いててfsckで復活してくれなかった。(grubの領域も死んだらしく正常起動しなくなった)

もともとだいぶ前に外して放置してたやつなので仕方ない。。。

心機一転書い直した。Black買おうとしたら在庫切れと言われたのでBlue。店員さんに「性能はカナリ落ちますが~」と言われたものの別にHDDの性能に依存するような大した事しないし。*1

*1:build用の一時ファイルその他はSSDに置くのでアンマリ問題ない

mdadmのraid5が超遅い件 (2)

blog.tizen.moe

続き。

tl;dr

こいつでesataポートマルチプライヤ接続してたのが悪かったっぽい。USB3.0でつなぐようにしたらスルッと改善した。少なくともHDD関連のコマンドエラーでiowaitが急浮上、dmesgにエラー履きまくるということは無くなった。このドーターカードが悪いのか、HDDケースのesataが悪いのか、それらどちらかを制御するドライバが悪いのか。(ドライバ的エラーではなさそうなのでesataカードが一番の被疑と予想)

Ubuntu 14.04 => 16.04 に更新

kernelが3.14で、最近出た

の制御コマンドに対応してないんじゃね?

という被疑の元更新をがんばる。通常、LTSリリースだと

$ sudo do-release-upgrade -d

で、アップデート出来るのですが、そもそも14.04で長らく放置していたり色々いじくり回していたのでNGになって更新できず。

bootable usbを作って更新しようとしたらこれまた失敗して起動しなくなる。長い戦いの始まりであった。

  1. 既存パティションに上書きインストール → grubの更新に失敗 → 起動しなくなった
  2. 転がってたHDDを取りあえず増設してそちらにインストール → 認識、インストールとも問題ないのに起動しない
  3. 14.04で使ってたHDDを引っこ抜いて再度試す → 変わらず
  4. usbメモリからUEFIで起動 → 新規インストール → 起動した

一応この手順でUbuntu16.04が起動するようになった

mdadmインストー

新規インストール状態だとmdadmがないのでインストール。パティションをいじってなければ既存のmdXは自動的に認識する。この時、apt upgradeと同時にやってしまったのも悪かった。また起動しなくなった。

またまたOSを入れ直し、apt upgrade → apt autoremove → 再起動 → apt install mdadm。一応起動は問題なくなった。既存のmdXパティションも認識する。でも、8TBのHDDはdmesgでFLASHエラーとかDMAエラーとかいろいろ。

うんざりする → 突然閃いてうまくいく

個別にHDDを認識させてIOしても再現しないのでHDDのせいでは無いと予想。しかしながら、複数回RAID5してmkfs.ext4するとiowaitで負荷が増大して、smartctl -aで確認すると1台しか出てなかったコマンド系のエラーが他のHDDにも波及し始める。このエラーでぐぐると大体は「HDDの故障」と判断するものばかりなのですが、流石に4台買って4台とも不良とも考えにくいと思う。

ここまでで3:30amくらい。冒頭記載の通りesataを疑って接続を替えたらあっさり改善した。

おまけに、esataの方が早いと思ってわざわざやっていたのに、resync速度も

ESATA : 40MB/s
USB3 : 60MB/s

明らかにUSBの方が早かった。うぐぅ。。。

以前は以下のように明らかにどっかで刺さってたのが
https://cdn-ak.f.st-hatena.com/images/fotolife/m/moguriso/20170622/20170622033456.png

コンスタントに100MB/s出るようになった。
f:id:moguriso:20170627035822p:plain

苦労の大半が無駄でした、と。。。

寝る、、、 (只今 3:58 am)

mdadmのraid5が超遅い件 (1)

概要

blog.tizen.moe

作り直した。遅い。さらに作り直した。resync終わった。コピーする。遅い。
何とかしたい。

CPU負荷か、io負荷か

top - 16:22:27 up 19:40, 4 users, load average: 3.61, 3.65, 3.68
Tasks: 248 total, 1 running, 247 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.0 us, 0.0 sy, 0.0 ni, 99.0 id, 1.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 32822800 total, 32590444 used, 232356 free, 2047512 buffers
KiB Swap: 33428476 total, 0 used, 33428476 free. 29190996 cached Mem

topコマンドはCPUのロードアベレージが360%オーバー。でもCPU自体は別に分回ってない。
sarコマンドを入れて確認する。

interu.hatenablog.com

$ sudo apt-get install sysstat
$ sudo vi /etc/default/sysstat

↑のファイルの

  9 ENABLED="true"

↑L9をfalse => trueにする

$ sudo vi /etc/cron.d/sysstat

↑の

  6 5-55/1 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1

6 5-55/10を6 5-55/1にして1分毎にログを取らせる(後で止めよう)

$ sudo service crond restart
$ sudo service sysstat restart

一応再起動。

$ sar -u
161901秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
162001秒     all      0.08      0.00      0.24      2.62      0.00     97.06
162102秒     all      0.06      0.00      0.30      3.64      0.00     96.00
162201秒     all      0.06      0.00      0.16      2.16      0.00     97.62
162301秒     all      0.08      0.00      0.23      2.13      0.00     97.57
162401秒     all      0.08      0.00      0.13      1.09      0.00     98.70
162501秒     all      0.11      0.00      0.16      2.17      0.00     97.56
162601秒     all      0.08      0.00      0.09      2.32      0.00     97.51
平均値:      all      0.08      0.00      0.19      2.30      0.00     97.43

明らかにiowaitの負荷が超高いのは確か。。。

kernelの問題?

dmesgを見たら6GのSATAなのに1.5Gにデグレートして動いた上、コマンド処理でNGになってた。

   1 [61327.982286] ata12.00: status: { DRDY }
   2 [61327.982293] ata12: hard resetting link
   3 [61328.302747] ata12: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
   4 [61328.305959] ata12.00: configured for UDMA/33
   5 [61328.306468] ata12.00: device reported invalid CHS sector 0
   6 [61328.306479] ata12: EH complete
   7 [61370.994341] ata12.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
   8 [61370.994345] ata12.00: failed command: WRITE DMA EXT
   9 [61370.994359] ata12.00: cmd 35/00:00:00:b8:4a/00:04:16:00:00/e0 tag 4 dma 524288 out
  10 [61370.994360] ata12.00: status: { DRDY }
  11 [61370.994362] ata12: hard resetting link
  12 [61371.314854] ata12: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
  13 [61371.318456] ata12.00: configured for UDMA/33
  14 [61371.318965] ata12.00: device reported invalid CHS sector 0
  15 [61371.318968] ata12: EH complete
  16 [61405.040271] ata12.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
  17 [61405.040275] ata12.00: failed command: WRITE DMA EXT
  18 [61405.040279] ata12.00: cmd 35/00:80:80:8b:4d/00:00:16:00:00/e0 tag 5 dma 65536 out
  19 [61405.040281] ata12.00: status: { DRDY }
  20 [61405.040284] ata12: hard resetting link
  21 [61405.360811] ata12: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
  22 [61405.364866] ata12.00: configured for UDMA/33
  23 [61405.365370] ata12.00: device reported invalid CHS sector 0
  24 [61405.365381] ata12: EH complete
  25 [61450.159797] ata12.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
  26 [61450.159809] ata12.00: failed command: WRITE DMA EXT
  27 [61450.159820] ata12.00: cmd 35/00:40:c0:27:5b/00:00:16:00:00/e0 tag 13 dma 32768 out
  28 [61450.159826] ata12.00: status: { DRDY }
  29 [61450.159834] ata12: hard resetting link
  30 [61450.480286] ata12: SATA link up 1.5 Gbps (SStatus 113 SControl 310)

該当の ata12 だけでmkfsして20GB程ddしてみたら200MB/s位は普通にエラー無しで処理するっぽいので恐らくHDD故障では無いと思うのですが・・・。Ubuntu 14.04でやってるのでkernel versionが古いことに何らか原因があるのかも知れない。。。


・・・続く?

兼業作家、八乙女累は充実している

「なれるSE」作者さんだったので買った、所謂作者買い。同じように2~3冊買ったけど初見で読み進められたのはこれだけでした、と。。。

とても良かった。おすすめ。