会社案内 (近況 2008/09)

先月   翌月

2008/09/06 デバイスドライバ PAT 対応 (川井)

Linux kernel 2.6.26 で x86 アーキテクチャ向けに page attribute table (PAT) が サポートされたらしい。この仕組みを使うと任意のアドレス領域にページ 単位で write combine 属性を設定できるのだ (これだけの説明で意味がわか る奇特な読者は次の 3 パラグラフ読み飛ばしてオッケー)。

write combine というのは、アドレス空間内のある領域に特殊な属性を設定し ておくと、その領域内の連続したアドレスへのバラバラな書き込み命令を、ハー ドウェアがうまい具合にまとめて処理してくれる仕組みのことを言う。「特殊 な属性」自体を write combine と呼ぶこともある。

以降ではより具体的に、x86 アーキテクチャ上で当社製品を使用する場合を考 える。この場合、当社製品が PCI デバイスとしてマップされているアドレス 領域に write combine 属性を設定しておくと、この領域内の連続アドレスへ の書き込みが、64byte 単位の write トランザクションとして PCI-X バス (あるいは PCIe リンク) 上に発行される。というよりも、write combine 属 性を設定しておかないと、せっかく連続したアドレスへ書き込みを行っても、 16 byte 単位の write トランザクションがバラバラに発生してしまう。結果 としてホスト計算機から当社製品への書き込み速度が低下してしまう (ここで 64byte とか 16 byte というのは CPU の作りによって決まる定数。x86 アー キテクチャではここ数年ずっとこの値)。

write combine 属性を設定するために、従来は memory type range register (MTRR) という、これまた x86 に特有のレジスタを用いていた。このレジスタ 1 個につき、1 つのアドレス領域の属性を設定できる。しかし CPU 1 個につ き MTRR は 8 個しか備わっておらず、しかもそのうちいくつかはメインメモ リやら他のデバイスやらに使われてしまっている場合が多い (/proc/mtrr を cat すると利用状況を見られる)。さらに設定対象のアドレス領域が 32-bit 空間におさまらない場合には chipset 側に相応の機構が必要で、そういう機 構は安物マザーにはついていないので、メモリを 4GB 以上積んだうえで write combine も設定したければ、高いマザーを使わねばならない、という面 倒もあった。そんなわけで、MTRR を使うよりもマシな write combine 属性の 設定方法が、(ごくマニアックな) 人々の間で熱望されていたのだ。

長い前置き終了。以下本題。

当社製品のドライバを PAT に仮対応させた。まだ kernel2.6.26 の入ったディ ストリビューションが無いので Fedora10 のアルファ版を入れて開発した。そ んな状況なので、ドライバの正式対応は Fedora10 が正式にリリースされた後 ということにしよう。

PAT 対応うんぬんの前に、まず 2.6.26 で従来のドライバを動くようにするの にそれなりの変更が必要だった。カーネルインタフェースがけっこう色々変わっ ている。API が変わっ ている ものや、API が変わっていなくても挙動が変わっているものがいくつか。

で、肝心の PAT は、かなり低レベルなマクロを組み合わせていじらないと制 御できないみたいだ。ドキュメントも無く、サンプルコードも無く、カーネル のソースツリーの中にも PAT を使っているドライバはまだ無く、ちゃんとサ ポートできているとは言いがたい状況。カーネルソースのかなり下のほうまで 辿って設定方法を推測して、いろいろ試してみたら運良く動いた、という感じ。 設定方法の詳細はここで説明するのは大変すぎるし、説明してもすぐにカーネ ル側の仕様変更があるかも知れないのでやめておく。ドライバの変更箇所のう ち核心部分だけ載せておくので、分かるひとだけ分かって、今すぐ使わなきゃ ならないひとだけ使ってちょうだい (投げやり)。

