コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2008年5月18日 >>> 2008年5月5日
link もっと後

2008年5月18日

過去を改竄

ご指摘のあった 5月7日の日記を大幅改訂しました。hdk氏、ありがとう。

詳しくない分野に踏み込んだので間違ってるかも知れませんが、そんときゃそんときだ。うん。

編集者:すずき(2008/05/18 11:26)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月16日

使い切るぞ

今週一週間で、月の残業時間の半分を使ってしまった。またか、またなのか!

付け方を控えめにしてるつもりなのにねえ…。

編集者:すずき(2008/05/18 11:24)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月15日

正方形だって?

所属していた研究室のSkepeチャットで、変なキーボードの話をしていました。聞けばほぼ正方形のスペースキーを搭載した変なキーボードがあると言うではないですか。写真も見せてもらいましたが、本当に正方形です。変なの!

確かに正方形だ

…やややや、まてよ?このキーボードどこかで見たことないか?と思い、会社のメインキーボード(DELL SK-8135日本語配列)を見たら、スペースキーが正方形じゃないですか…。そりゃ見たことあるわけだよ、既に使ってたんだもん。

見た目はかなり変テコですが、使い心地は普通です。スペースキーが小さい分、微妙にデカい無変換キー(普通はAltより細い)を誤打するくらいで、すぐに慣れてしまいます。

このキーボードのおかげなのか、家のキーボードでスペースキーを叩くときもキー一つ分(幅としてはSK-8135の無変換キー分くらい)を無意識に避けて押しています。

今回の日記を書いているときに初めて気づいたので、いつからこうなってたのかはわかりませんけども。

実際

ぜひ皆様にどんなキーボードか見ていただきたくて、型番でGoogle検索したらこんな写真をブログに貼っている人がいました。

うは、まさにこれだ。スペースキーが正方形なのさ。

編集者:すずき(2008/05/18 11:23)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月13日

Linuxのstruct pageって何

目次: Linux

以前からLinuxのページディスクリプタ(要はstruct page)って何なの?という疑問が晴れないまま居ました。特に実際のページフレームとの対応をどうやって取っているのかが全くわからん。どこかに対応が書いてあるにしては、それらしい場所がない…。

分からんながらも、機会を見つけては調べたり考えたりしていたら、なんとなーく分かった気がする。

分かった気がすることを書き散らしますが、間違っててもご勘弁下さい。自信ないです。

メモリゾーン

前提知識として簡単に説明します。Linuxではメモリ領域をゾーンという固まりで管理しています。ゾーンはページフレーム(普通は4KBのメモリ領域)をいくつかまとめた固まりです。ページフレームがずらーっと並んでいるようなイメージ。

厳密にはもっと書くべきことがあるのでしょうが、今回はこのくらいの理解で進めるはず。たぶん。

ページディスクリプタとページフレーム

では本題に入ります。
まず私の疑問点は「ページディスクリプタ(以下、struct page)のポインタをもらったとき、どうやって対応するページフレームを得るのか?」です。

ここでstruct pageのメンバに直接書いてあれば話は早いのですが、struct pageにページフレーム番号を示す情報などはありません。残念。

実はstruct pageは中身も大事ですが、ポインタ値が非常に重要な意味を持ちます。というのも実メモリのページフレームとの対応を取るために、ポインタの計算を行うからです。計算についてはまた説明します。

ページフレームを求めるためには、
ページディスクリプタ -> ゾーン -> ページフレーム
の順に求めます。まどろこしいですが、直接求められないのです。

ページディスクリプタ -> ゾーン

ページディスクリプタが対応するページフレーム、こいつが属するゾーンを求めます。自分でも何言ってるのかわかんないけど、まあいいや。

まずstruct pageにpage_flags_t flagsというメンバを見ます。こいつはその名の通りページの属性や状態を示すフラグを格納する変数なのですが、上位3ビット(または8ビット)だけは意味が違っていて(※1)、このページが所属するゾーンを表す数値が入っています。

なのでflags >> NODEZONE_SHIFTによってページが何番目のゾーンに所属しているのかがわかります。例えば1だとしたら、ゾーンの配列zone_table[1](グローバル変数)を見ればゾーンの情報が見られます(※2)。

(※1)不思議な設計に見えますが、むやみにメンバを増やすとstruct pageだけで相当量のメモリを圧迫(struct pageはページフレームの数だけ存在する)してしまいます。

