ユーザランドからのUARTの高速化について
メモ書きです。
ユーザランドから/proc/ttySxなどのシリアル(UART等)通信においてread/writeを早める方法について
デバイスは200Hz程度での動作保証なのに、linuxのユーザランドから/dev/ttyS0で高頻度でreadするベンチを作ってみたら、
毎秒50Hz程度しか呼べなかったので高速化してみた。
P.S
ドライバで割り込みなど用いればスマートに解決するかもしれませんがw−。
スループットを上げる
UARTで通信のデータ量が欲しくて、デバイス間で対応しているbundrateを挙げれるならbundrateを上げれる
ただbundrateを上げると通信経路(接続しているワイヤー)などがシビアになって通信できなくなる可能性もあります。
ご利用は計画的にw−
今回は通信データ量が少ないので、bundrateを変更しても変化しなかったです。
レスポンス応答を早める
こちはらデータ量は少ないが、毎秒の呼び出し回数を多くしたい(100Hz-1000Hz)場合に有用です*1
方法としてはカーネルの再ビルドが必要ですが、CONFIG_HZが100/250Hzなどだった場合に、1000Hzに上げてカーネルを置き換える
CONFIG_HZ=1000に変更して、毎秒200Hz以上に改善しました。よかったよかったw<
P.S.
kernelのタイマ割り込み頻度を上げるので、もちろんいろいろ影響する可能性はあります。
すぐさま影響しそうなのは消費電力とか上がりそう。
UARTのみでなく、他の通信(I2C/SPI等)も改善する可能性があります。
*1:今回のケースですねw−