/*
 PTE encoding (see arch/x86/pat.c for detail).
   PAT,PCD,PWT
     0   0   0    write back
     0   0   1    write combine
     0   1   0    uncached-
     0   1   1    uncached
*/
vp->vm_page_prot =  __pgprot(pgprot_val(vp->vm_page_prot) & ~_PAGE_PAT);
vp->vm_page_prot =  __pgprot(pgprot_val(vp->vm_page_prot) & ~_PAGE_PCD);
vp->vm_page_prot =  __pgprot(pgprot_val(vp->vm_page_prot) |  _PAGE_PWT);
ret = remap_pfn_range(vp, virtual, physical >> PAGE_SHIFT, vsize, vp->vm_page_prot);

2008/09/04 福岡出張 (福重)

九州大学 先駆的科学計算に関するフォーラム2008で、GRAPE-DRでの行列計算について発表しました。 内容はこちら

2008/09/03 市販アプリケーションを使う (川井)

FPGA カンファレンス 2008 が各都市で開催される。東京は 9 日。当社販売代理店の立野電脳 (株)さんも出展す る。会場で当社製品の広告チラシを配布して頂けるとのことなので、 急遽作成。

チラシを作るとなったら、これまでなら間違いなく LaTeX で作成して手近の プリンタで印刷していたところだ。が、今回は枚数が多いので印刷業者に依頼 せざるを得ない。そうすると印刷業者が受け付けてくれるフォーマットでデー タを出力する必要がある。印刷業者に渡すデータは Illustrator が de facto standard らしい。事実上それしか受け付けない店も多い。良心的なところだ と「PDF/X-1a 準拠」という細かい制限つきで PDF を受け付けてくれるようだ。 LaTeX と ghostscript の組み合わせで生成した PDF が PDF/X-1a に準拠して いるのかどうか調べるのも面倒だし、仮に準拠していても印刷業者は OS X と Windows 以外の OS 上で作られたデータなんてものを想定していないだろうか ら、トラブルが発生する可能性が高そうだ。

というわけで柄にもなく、市販の OS 上で動作する市販の組版ソフトウェアを 使ってみた。Apple iWork の Pages。何から何までマウスで操作する点に多少 イライラしたが、わりとすんなり使えた。よくできた製品なのではなかろうか。 市販の GUI アプリケーションを使った経験が浅いのであまりあてにならない 評価だが、少なくとも「みんな」が使っている有名なオフィススイートよりは、 はるかによく考えて設計されていると感じた。

で、Pages に吐かせた PDF業者に渡してチェックしてもらっ たところ、特に問題ないとの回答が届いた。A4 両面 (うち片面だけカラー)、 500 枚、中 2 日でお願いしたところ、1 万円だった。ばくぜんと 2〜3 万円 かと思っていたが、それよりもかなり安い。さすが高度情報化社会。参考: 中 6 日以上でゆっくりやってもらうと 5 千円。最速だと当日配送 (当日発送で はなくデータを渡して印刷を依頼したその日のうちに、手元に完成品が届く!) で 1.7 万円。

2008/09/01 脱ひきこもり (川井)

先月から少し営業活動を始めた。プレスリリースをうったり、他社に販売代理 店になってもらったり、ロゴを作ってもらったり、計算機に比較的不慣れなユー ザでも購入してすぐに利用できるような売り方を模索したり、その他まだここ に書くべきでないことも含めいろいろ。この近況報告自体も営業活動の一環だ。

営業の重要性は理解しているつもりだったが、開発の忙しさを理由に実際には あまり営業らしい営業をしていなかった。研究職に就いていた期間が長かった ので、潜在意識では「圧倒的に良い製品を作れば宣伝なんかしなくても勝手に 売れる」と思っていた (いる) のかも知れない。

ちと反省して、今後は外界とのつながりを持つよう努力してみることにした。 とりあえず 9 日に近場で開催される展示会を覗きにいってみようと思う。脱 ひきこもり。


先月   翌月
近況トップ