(※2)最近のLinuxではゾーンの一覧(zone_table)はグローバル配列ではありません。struct pglist_dataという構造体(ゾーンが必要ならnode_dataというグローバル配列(アーキテクチャ依存)、ゾーンが不要ならcontig_page_dataという変数)経由でゾーンを見るようになっています。ゾーンが要らないというアーキテクチャを考慮したのでしょう。

ページディスクリプタ&ゾーン -> ページフレーム

長くなってきましたが、本題のページフレームの求め方に行きます。先ほど苦労して求めたゾーンにはzone_mem_mapというメンバが居て、ゾーンに属するstruct pageの一覧を持っています(※3)。


ゾーンのzone_mem_mapのイメージ

上の絵で注目して欲しいのはzone_mem_mapと、ページディスクリプタのポインタ(pとします)がわかれば、zone_mem_mapの何番目にpが存在しているかわかるということです。上の絵では5番目に位置しています。

薄い水色の四角内で具体的な数値(数値は適当ですが)を当てはめてpのアドレスからzone_mem_mapのアドレスを引くことで、pがzone_mem_mapの何番目にいるか求められる様子を示しています。


ページフレームを求める

これでstruct pageがゾーンの先頭から何番目のページなのかがわかりました。あとはページフレームを求めるだけです。ゾーンの構造体のメンバzone_start_pfnがゾーンの開始ページフレーム番号を表しているので、そこへ先ほどの数字(5)を足します。

これにてstruct pageと対応するページフレームが求められました。

もし物理アドレスに興味があるのならば、ページフレームの番号にページフレームのサイズ(普通は4KBのはず)を掛けてあげればよいです。
高位メモリや非連続なメモリモデルを持つアーキテクチャだと、単純に掛けるだけではダメかもしれません。

(※3)最近のLinuxにはありません。恐らくzone_pgdat->node_mem_mapが等価だと思われます。たぶん…。

編集者:すずき(2023/04/29 21:56)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月12日

念のため

有給をとって休みました。お休みを病欠で消費するとすごくもったいない気がするのです…。

上の一文をどこかで見た気がすると思ったら、去年の6月11日(2007年6月11日の日記参照)にも風邪で有給を取って休んでいて、同じようなこと書いていました。ああ、進化してない。

昔からこの時期(4月末〜5月末)はほぼ確実に風邪を引いている。時期に何か秘密があるのかなあ?季節の変わり目にしては遅いような気がするんだけど。

編集者:すずき(2008/05/13 01:19)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月11日

風邪

熱は下がったけど、喉がヤバいことに変わりなし。起きている間に良化 -> 寝ている間に悪化を繰り返しているみたい。部屋の空気が乾燥しているとかかなあ?

昨日はご飯食べるの忘れてたので、今日はきちんと食べました。

編集者:すずき(2008/05/13 01:07)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月10日

今日は

おとなしく寝てました。熱もあるんだろうけど、鼻〜喉がヤバい。焼け付くような感じがする。

編集者:すずき(2008/05/13 01:05)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月9日

SP3というセキュリティフィックス

5/7にWindows XP SP3がリリースされました。デスクトップに早々とインストールしたものの、ノートのことをすっかり忘れていました。

これまた寝る前に始めたのが良くなかった。朝までノートを動かす羽目になりました。寝るときノートの液晶画面が眩しい、かといて閉じるとスリープする…とお悩みの方。スリープしないよう設定変更するのも手ですけど、単に輝度を最低に落とすだけでも割と良い感じですよ。

ブラウジング環境

会社でもSeaMonkeyを使っています。通常のブラウジングには苦労しませんが、会社の変なシステムがIE6専用でして、全く動きません。しかもやたら別ウインドウを開きたがる悪い癖のあるシステムなのでウインドウだらけになる。IE系のタブブラウザでも動くかなあ、動くようなら導入しようかな。

風邪悪化

5/6から引きずってた風邪がここにきて悪化してきた。頭がガンガンする。飲み会に行きたかったけど、諦めて寝よう。

編集者:すずき(2008/05/13 01:03)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月8日

メイリオは不明瞭

Windows XP用のメイリオフォントが公開されたので入れてみたら、IT Mediaのビジネスニュースサイト Business Media誠の表示がメイリオで出るようになってしまった。見づらい。

