無い袖は振れない

CPUのリソースについて注意喚起です。

CPUリソースというのは、最初から上限が決まっています。

それ以上の仕事はできないのです。

ですので、史上最高の最適スケジューラを実装しようが、プロセスの粒度を最適化しようが、足りないCPUパワーではできないものはできないのです。

また、ボトルネックがあると、切ないくらい性能が出ません。

代表的なのはバスボトルネックです。

メインメモリは、ノースブリッジでバーストバーストと言って、瞬間最大風速だけを競っています。

組み込みで肝心なのはIOです。

ハード屋さんに問い合わせるまでも無く、メモリマップトIOは脱力して脱糞してしまうくらい情けないパフォーマンスしか出ません。なぜなら、回路設計の手抜きのために不必要なウェイトが積み重なっているからです。

すると、ちょっと仕事が混んできてIOアクセス比率が増加すると途端に全体性能が落込みます。

そして、性能に無頓着なドライバ書き屋さんが書いたIOアクセスには、OSの待ち合わせ機構を完全に無視したポーリングウェイトがそこかしこにあるのです。

そんなことも露知らず、せっせとソフトウェアだけの”全体最適化”にいそしんでいる様は、あまりに哀れで同情を禁じえません。

さて、ボトルネックを考慮した実効CPUパワーが、例えば10万命令/秒だとすれば、10秒間平均では100万命令以上の仕事はできないということなのです。

例えば、エンコード処理とファイル格納処理を同時に行う場合、

エンコード 60万命令

ファイル格納 50万命令

こういう設計は破綻するということです。で、そんな数値はソフトウェアの実装前に決まっていることなのです。

え?そんなの聞いて無いって?聞いてなかったら、こっちから問いあわせしないとだめに決まってるじゃないですか。

仕様としては、こんな単純な話であるわけはなく、ある一定量の処理、例えば3分間のエンコード~ファイル格納処理において、最大処理命令数と、平均、それから総命令数。それを謳わないで設計なんてできるわけないじゃん。