Ubuntu Linuxのスレッドトラブル

現在位置のナビ

トップコンピュータの国雑記帳 → Ubuntu Linuxのスレッドトラブル

説明

Webmasterは、Ubuntu Linux 上で音楽再生アプリを自作して使っています。 この音楽再生アプリに関して発生したトラブルについて、備忘録も兼ねて記録しておきます。

トラブル1 SSEレジスタはCPUに何組?

発生時期

SSE命令を使った再生アプリを書いた2016年にはUbuntu 16.04で発生していて、2019年現在Ubuntu18.04でも継続中です。

状況

Webmasterの最新再生アプリは、CDDAをオーバーサンプリングしてFIRで高域をカットしています。 FIRはx86 CPUのSSEやCortex AのNEON命令を使用しています。 FIRの計算で左右のチャネルを並行実行しようとしてスレッドを分割したのですが、1つのプロセスではSSEレジスタやNEON用のレジスタ一組をスレッド間で取り合っていることを確認しました。 CPUにSSEレジスタが1個しか無いのか、コアの数だけあるのにLinuxのプロセスで1個しか使えないのか未確認です。

対策

FIRの左右チャネルを別プロセスに分けてしまえば、並行実行できるはずですが、未確認です。

トラブル2 CPUクロックが遅くなる

発生時期

2017年ころUbuntu 16.04で発生していて、2019年秋頃Ubuntu18.04でもとに戻りました。

状況

SSE命令をガンガン使うアプリケーションを実行しているのに、CPUクロックが勝手にフルスピードの1/3位に遅くなってしまい、再生が間に合いません。

対策

一般のプライオリティで実行していたアプリケーションのプライオリティを上げました。 root権限でリアルタイムプライオリティの最高を指定した所、普通のプライオリティでは再生できない環境でも普通に再生できました。

トラブル3 マルチコアCPUでの1プロセスで二つ以上のスレッドが並行実行できない

発生時期

2018年ころUbuntu 18.04で発生していて、2019年現在Ubuntu18.04で継続しています。

状況

今まで普通に再生できていた 1.6GHz N3150 CPUで、音楽再生時のSSE演算とALSA出力の並行実行ができなくなり、間に合わなくなってしまいました。

対策

思いつきません。 カーネルのソースコードを読まないといけないかなぁ?

トラブル4 I/Oの余計なブロッキング?

発生時期

2019年秋ころUbuntu 18.04で発生していて、2019年12月現在継続しています。

状況

トラブル3が発生した後でも普通に再生できていた Core i3 CPUで、SSE演算とALSA出力の並列実行が間に合わなくなってしまいました。 音楽再生アプリをリアルタイムプライオリティで動かすと、ネットワークのソケット通信まで止まってしまいます。

情報を求む

どれも、致命的なトラブルなのですが、皆さん困っていないのでしょうか。 CPUの性能をしゃぶりつくそうとすると、ちょっとした環境の変化でアプリケーションが動かなくなってしまいます。

2019年12月8日 初出


back button 雑記帳へ