調べたら、スタイルシートでフォントが指定("メイリオ","Hiragino Kaku Gothic Pro","ヒラギノ角ゴPro W3","MS Pゴシック",Osakaの順だった)されていたためでした。今までは優先度4の MS Pゴシックが選ばれていたのに、メイリオを入れたことによって優先度1のメイリオが選ばれるようになったわけです。

Webページでフォント指定するなよ、全くもってダサイな…。SeaMonkeyの設定で、Allow documents use other fontsをOFFに、ついでにMinimum Font Sizeも10くらいに上げておきました。ん、見やすい見やすい。

編集者:すずき(2008/05/09 02:19)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月7日

やめて!VAIOのHPはもう0よ!

いつからか我が家のVAIO type Gのファンがぶんぶん回りっぱなしになっています。冬の間は「うるせえなあ…」と思う程度で済んだのですが、改めて本体を触るとかなり熱い。

これから夏を迎えるに当たって温度が心配になってきましたので、原因を探ってみました。

負荷を調べる(2008年5月18日改訂)

さて負荷をどうやって調べるかが問題です。ファンがブンブンしている状態でタスクマネージャを見ても0% のままで、負荷がかかっているのかすらわかりません。というわけで 1秒おきにrdtsc命令を発行し、その差分を表示するプログラムを書き(※)ました。

このプログラムが表示する値を理解するには、まずCPUの動作周波数がどうやって決まるか、rdtsc命令の返す値は何を表すか、を説明しなければなりません。付け焼き刃の知識で頑張って説明します。

(※)本来なら自分で書かなくても、Crystal CPUIDのReal Time Clock表示機能を使うべきです。しかしCrystal CPUIDは無駄に表示が凝っており、表示の負荷でシステムクロック周波数が上がる(rdtscの変化分が300MHzくらいまで)本末転倒状態だったので、没にしました。

システムクロックとCPUバスクロック(2008年5月18日追記)

まずCPUバスクロック(CPU <-> ノースブリッジバス)の説明から入ります。CPUバスクロックはシステムバスクロックの半整数倍です。VAIO君の場合はシステムクロック = 133MHz、CPUバスクロック = システムクロック(133MHz)x 4倍 = 533MHzのようです。

システムクロックはマザーボード上の水晶振動子(安い10MHz〜30MHzくらい?)を原発振としたPLL(Phase Locked Loop)で供給されます。PLLって何?と聞かれても詳しくは知らんので勘弁して下さい。

CPUバスはIntelの伝統でFSB(Front Side Bus)と呼ばれ(※)ますが、今回はCPUバスで通します。

ノースブリッジにはメモリコントローラが載っていてSDRAMが繋がっています。比較的高速のバス(AGPバス、PCI-e x16バス)などをノースブリッジに繋げることが多いようです。
ノースブリッジの先にはサウスブリッジが居て、PCIバス、PCI-e x1, x4バスなど、比較的低速のデバイスを繋ぐことが多いようです。


CPU <- (1) -> ノースブリッジ <- (2) -> サウスブリッジ
                  |                        | (PCIバス)
              DDR SDRAM                PCIデバイス

(1) FSB(Front Side Bus, Intel系), HyperTransport(AMD系)
(2) DMI(Direct Media Interface, Intel系), HyperTransport(AMD系)

別にこの2つでなければならないことはないです。
他の方式で接続するシステムも有るはず。

重要な点として、(1)、(2) のクロックとDDR SDRAMやPCIのクロックは全て同期しています。でないとデータのやりとりができないからだと思うんですが…。
そのためCPUバスと同様に、システムクロックから生成したバスクロックを用います。PCIバスだと33MHzを欲しがるので、システムクロック133MHz x 1/4 = 33MHzとします。

  • CPUの動作周波数 = システムクロックx CPU内部動作周波数倍率
  • CPUバスの動作周波数 = システムクロックx倍率
  • 周辺バスの動作周波数(例: PCIバス)= システムクロックx倍率

(※)"Front" Side Busに対して "Back" Side Busもあるのか?
BSBもあります、いや…ありました。BSBはCPU <-> 2次キャッシュのバスです。しかし最近はCPUに2次キャッシュも混載されているのでBSBは不要です。ですから「最近のシステムにはありません」という方が正しそう。

rdtscとCPUの動作周波数(2008年5月18日追記)

rdtsc命令とはCPU内部のタイムスタンプカウンタを読み出す命令です。Core系以前のCPUではrdtscのカウントアップ周波数 = CPU動作周波数でしたので、SpeedStepなどで倍率を変化させるとrdtscの増分も変化していました。しかしCore系では常に一定の周波数(Core Solo 1500Uの場合は最大動作周波数1330MHz)でカウントアップされます。
(hdk氏、ご指摘&情報提供ありがとうございます)

