5/30 (火)
[MyWeb] トラックバック・スパムとかく戦えり
Permlink
5月18日から5月7日の日記の日記にトラックバック・スパムがやってくるようになった。
最初は手動で削除していたが、 継続的に続くので URL の特徴的な文字を禁止にするようにアクセス制限を掛けたのが 5/22。 少しづつフィルターに引っかかるようになるが、 スパムプログラムはアク禁になると設定を微妙に変えて再突入するようになって アクセス数は増加した。
禁止ワードを増やしていくとスパムアクセス数は減って、 本日は1度もアクセスにこない。 諦めたのか?今日はお休みなのか?
日付 | 書き込み成功 | POST数 |
---|---|---|
5/18 | 14 | 14 |
5/19 | 8 | 8 |
5/20 | 5 | 5 |
5/21 | 13 | 13 |
5/22 | 1 | 1 |
5/24 | 3 | 4 |
5/25 | 7 | 11 |
5/26 | 13 | 20 |
5/27 | 15 | 31 |
5/28 | 4 | 28 |
5/29 | 2 | 15 |
5/30 | 0 | 0 |
5/27 (土)
Xen 3.0 のソースコード・リーディング (1) (Xen Source)
Permlink
IA64 Xen の 3.0.2 のソースコードをへこへこ読んでいる。
- 現状、ゲスト側の SMP が使えない状態にある。
- ゲストに渡す CPU (VCPU) では VHPT は使えない。
- ゲストが実行した TLB キャッシュ・パージ命令を ハイパーバイザー層がエミュレーションしている。
- VCPU 毎に、
VTLB と呼ばれる 1MB のハッシュデータ構造と
16MB ロング形式 VHPT を運用している。
これを使って VCPU の擬似 TLB を提供している。
- ハイパーバイザのページサイズ(16KB)と一致しないエントリは VTLB に登録。
- 一致する TLB エントリは VHPT に挿入。
- ローカル TLB パージ命令(ptc.l) は指定した仮想アドレスから 指定されたサイズの領域にかかる TLB エントリを削除する。 ptc.l のサイズがデフォルトページサイズ(16KB)よりも大きい時は、 ループを使ってデフォルトページサイズ毎に VHPT、VTLB のエントリを潰して行く。 4GB サイズのパージの場合には 256 倍の時間コストがかかる?
- グローバル TLB パージ命令 ptc.g、ptc.ga は ptc.l と同じ実装。 つまりローカル TLB の効果しかない。
- ローカル TLB 全パージ命令(ptc.e) は VTLB と VHPT を全クリアする。 ptc.e 命令はメモリコンテキスト番号(つまりプロセスID)が一周した時になどに発行される。
- I/O の DMA 転送の対象とする物理ページには PCI の制限から 4GB 以内でなければならないなどの制約がある。 ゲストの物理メモリアドレスが 4GB 未満でも、I/O アクセスできるわけではない。 ゲストの物理メモリが DMA の対象になったタイミングで 高位メモリページだと分かったら、 ホスト側が予約している本当の低位メモリページとリマップする。
5/26 (金)
[CPU] 仮想化機能のお勉強
Permlink
Xen 3.0 のソースコード(Xen Source)をぼちぼち読み始めるが、 その前に VT-x、SVM、VT-i のお勉強が必要なようだ。 仮想化機能のうちレジスタセット・割り込みの仮想化は SMT でもやっていたことなので特異ではないが、 メモリ仮想化と I/O 仮想化が難儀のようだ。 とりあえずメモリ関連のお勉強をする。
仮想化されたプロセッサでは、 ホスト物理メモリ空間(hPS)、ホスト仮想メモリ空間(hVS)が一つづつ。 ゲスト物理メモリ空間(gPS)、ゲスト仮想メモリ空間(gVS)が多数存在する。 ホスト物理メモリ空間は実体が存在しアドレス変換が不要だが。 他の3つはアドレス変換が必要になる。 メモリの仮想化はこれをどう扱うか。
Intel の VT-x
VT-x はホスト側とゲスト側が切り替わる時にレジスタセットを入れ替える機能、 ゲスト側が特権命令と一部の非特権命令を実行する時にトラップをかける機能。 ゲスト側の例外をハンドルする機能がある。 だがメモリの仮想化に対する支援は(ほとんど)行われない。
- TLB の機能には拡張がない。 つまり仮想アドレスをホスト物理アドレス(hPS) に変換する機能を持つ。 ハードウェアが自動的に hPS 上にあるページテーブルを検索して、 TLB エントリをフィルする。 ページテーブル上にエントリがないとページフォルト例外を発生させる。
- ゲストがページテーブルに関係する制御レジスタを変更したこと TLB 関連の命令を発行したことはトラップできる。
- ゲスト側のメモリ系の割り込み(ページフォルト)はハンドリングできる。
ゲストが物理メモリモード(gPS) で動いている場合、 gPS → hPS へのページテーブルを VMM が用意して CR3 をそこにあわせる。 gPS は TLB 上の「仮想メモリ」としてアクセスされる。
ゲストが仮想メモリモード(gVS) で動いている場合、 ゲスト OS が用意しているページーテーブルは当然使用できない。 VMM は gVS → gHS と gHS → hPS のページテーブルを合成して、gVS → hPS を構成する。 これを (AMD 用語だが) Shadow Page-Table と呼ぶと呼ぶ(Intel は Active Page-Table Hierarchy と呼んでいる)。
Shadow Page-Table は動的に構成する。 最初は空に近く、 ゲスト側がページフォルトを起こすたびに VMM が gVS → gHS と gHS → hPS の 2 段のページテーブル検索をソフト的に行って ページテーブルを部分的に追加していく。
ゲスト OS が gVS → gHS のページテーブルを勝手に書き換えるが、 VMM はこれを検知できない(他のメモリアドレスと区別できないから)。 ただゲスト OS はページテーブルの書き換えを反映させたい場合には INVLPG (Invalidate TLB Entry) 命令を実行するので、 これをトラップして Shadow Page-Table 書き換えの契機にする。
ゲスト/ホスト間の切り替え等があると TLB は全フラッシュする。
AMD の Secure Virtual Machine 機能 (Pacifica)
AMD の SVM のメモリの階層化には Shadow Page Tables (SPT)、 Host Page Tables (Nested Paging Facility) の 2 種類が存在する。 Nested Paging が実装されたプロセッサはまだ存在しない。
SPT の場合は VT-x とほとんど変わらないが、 TLB ハードに一部機能追加が行われた。 ゲストが使う様々なメモリ空間を識別する アドレス空間識別子 (ASID) が導入され、 TLB は ASID を区別してエントリを管理できる。 仮想アドレスが同じ値であっても ASID が異なると別のアドレスとみなされ、 TLB フラッシュ/パージは指定した ASID のエントリだけがフラッシュ/パージされる。
Nested Paging は MMU のページテーブル検索機能に追加を行っている。 同一プロセッサが通常の CR3 の他に、 gPS → hPS へのページテーブルを指す hCR3 レジスタ、 gVS → gPS へのページテーブルを指す gCR3 レジスタを持っている。
- ゲスト物理メモリモードでアクセスしている時に TLB ミスが発生すると、
MMU は hCR3 の先に存在するホストページテーブルを検索してページ解決を行う。
ホストページテーブルはホスト物理ページ(hPS)上に配置される。 - ゲスト仮想メモリモードでアクセスしている時に TLB ミスが発生すると、
アドレスは gCR3 の先に存在するゲストページテーブルを検索してページ解決を行う。
ただしゲストページテーブルはゲスト物理ページ上に配置され、 MMU はゲスト物理アドレスとしてテーブルの検索を行う。 Tagged TLB なので gPS のエントリと gVS のエントリは混在可能だが、 さらに TLB フォルトが起きると再帰的に 1. の検索が行われる。
結局 Nested Paging では、 MMU がゲスト仮想アドレスを行うのに gVS → gPS と gPS → gHS の 2 段のページング検索を行ってくれる。 そのため shadow page-table が不要になり VMM の実装がシンプルになる。
Itanium の VT-i
Itanium の MMU は、TLB がミスした時には割り込みを発生させる。 割り込みハンドラの中で TLB 挿入命令を使って TLB エントリを充填していた。
VT-i はゲスト側の割り込みと TLB 挿入/パージ命令を VMM のハンドルルーチンに移すことができるので、 その中で独自のアドレス変換を行えばよい。 ゲストが切り替わる時に TLB をフラッシュさせれば、 前のゲストのコンテキストは消える。
VHPT 機能はゲスト側に提供できない。 ホスト側では使用可能だが、Tagged されていないので ゲストを切り替える際に VHPT もフラッシュする必要があると思われる。
覚え書き
Permlink
家賃払った。
5/22 (月)
[Linux] IA-64/Linux のタイマーの精度
Permlink
UNIX でプログラムを行う場合に setitimer/timer_settime(2) などを使いミリ/ナノ秒単位の指定が可能だが、 実際の精度は OS/プラットフォーム依存だ。
Itanium には CPU 毎に 起動時からのクロック数をカウントしているインターバル・タイム・カウンタのレジスタ(itc)と、 itc が指定値になるとインターバル・タイマ割り込みを発生可能な インターバル・タイム・マッチ・レジスタ(itm) がある。 CPU が 1GHz で動けば itc/itm をナノ秒単位のタイマーとして利用可能なのだが、 IA-64/Linux ではこれを 1/1024 秒単位で起きるプロセススケジューリングのためにだけ使用している。
インターバルタイマ割り込みをフックするようなドライバーを書けば tick よりも短い精度のタイマーを作れそうだが、 自前で書かなくても誰かが書いてそうな気がするなぁ。
5/21 (日)
[Java] Java のオープンソース化が進む (vnunet.com、CNET Japan、MYCOM、/.)
Permlink
Sun Microsystems は、 サンフランシスコで開催されていた JavaOne 2006 で 今は SCSLライセンスか JRL ライセンスの下で公開されている Java のソースコードを、 将来より自由な Open Source Initiative ライセンス(?)でも公開できるようにすると宣言した。
ライセンスの詳細がどうなるのかはまだ分からないが、 新たに Java 仮想マシンを実装しようとする人が クラスライブラリ部分を流用できるライセンスになっていればいいのだが。
5/19 (金)
[CPU] Itanium アーキテクチャと Itanium2 プロセッサの違い
Permlink
「Itanium アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル」(以下、アーキテクチャマニュアル)には プロセッサ依存の部分はプロセッサマニュアルを参照してね、と書かれている。 で Itanium2 プロセッサの場合には 「インテル Itanium2 プロセッサ・リファレンス・マニュアル」 (例えばここ)を参照する。 今後、○○○を実装中に問題になるであろう点を抜き書いておこう。
- 実装された命令
- 64ビット PC 相対ジャンプ命令(branchlong; brl) は、 Itanium ではハード実装されていなかったが、 Itanium2 では実装されている。
- キャッシュライン
- L1 は 64 バイト、L2 は 128 バイト。
- キャッシュのアドレス指定
- L1 キャッシュから物理アドレス指定である。 つまり仮想メモリが有効時にはまず TLB 変換が行われ、 変換後の物理アドレスによってキャッシュの検索が行われる。
- 非境界アクセス
- PSR.ac = 0 の時自然なバイト境界に沿わないアクセスが可能だが、 これは 8 バイト・ブロック内の整数アクセスのみ。 8 バイト境界をまたぐと unalignment access フォルトとなる。
- TLB のエントリ数
- ソフト的には L2 D-TLB と L2 I-TLB が見える。
それぞれ 128 エントリあり、
うち 64 本を自動的に入れ替えの対象にならないピン留めされたエントリ
(トランスレーション・レジスタ; TR)として使える。
TR として使わない部分が通常の TLB エントリ (トランスレーション・キャッシュ; TC) となる。
PAL コールを用いることで TLB 内の情報を得る事が可能。 Linux では/proc/pal/cpu0/tr_info
に TR 情報の一覧が載る。
- TLB のページサイズ
- Itanium2 は以下のページサイズを
4K、8K、16K、64K、256K、1M、4M、16M、64M、256M、1G、4G をサポートしている。
アーキテクチャマニュアルには 1G が載っておらず、 4G は TLB パージの際にしか使えないと記述されていた。 - ローカル TLB パージ命令 (ptc.e)
- アーキテクチャ・マニュアルには、
TLB をフラッシュ (TC エントリけ全パージ) するには
以下のように ptc.e 命令の反復が必要とある。
disable_interrupts(); addr = base; for (i = 0; i < outer_count; i++) { for (j = 0; j < inner_count; j++) { ptc.e(addr); addr += inner_stride; } addr += outer_stride; } enable_interrupts();
現在の Itanium2 は ptc.e の 1 回で I-TLB と D-TLB が全パージされる。 - VHPT の最ペナルティ
- TLB ミスヒット時には、
VHPT によるハードウェア・ページ・ウォーク(HPW)がはたらく。
HPW はまず L2D キャッシュに VHPT の該当するエントリが載っていないか確認し、
なければ L3D キャッシュ、実メモリと降りて行く(L1Dキャッシュは検索されない)。
L2 でヒット 25サイクル L3 でヒット 31サイクル それ以外 20サイクル + メインメモリのレイテンシ
P.S.
このリファレンス・マニュアルには載っていないのだが、 グローバル TLB パージ命令 (ptc.g, ptc.ga 命令) のレイテンシが チップセットとシステム構成によって大幅に変わってくる(らしい)。 幾つかのチップセットはグローバル TLB パージの支援機能が用意されているようだが、 何を読めば載っているのだろうか?
5/18 (木)
[MyWeb] 今度はトラックバックスパムがやってきた
Permlink
掲示板のコメントスパム(4月25日の日記)に続き、ついにトラックバックスパムがやってきたましたよ。 T型の自動販売機が気にいったのか、その日が誕生日なのか、スパマーの人は5月7日の日記にペタペタ貼りつけて来ます。
アクセスログを見る限り User-Agent は現実のブラウザぽくないし、単なるツールっぽい感じですな。 掲示板のコメントスパマーの方は人間のようで、対策が効を奏して、コメントが書けているのに外から見えないという状況が理解できず未だオロオロしていらっしゃるようです。 なんかこっちもスパマーがギョッ!!と思えるような対策ができればいいのですがねぇ。
[Prog] IA-64 の ABI
Permlink
2004年10月12日の日記に書いたが、IA-64 のメモリオーダリングは Release consistency というちょっと特殊なモデルだ。 通常のロード・ストア命令はすべて unordered で、メモリ命令の発行順とキャッシュに書き込まれる順序を自由に入れ替えることができる。 これを順序化したかった Load Acquire、Store Release と呼ばれる特殊な属性のついた ロード・ストア命令を使う必要がある。
なので C 言語からロード・ストアの順序制御をするにはインラインアセンブラを書かないとダメだと思っていたのだが、IA-64 の ABI によると「volatile 属性のある変数を読み込むときには release を、書き込むときには acquire を付けねばならない」という規約があるそうだ。 実際に GCC でも ICC でも volatile を付けると、ld4.acq 命令や st4.rel 命令にコンパイルされる。
通常の C 言語の文法の中で、こういう「縛り」が入るのはちょっと新鮮だ。
サーバー管理機能の大波がくる予感
Permlink
ここ1・2年でリモート・サーバ機能の選択肢が増えて、お値段もお安くなってきたようだ。 最近の Intel のサーバー向けマザーボードには IPMI2.0 準拠のサーバ管理諸機能を内蔵してしまったものがあるし、台湾製マザーボードにまでリモート・サービス用のドーターボードの専用コネクタが付くようになったのね (なぜか IPMI Socket とか呼ばれているけど (^_^;)。
過去の RSC は RS-232C 接続が多かったけど、最近は管理用 LAN の口から Serial Over LAN (SOL) でリモートコンソール接続ができるというのが普通だ。 Intel は Intel Server Management (ISM) という管理ソフトを配布していて、その中の Direct Platform Control Command Line Interface (DPCCLI) でリモートコンソールの集約化できるみたい。
こうなるとサーバ管理ソフトが流行が来そうな気がする。 現行は HP OpenView 等が幅をきかせているが、新興企業がマルチベンダ対応のサーバ管理ソフトをボコボコ出してきて、自社製以外は管理できない旧来のソフトが一掃される予感。
過去の日記
5/16 (火)
[Java] BCEL 5.2 rc1 (people.apache.org)
Permlink
このところ BCEL のアップデートが止まっていると思っていたが、
少しづつだが開発は進んでいるようだ。
JDK 5.0 コードにも対応しているが、
そのままではアノテーションを扱うことができない。
Attributte を展開する時に自前で処理すればいいのだが、
バイトコードに命令を挿入したり削除したりして長さが変わった時のロケーションの変換が結構面倒だ。
真面目にアノテーションを扱いたければ、
org.apache.bcel.classfile.Attribute を拡張して Annotation クラスを作るしかないかないようだ。
P.S.
Sun JDK 5.0 の $JDK/demo/jvmti/java_crw_demo/ というディレクトリの下に java_crw_demo Library という C で書かれた小さなバイトコード操作ライブラリがあって、 目的によっては結構使える。
Flet's Square
Permlink
たまに Flet's Square に行ってみるが 「ガンダム」と OVA 版の「ぼくの地球を守って」の配信をやっているよ。 今週の配信は偶然にも12話「ジオンの脅威」だ。立てよジオン。
5/15 (月)
「卵と私」@横浜駅
Permlink
今日の午後は半休をとる。
カレーライスを食べようと横浜駅まで出てくるが
下調べが悪くてお店が発見できず。
横浜駅の駅ビルで目についた(殊に看板が)オムライス屋に入る。
ライスと玉子の皮の間にとろけるチーズが入っているのを除くとプレーンなオムライスで、 外側のミートソースをぬすくって食べる。 個人的にはオムライスは玉子皮が柔かいほうが好きなのだが、 これはこれで美味しい。
[Food] デメルのザッハトルテ (公式)
Permlink
実家・友人に送るために 横浜駅の高島屋でザッハトルテを購入。
本棚の増設
Permlink
5/8 に購入した本棚がようやく到着。 大正堂の配達は平日の日中というから、 午後半休を取って受け取ることになった。
一番右側の白い奴が購入した本棚。 お店で見た時は随分大きいような気がしたが、 収納してみると手持ちの本が全部入るほどには大きくなかった…
5/13 (土)
5/12 (金)
5/11 (木)
エレベータ運行の最適化
Permlink
コンピュータサイエンスを学んだ者として、 エレベータの運行は極力最適化すべきだと考えている。 「Σ(自分の降りたい階に止まらない回数)×(人数)」や、 外でエレベータを待つ時間が最小になるのが美しい。
自分自身の行動によってエレベータの運行は最適化できる。 M 階に行くために昇りのエレベータに乗る場合、 先客が M+1 階を押していれば一緒に M+1 階まで昇ってから階段で1階下る。 利用客が少ないエレベータに独りで乗った時には、 出る時に1階ボタンを押して1階まで戻すようにしたりする。
だが真に重要なのは利用客の多い隣り合った2つ以上のエレベータの最適化だろう。 朝のラッシュ時にはできるだけ多くの客を運ぶために 1階からの発進時に一定時間ドアが閉じないエレベータ最適化や、 時間帯によって特定階に止まらないエレベータ最適化がなされている。
一方、 混雑時には複数台のエレベータが同じ階に固まる傾向があって悲しい。 プロセッサのパイプラインに湧いたバブルのようだ。 1台目のエレベータが階に止まったなら、 もう片方のエレベータはその階をパススルーしてしまえばいいのに。 でも、そうすると重量制限で乗れなかった人が悲しい目をみるのか?
思うに各階のエレベータボタンが「昇る」か「下る」の二つしかないために、 最適化のための情報が不足しているのだ。 各階に自分の行きたい階のボタンが全部あれば、 いろいろエレベータ最適化ができるだろうに。
5/8 (月)
本棚購入
Permlink
本が増えすぎて畳間が占拠され、寝るスペースがなくなってしまった。 已む無く3台目の本棚を購入を決意す。
新横浜の職場の近くにある「家具の大正堂」で金3万円をはたいて W70 x H180 x D40 (cm) の本棚を購入す。 組み立て式家具だが展示品の処分品だ。 来週の月曜日にどういう形で送られてくるのかちょっと恐い。 組み立てたままだと部屋に入らないかもしれない。
5/6 (土)
[Movie] ナルニア国物語 第1章 ライオンと魔女 (公式)
Permlink
本棚とイスを探しに川崎まで出たついでに、 チネチッタでナルニアの映画を鑑賞してくる。
ナルニアの原作を読んだのは前世紀なので「ライオンがしゃべる」というところしか覚えていなかったが、 余韻を残しながらも風呂敷を広げすぎずで コンパクトにまとまっていて面白かった。
同じようなファンタジーのハリー・ポッターと比べると、 ポッターがダニエル・ラドクリフやエマ・ワトソンなど華のある子役を使っているのに比べて、 ナルニアの兄弟姉妹は非常に地味な配役となっている。 普通の少年・少女による物語というところを強調しているのだろう。
次の作は「カスピアン王子のつのぶえ」。 順番にやるようだ。
5/4 (木)
[MyWeb] 掲示板のスパム対策にスパマーが引っ掛かった!!
Permlink
このサイトの総合掲示板に コメントスパムがやってくるようになったが、 4/25 の日記 にあるようなスパム対策を取ってみた。
- スパムと判定されるコメントは別扱いで、普通の掲示板閲覧者には見えない。
- スパム書き込みを行った者に cookie でスパマー設定を送り返し、 以降その設定を持つユーザーにはスパムコメントを表示する。
このトラップに、一連のスパムコメントを投げてくる者が見事引っかかってくれた (スパマーは自分の過去のコメントをこまめに修正してくるのでトラップに嵌まったと断定できる)。
プロキシサイトを踏み台にして IP アドレスが毎回変えてくるのだが、 書き込みに使っている IE のエンジンは共用のようでクッキーを覚えたまま忘れないようだ。 そのコメントは他の閲覧者にも検索エンジンにも見えていないのだよ (ニヤリ)。
追記:5/10
スパムトラップに引っ掛かったことに気づかないスパマーが 毎日のようにコメントを更新している。 外部からは見えていないのに一人相撲。 いと哀れなり。
追記:5/12
普段と文面が違うスパムコメントが投稿されているが、 クッキーにスパマーマークがある人物から投稿されているために、 このコメントもスパムと判断されてブロックされた。 いい感じの動作だ。
[CPU] IA-64 の日々 (2)
Permlink
IA-64 OS でのページフォルトハンドラの速度向上作業を行っているが(2月27日の日記)、VHPT を切るとアクセスバイオレーションを発生させてからフォルトハンドラに落ちてくるまでの速度が改善した。
- ユーザプログラムサイドでアクセスバイオレーション
- アセンブラで書かれた Nested D-TLB ミスハンドラに飛ぶ
- レジスタを退避 & スタック上のリターンアドレスを書き換え
- 割り込みをオフして C 言語記述のハンドラに飛ぶ
- C ハンドラ内でアドレス計算と TLB 設定
- 元の処理にリターン
の行程で約70サイクルまでに短縮。
IA-64 は R16~R31 の 16 本のレジスタ群が2バンク存在しており、 割り込み時には自動的に裏バンクに切り替わる。 割り込みハンドラから C のルーチンを呼び出さなければ、 この 16 本だけでコードがかけるのでもっと高速化できそう。 ただアドレス計算にどうしても割り算が必要で、 割り算をアセンブラで書くのは面倒なんだよな (IA-64 は整数割り算命令がない)。
5/3 (水)
新横浜のマンガ喫茶
Permlink
新横浜駅周辺には「知好楽」・「DiCE」・「Internet Cafe ARC」と 3 つマンガ喫茶がある。 とりあえず全部に入ってみる。
- 知好楽 (公式)
- 1Fにファーストキッチンが入っている西武ビル6F。
PC のないブースにはマッサージ・肩揉み器の入っている。
面積的には一番狭く、マンガの蔵書も少ない。
安彦 良和の「アリオン」全5巻を見つけて読みふける。
今読んでみるとアリオンは、Z のカミーユにそっくりなり。
- DiCE (ドコ割)
- 新横浜国際ホテルのある通り、揚州商人の隣のビル 3F。
3店の中で一番座席数が多い。
- Internet Cafe arc
- Ing ビル3F。
3店の中で一番品揃えがマニアックだと思われる。
ネイルアートサービスをやっていたり、 分煙されていなかったりと他とは毛色が少し違う。
伊東 岳彦の「宇宙英雄物語」全8巻を見つけて読みふける。
コミックのラストは雑誌掲載時とかなり違っているような気がするのだがどうだろう?
料金がみんな3時間パックで980円で統一されているのはちょっと癪だ。
[Food] 横濱ハイハイ楼 (ドコ割)
Permlink
豚骨風?スープのラーメン屋「横濱ハイハイ楼」へ。 角煮がのった「トンロウ麺」を食べる。 味はトンコツラーメンとして食べると微妙。
替え玉があり。
5/2 (火)
[CPU] IA-64 の日々
Permlink
IA-64 と本格的にお付き合いするようになって一ヶ月ぐらい経つが、 今は特権モードとユーザモードを行ったり来たりするプログラムばかり書く日々。
というわけでユーザプログラムの中から自由に特権命令を使いたい、 それが駄目なら高速に特権モード間を切り替えたいという要求がある。 普通のアーキテクチャにはそんなセキュリティホールになりそうな機能はないのだが、 IA-64 には epc 命令 (enter privileged code) という特権昇格命令がある。 IA-64 の TLB エントリのアクセス権限の中に 読み書き不能・実行専用というモード(TLB.ar=7)があり、 epc 命令がそのページ内に置かれている場合には 指定された特権モード(TLB.pl値)への昇格が可能になる。
この機能は高速なシステムコール実装のために用意されている。 システムコールへのゲートウェイを昇格属性のページに指定しておけば、 ユーザプログラムからジャンプするだけで特権コードが動くという寸法。 IA-64/Linux はこれを利用してユーザー割り込みを使った通常のシステムコールの他に Light-weight なシステムコールを用意している。
しかしユーザプログラムに特権を与えるシステムコールを追加して ヘコヘコ実行していると、 早々にカーネルがコケてしまう。 む~~。
5/1 (月)
[CPU] I/O の仮想化
Permlink
私のあずかり知らぬ次元で、 プロセッサの仮想化は I/O 仮想化技術の競争に移っているのね。 プロセッササイドでは AMD は IOMMU、 Intel は VT-d を提案している。 双方 テーブル検索型の機構を持って メモリ と I/O 間のアクセスにアドレス変換を噛ませるようだが、 似て異なるもののようだ。
VT-i/x 実装チップはすでに出荷されており VT-d チップももうすぐ出るといわれている。 AMD の Pacifica を実装したチップはまだ登場しておらず、 Intel に先行された形。
参考
- AMD Developer Resources Documentation、 IOMMU (PDF形式)
- Intel Virtual Technology、 Intel VT for Directed I/O Architecture Specification (PDF形式)
[Food] みちのく たち花@新横浜で冷やしタヌキ
Permlink
4月20日に行ったみちのく たち花@新横浜で今度は冷やしタヌキを食べる。 これで1,000円近くするのでコストパフォーマンス悪し。