Linux Kernelの208.5日でリブート等する問題
- 3月
- 24
リンク: http://kenichiokuyama.blogspot.com/2011/12/schedclock-overflow-after-2085-days-in.html
"okkyの銀河制圧奇譚"で、Linux Kernelのスケジューラで使用するTSCをns単位に換算するルーチンでの掛け算オーバーフローが起因して、リブートする等の問題があこることの議論がされている。
しかし、問題が発現していない環境もあって、現象の理解が必要だとおもわれた。ブログ上でのコメントでのレポートでは、656日稼動しているという。
こういうときには、実験的に確認するのがよい。
#include<stdio.h>
static __inline__ unsigned long long rdtsc(void)
{
unsigned hi, lo;
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
}
int main(){
unsigned long long tick, result;
unsigned long cyc2ns;
unsigned long cpu_khz = 1770000;
tick = rdtsc();
printf("TSC= %llu\n", tick);
cyc2ns = 1000000 * (1 << 10) / cpu_khz;
printf("SC= %lu\n", cyc2ns);
result = tick * cyc2ns;
printf("MULT= %llu\n", result);
printf("OVER> %llu\n", ((unsigned long long) 1 << 63));
}
問題のルーティンに似せた、簡単なこのようなコードを書き、現象の理解をおこなう。 とりあえず、実行したカーネルは、Ubnutu 11.10上の3.0.0である。
miurahr@miurahr-note:~$ ./a.out
TSC= 18906864235232
SC= 578
MULT= 10928167527964096
OVER> 9223372036854775808
miurahr@miurahr-note:~$ ./a.out
TSC= 27953476532
SC= 578
MULT= 16157109435496
OVER> 9223372036854775808
この2つの実行の間に、実行されたPCはスリープされている。このスリープのresume時にcyc2ns_offsetを再計算するようにされている。
上記の結果からわかるように、64bitのTSCが折り返されて、小さくなっている。もちろん、複数CPUが搭載されているので、かならずしも同じCPUの値を取得しているとは言えないのである。とはいえ、得られたヒントは大きい。
static inline unsigned long long __cycles_2_ns(unsigned long long cyc)
{
int cpu = smp_processor_id();
unsigned long long ns = per_cpu(cyc2ns_offset, cpu);
ns += cyc * per_cpu(cyc2ns, cpu) >> CYC2NS_SCALE_FACTOR;
return ns;
}
当該コード部分に注目すると、cyc2ns_offsetに、指摘されている演算結果を加えるコードになっている。どういうことか。ノートPCはとくに、使用時間をのばすために、CPUの速度を動的に変更して、負荷の低い時のCPUの消費電力を削減する。こうすると、当然クロックあたりの時間幅、上記のcyc2nsの値が変化する。したがって、単純にTSCの累計にそのときのCPU速度で計算してしまっては、正しい値になりえない。
で、どうするかというと、CPU速度の変化をさせる時に、そのときの経過時刻をns単位でもとめ、変更後の速度で計算した場合の累計時刻との差分をcyc2ns_offsetに格納する。
nixnote (旧Nevernote)の検索機能
- 12月
- 24
2010年の上半期に、国際化の開発に協力したOSSプロダクトのひとつに、nixnote(旧Nevernote)がある。
Evernoteクライアントのフリークローンで、Java+QtJambiで書かれていて、プラットホームニュートラルに動く。そのころ、KoedoLUGで、紹介したことがあった。しばらく、開発協力した本人も使うことが無くなっていたのだが、KoedoLUG主宰のはとちゃんが地道に使い続けてくれていることが判明、ちゃんとみないと遺憾な、とgit repositoryをおいかけ直すことに。
ところで、この手のドキュメント管理ソフトウエアでは、全文検索のできがとても重要である。nixnoteは、データ保管には、H2 Database を使っている。H2は、Javaで実装されたオープンソースのDBMSである。
さて、nixnoteでは、設定可能な正規表現 [,\\s]+ で単語を切り分けて、インデックスを作成している。ご多分にもれず、これでは日本語の検索ができない。日本語などCJK言語の単語切り分けは、正規表現では表現できず、形態素解析を必要とするからだ。
さて、H2データベースには、内蔵の全文検索が2タイプあり、ネイティブとLucineによるものがある。Apache Lucineは有名な全文検索エンジンで、これを使うように改良できれば、nixnoteの機能も向上させられそうだ。そこで、H2データベースのLucineによるCJK全文検索をしらべると、H2追っかける日記にて全文検索を使う話が掲載されていた。
ということで、nixnoteのこの部分を改良する人、募集中なのである。(自分でやれ?)はとちゃんが、がんばれ!?
Linux 20周年記憶に残ること
- 6月
- 12
リンク: http://d.hatena.ne.jp/mktredwell/20110611/1307815106
Linux 20周年で、Linus Torvaldsさんが来日し、6/1-3のLinuxCon Japanに参加しました。 この20年に関わった人は、それぞれに感想をもったとおもいます。そのなかのひとりにあかいさんがいます。あかいさんは、LinuxFoundationの20年史をポイントしつつ、それ以外に
20年で記憶に残るマイルストーンには、何があったのだろうか
と提起しています。あかいさんが初めてLinuxを知ったのは、1995年の神戸・阪神大震災のとき、と記しています。わたしが初めてLinuxを知ったのは、1994年の夏くらい、使い始めたのは、1995年4月に社会人となって最初の給料でPCを買って、初日にプレインストールのWindows3.1Jを消し去ったとき、からです。
なぜ、山形浩生氏の活動が、Linux 20年史と関係してくるのだろう。
山形さんには、1990年代後半、TLUGの活動の中で、お話させていただく機会が数度ありました。このときは、TurboLinuxの前身Pacific HiTechのクリフ・ミラーさんとも交流があって、1998年くらいにNTTデータにきていただいて、Linux推進派の社内エンジニアたちと日本の情報産業の構造と、システムインテグレータが取り扱うに必要な環境などについて、意見交換したこともありました。
このころに、エンジニアやLinux開発者は、技術だけではなく、ライセンスや倫理や経営についても理解を深めないといけないと思ったのですが、ここには山形さんの影響を受けている気がします。
私が、OSS/Linuxの世界に深く入っていくきっかけになったのは、1989年前後のGNU Manifestの引地さんの訳だったのだけれども、1990年代前半の東北大学在学中に黒木さんやその辺りの一派による社内掲示板での議論の影響もすごく強かった。
そして、2003年くらいから、あかいさんがLinux/OSSをぐいぐい引っ張っているとき、私も、Linux/OSSを業界の別の地点から押していったんですよね。 てなわけで、2003年以降に互いを認識したあかいさんと私の間には、それ以前に共有するものが結構あったのでした。
rdesktopと英語キーボード
- 3月
- 25
rdesktopで英語キーボードをもちいて、つながった先のWindowsターミナルサーバにて日本語変換を、Alt+~で行いたい。 そんなひとには、以下のような内容のファイルをen-jpというファイル名で作って、/usr/share/rdesktop/keymaps/において、 $ rdesktop -k en-jp とすると、幸せになれるでしょう。
# generated from XKB map us
include common
0x411
exclam 0x02 shift
at 0x03 shift
numbersign 0x04 shift
dollar 0x05 shift
percent 0x06 shift
asciicircum 0x07 shift
ampersand 0x08 shift
asterisk 0x09 shift
parenleft 0x0a shift
parenright 0x0b shift
minus 0x0c
underscore 0x0c shift
equal 0x0d
plus 0x0d shift
kana_HE 0x0d altgr
kana_TA 0x10 altgr
kana_TE 0x11 altgr
kana_I 0x12 altgr
kana_i 0x12 shift altgr
kana_SU 0x13 altgr
kana_KA 0x14 altgr
kana_N 0x15 altgr
kana_NA 0x16 altgr
kana_NI 0x17 altgr
kana_RA 0x18 altgr
kana_SE 0x19 altgr
bracketleft 0x1a
braceleft 0x1a shift
bracketright 0x1b
braceright 0x1b shift
semicolon 0x27
colon 0x27 shift
apostrophe 0x28
quotedbl 0x28 shift
grave 0x29
asciitilde 0x29 shift
backslash 0x2b
bar 0x2b shift
comma 0x33
less 0x33 shift
period 0x34
greater 0x34 shift
slash 0x35
question 0x35 shift
牛の蔵 with Steve Coast
- 3月
- 5
リンク: http://r.gnavi.co.jp/a755001/
今日は、OpenStreetMap の創始者 Steve CoastさんとHurricane Coastさんが東京にきたのをきっかけに、OSMの日本メンバーと共に、食事を共にした。で、行ったのが、薩摩牛の蔵 赤坂店
日本流の肉を堪能しながら、楽しいひとときを過ごしたのでした。ただ、英語で、この店のメニューを説明するのは、とても難しかったですよ。
で、Facebookをみていたら、同じ店に同じようなタイミングで行っている人を見つけたりして、ちょっとおいしさを思い出したのでした。
やっぱり、美味しいものを食べることは、幸せなことだよね。そして、健康と美容にいいとおもうのですよ。
BigBlueButtonとCMS(Drupal, Moodle)の連動
- 1月
- 16
リンク: http://ubuntuguide.org/wiki/BigBlueButton#Install_BBB_.3C-.3E_Moodle_API
BigBlueButtonは、APIを持っており、CMSなどと連携させることができる。
デフォルトでは、APIのデモページがあり、JSPによる具体的な利用方法を理解することができる。
人気のあるCMSといえば、Joomla!やDrupalがあるし、BBBは教育用途を意図して作られているところもあるので、Moodleも考慮に値するだろう。
このページでは、MoodleとDrupalについて、連携方法を示している。
Drupalとの連携については、
http://drupal.org/project/bbbで、すでにモジュールも用意されている。
Moodleの連携については、 http://www.dualcode.com/bigbluebutton/に、プラグインが提供されている。
活用してみようと思う。
Amazon EC2に無料のテレビ会議サーバを立ち上げる
- 1月
- 9
リンク: http://bigbluebutton-blog.blogspot.com/2010/11/193-simultaneous-users.html
世の中には、OSSの、LGPLでライセンスされたTV会議ソフトウエアというものが存在する。これは、アーキテクチャ的には、他のOSSに大きく依存している。たとえば、Ubuntu, Tomcat6, Ngidx, ghostscript, OpenOffice.org, swftools, MySql, Astariskなどだ。このソフトウエア・プロジェクトの名前は、BigBlueButtonという。
実に、素晴らしいソフトウエアで、ローカライズもすごく頑張っている。インターフェースもクールだ。複数名の同時カンファレンスができる。開発者のブログによれば、193同時ユーザの会議をホストできたようだ。WebCamによるテレビ会議も20人までいけたようだ。 Asteriskを使っているのは、普通の電話からも会議に入れるように。この193同時ユーザの実験でも、45人は電話からはいったようだ。
さて、自分の利用を用意にするため、そしてみなさんの実験をするのを容易にできるよう、Amazon EC2にイメージを作ってみた。
AMI ID: ami-58b7c90a
Name: bbb-0.71-Ubuntu-10.04-64
Description: BigBlueButton 0.71 on Ubuntu 10.04LTS(64bit)
Owner: 457068382909
そして、その取り扱いを容易にするスクリプトも書いてみた。
ubuntuなどのAmazon EC2に対応したLinuxディストリビューションで
apt-get install ec2-api-tools
として必要なツールを導入し、
以下のスクリプトをbbb.shというファイル名で保存しているとすると、
./bbb.sh run
で、EC2上でUbuntu Linuxが起動し、
./bbb.sh status
として起動したことを確認したあとに
./bbb.sh start
とするとサーバが立ち上がり、必要なIP設定を自動でおこないます。
./bbb.sh login
とすると立ち上がったサーバにログインできて、
./bbb.sh stop
とすると終了するはず。
スクリプトは、適宜、Amazon EC2の登録情報を書き換えて欲しい。また、自分がオーナーではないイメージからの起動については実験していないので、うまく動かす方法をしっていたら、教えて欲しい。


