Hyper-Threading Techology版
Litronプロジェクト


           はじめの一歩


これ、linuxを動作させた時のtopの内容です。
xeonのデュアルパソコン、CPUは2つなのに4つに見えてます。
6:46pm up 8 min, 3 users, load average: 4.08, 2.79, 1.26
72 processes: 67 sleeping, 5 running, 0 zombie, 0 stopped
CPU states: 397.2% user, 2.4% system, 0.0% nice, 0.0% idle
CPU0 states: 100.0% user, 0.0% system, 0.0% nice, 0.0% idle
CPU1 states: 99.3% user, 0.2% system, 0.0% nice, 0.0% idle
CPU2 states: 98.1% user, 1.3% system, 0.0% nice, 0.0% idle
CPU3 states: 99.3% user, 0.2% system, 0.0% nice, 0.0% idle
Mem: 1032460K av, 137528K used, 894932K free, 0K shrd, 3988K buff
Swap: 0K av, 0K used, 0K free 67480K cached

動かすプログラムによっては、CPUstatesもなんと、397.2%と表示されます。
なんか得した?ような感じですよね。
で、なにを思ったかと言うと、もともとx86系はデュアルならLitronを移植しても良いかなと思っていたのですが、これならシングルCPUのパソコンでもLitronを動作させられると考えたのでした。
とりあえず、Hyper-Threading Techologyをサポートしているpentium4を入手しなくては。
2005年
4月20日
Hyper-Threading Techology完全対応版です!?大きな変更点としてはiTRONをkernel_threadとして動作させるようにしました。
Ver1.0rev001litron2_050420.tgz
一応、iTRONが一つのCPUを占有して動きます。ただ、Xの唯我独尊的アプリ(サイコロがぐるぐる回るICOみたいな)を動かすとlinuxが極端に重くなります。linuxのスケジューリングをいじると色々問題がでそうなのと、webブラウザーみたいな大きなアプリでも問題なく動くので良し!としています。ちなみにシングルCPUでも動きます。
これまでのようにフックをかけて略奪式に比べて、遅くなるのでは!と思いましたが結果的には差異がなかったので、sh等の組み込みCPUもこの方式に変更してみます。遅いCPUだと違いがでるはず?
2005年
2月4日
Hyper-Threading Techology対応が不安定というか、あまりメリットがでない!それに、2.8Gのpen4はさすがに速い!十分使用可能範囲かと?
でベータ版(litron2_050204.tgz)の公開です。
内容はlinuxとjsp1.4へのパッチとlinuxとiTRONの通信サンプルプログラムです。
ですから、kernelバージョン2.6??のlinuxとjsp-1.4が別途必要です。
jsp-1.4はトパーズプロジェクト(http://www.toppers.jp)よりダウンロード可能です。


性能についての詳細は始まったばかりですか、linuxデバイスの割り込みとハンドラーでの割り込み禁止を抑えていないのですが、linuxも2.6になってマルチCPU対応が進んでいるおかげ?で、かなり速いみたいです?互換性維持にはこのままの方が良いのかも知れません。

サンプルプログラムのスナップショット

モジュールロード時のメッセージ(X環境下では表示されないのでdmesgで確認)
uITRON Extensions Loaded (http://www.goodsoft.jp)
ver 0.9 rev 001

JSP Kernel Release 1.4 (patchlevel = 0) for LiTron_hst (Feb 3 2005, 23:14:01)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
Toyohashi Univ. of Technology, JAPAN


インタフェースプログラムの起動
[root@localhost if_litron]# ./if_litron
iTRON interface Start
System logging task is started on port 1.
iTRON! Genki!!
ng (002). |
task2 is running (003). +
task1 is running (003). |
task3 is running (003). *
task1 is running (004). |
task3 is running (004). *
task2 is running (004). +
task3 is running (005). *
task2 is running (005). +
task1 is running (005). |
.
.
.
.
task1 is running (071). |
task2 is running (071). +
task3 is running (071). *
task3 is running (072). *
task2 is running (072). +
task1 is running (072). |
task2 is running (073). +
task1 is running (073). |
task3 is running (073). *
task3 is running (074). *
task1 is running (074). |
task2 is running (074). +
1
task2 is running (075). +
task1 is running (075). |
task3 is running (075). *
s
task3 is running (076). *
task1 is running (076). |
task2 is running (076). +
task2 is running (077). +
#1#slp_tsk()
task3 is running (077). *
task3 is running (078). *
task2 is running (078). +
task2 is running (079). +
task3 is running (079). *
task3 is running (080). *
task2 is running (080). +
2
s
task2 is running (081). +
task3 is running (081). *
task3 is running (082). *
task2 is running (082). +
#2#slp_tsk()
task3 is running (083). *
task3 is running (084). *
task3 is running (085). *
task3 is running (086). *
task3 is running (087). *
3
task3 is running (088). *
s
task3 is running (089). *
task3 is running (090). *
#3#slp_tsk()