つまり、
過去のCPU: システムクロックx動作倍率(可変)
Core系: システムクロックx一定値
です。

じゃあ最初に書いたrdtscを見るプログラムって意味無くね?と思うのはまだ早いんだ、これが。

VAIO上で先ほどのプログラムを使ってrdtscの増分を見ると、システムの負荷によって変化します。rdtscの増分はシステムクロックx一定値、のはずですから、変化しているのはシステムクロック側と予想されます。

システムクロックを上げれば茨の道のオーバークロック(※)ですが、下げる方向に使えば省エネです。VAIOではCPUの省エネ機能(Enhanced SpeedStep)に飽きたらず、システムクロックも下げさらに省エネしようという設計なのでしょう。

(※)規定値よりシステムクロックを上げることをオーバークロックといいます。今までの説明からも類推できるように、システムクロックをメチャクチャ上げるとCPUバスクロック、さらにはPCIバス(1/4倍 = 33MHz)やAGPバス(1/2倍 = 66MHz)まで上がり、いずれバスに繋がっているデバイスの許容値を超えて異常動作したり動作しなくなります。
この問題の解決にはシステムクロックと周辺バスクロックの比率を変える必要があります。オーバークロックを売りにしているマザーボードだと比較的柔軟みたいです。

VAIOの現状(2008年5月18日追記)

システムに負荷をかけると、システムクロックが最大値に張り付いてrdtscの増分も最大値である1330MHzに張り付きます。負荷が低いと50MHz程度(※)まで落ちます。

さて、今のVAIOを見ると 1330MHzに張り付きっぱなしです。ファンがずっとブンブンしているのはこのせいでしょう。

ファンのスピードはシステム負荷に連動しているようなので、rdtsc値の増分を下げる方向 = システムクロックを下げる方向へ改善することで「ファンがブンブン言う問題」は解決すると思われます。VAIOがシステム負荷をどうやって測定しているのかまではわかりませんでした。

(※)負荷が低いときはCPU内部動作周波数倍率は6.0倍まで落ちますので、rdtscカウンタの増分x 6/10が本来のシステムクロックです。まあ、その辺の細かい値は今回どうでもいいので、高い、中間、低い、くらいが見えればOKです。

犯人はUSB HDDだ

というわけで犯人捜しです。片っ端からケーブルを引っこ抜いてみると、USB HDDを引っこ抜いた段階で50MHzくらいまで下がりました。犯人はこれかあ。手始めに、デバイスの取り外しで無効化してみたものの全く負荷が下がりません。

USB 2.0コントローラが有効な状態で一度USB HDDを認識させてから、USB 2.0コントローラ(Intel USB2 EHCI)を無効にすることで、USB 1.1の機器として再認識させると、負荷が下がりました。

これで解決ですね……って、こんなん毎回やってられんよ。面倒くさくて死にそう。

もしかして

ひょっとするとHDDケース(センチュリーのやつだった気がする)がおかしいのかもしれません。こやつは Windows XPの起動時に電源ONだと100%BoDするという、怪しさ爆発デバイスです。

というわけで別のUSB HDDを繋いで、再度実験。やはり負荷が上がってダメです。さらに手持ちのデバイスで実験。

  • USB Flushメモリ -> 負荷高
  • USB DVDドライブ -> 負荷高
  • USB 2.0ハブ -> 負荷低
  • USBモデム(NEC N902iS、USB 2.0デバイス) -> 負荷低
  • USBマウス(USB 1.1デバイス) -> 負荷低

うーむ、どうもUSB Mass StrageがNGっぽいですね。WindowsのUSB EHCIドライバか、USB Mass Strageドライバのどちらかが常に負荷をかける作りになっているんでしょうか?これはノートPCの設計者に優しくない作りだなあ…。

まとめ

  • USB Mass Storage(USB HDD、USB 2.0デバイス) -> 負荷高、速い
  • USB Mass Storage(USB 2.0デバイス)を「デバイスの取り外し」で無効化 -> 使えないくせに、負荷高
  • USB Mass Storage(USB DVD、USB 2.0デバイス) -> 負荷高
  • USB Mass Storage(Flushメモリ、USB 2.0デバイス) -> 負荷高
  • USB Mass Storage(USB 1.1デバイス) -> 負荷低、ただし遅い
  • USBモデム、シリアルポート(NEC N902iS、USB 2.0デバイス?) -> 負荷低
  • USBハブ(ARVEL、USB 2.0デバイス) -> 負荷低
  • USBマウス(Logicool、USB 1.1デバイス) -> 負荷低
  • USBゲームパッド(MS SideWinder、USB 1.1デバイス) -> 負荷低

まとめといた。

編集者:すずき(2008/05/18 10:35)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月6日

再いんすこ

目次: プロバイダ

大下邸のPCのセットアップをしました。NTT西日本のBフレッツ(光プレミアム)ではONU(光ファイバーつなぐやつ)以外に、CTUというルータのような装置を貸与されます。CTUはDHCPサーバとして動くので、大抵はケーブルを差せば動くようになっております。

無線LANも使いたかったので、無線LANルータのDHCPサーバ機能を殺して接続しておきました。PPPoEもDHCPもNATも何もかもOFFにしているため、無線LANルータではなく単なる有線 <-> 無線ブリッジになり下がってますけど。もったいない話だ。

CTU

CTUはNTT西日本独自の装置らしくて、地域IP網(IPv6)とユーザ側のネットワーク(多くはIPv4)を橋渡しする役目を果たしているようです。それ以外もごちゃごちゃやってるようですが、あまり詳しく書いてあるところがないですね…。

大きさも普通のルータ程度ですし、ルータ機能も良くできてると思いますが、設定するために一々NTTのサーバへアクセス(アドレスはhttps://ctu.fletsnet.com/, IPv4:210.247.16.1, IPv6:2001:d70:3:1::3:3)しなければならないのがめんどくさい…。

そして

うーむ、風邪引いたかもしれん。

編集者:すずき(2022/05/17 18:38)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2008年5月5日

淡路島とは関係ありません

大下さんちに遊びに行きました。阪急の淡路駅で初めて降りた気がします。

淡路駅は特急が止まります。ですが駅前には商店街があるだけで特に何があるっつーわけでもないです。駅や周辺地域の規模ではなくて、交通要所(千里線と京都線の乗り換え駅)だから止まるんだな。たぶん。

編集者:すずき(2008/05/08 21:57)

コメント一覧

  • hdkさん(2008/05/08 22:17)
    南千住駅には快速が止まります。ですが駅前には商店街があるだけで特に何があるっつーわけでもないです。駅や周辺地域の規模ではなくて、交通要所ですらなくて、うーんw
  • すずきさん(2008/05/09 01:55)
    南千住ね…かなりいらない子だわ。一応東京都内だからお情けで止まるのかもw
open/close この記事にコメントする



link もっと前
2008年5月18日 >>> 2008年5月5日
link もっと後

管理用メニュー

link 記事を新規作成

<2008>
<<<05>>>
----123
45678910
11121314151617
18192021222324
25262728293031

最近のコメント5件

  • link 24年10月1日
    すずきさん (10/06 03:41)
    「xrdpで十分動作しているので、Wayl...」
  • link 24年10月1日
    hdkさん (10/03 19:05)
    「GNOMEをお使いでしたら今はWayla...」
  • link 24年10月1日
    すずきさん (10/03 10:12)
    「私は逆にVNCサーバーに繋ぐ使い方をした...」
  • link 24年10月1日
    hdkさん (10/03 08:30)
    「おー、面白いですね。xrdpはすでに立ち...」
  • link 14年6月13日
    2048player...さん (09/26 01:04)
    「最後に、この式を出すのに紙4枚(A4)も...」

最近の記事3件

  • link 24年10月31日
    すずき (11/04 15:17)
    「[DENSOの最終勤務日] 最終勤務日でした、入門カードや会社のPCを返却してきました。在籍期間はNSITEXE(品川のオフィ...」
  • link 22年7月8日
    すずき (11/02 20:34)
    「[マンガ紹介 - まとめリンク] 目次: マンガ紹介一覧が欲しくなったので作りました。5作品乙女ゲームの破滅フラグしかない悪役...」
  • link 24年10月30日
    すずき (11/02 20:33)
    「[マンガ紹介] 目次: マンガ紹介お気に入りのマンガ紹介シリーズ。最近完結した短めの作品を紹介します。マイナススキル持ち四人が...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www2.katsuster.net
RDFファイル RSS 1.0

最終更新: 11/04 15:17