世間を騒がせているサイドチャネル攻撃 Spectre/Meltdown のチェッカー(GitHub へのリンク)を実行してみました。
デスクトップマシンで実行してみます。OS は Debian GNU/Linux Testing です。
AMD なので Meltdown は関係ないみたいです。
サーバーマシンでも実行してみます。OS は Debian GNU/Linux Stable ですが、カーネルだけ最新の Stable に入れ替えています。
Pentium J/Celeron J シリーズは、以前 Atom と呼ばれていた低消費電力の CPU コアです。Spectre の脆弱性があるということは、Atom くらいの CPU でも分岐予測をしているんですかね…。
Atom のマイクロアーキテクチャを調べてみると Bonnell(第一世代 Atom のコア、2008年頃)から既に分岐予測はあって、Silvermont(第三世代 Atom のコア、2013年頃)からは Out-of-Order 実行だそうです。
購入以来(2014年 6月 26日の日記参照)我が家で活躍している、第一世代 Chromecast ですが、最近 YouTube の動画再生でカクつきが目立つようになってきました。
特にひどいのは再生開始直後で、画はガクガクで、音も途切れブツブツなっています。ネットワークのせいかもしれませんが、スマホで見ると別に問題ないですし、デコード性能不足もありそうです。
第二世代 4K 対応の Chromecast Ultra が出て久しいですし、むしろ 5,000円程度の機器が 4年以上も頑張れることに、逆に驚きを感じます。
ピクセラの 4K 対応 Android TV KSTB5043(メーカーのサイト)を買いました。Amazon で 13,000円くらいです。
この製品は Amlogic S905 という SoC を採用しているようです。CPU は Cortex A53 x 4、メモリは 2GB です。Amlogic の SoC は STB(セットトップボックス)に良く採用されていますね。
Android のバージョンは 7.0(買った時点では)でした。STB は Android 6 系の製品も多い中、7 なんですね。まあ、7 だと何が嬉しい?と言われると、特に思いつかないですけど…。
とても素直な Android TV という感触です。メニューは恐らく何も改造されていません。Android のメーカー独自改造って何がどこにあるのかわからなくてあまり好きでは無いので、この点は好感触です。
Google ストアや Play(動画サービス)も、動きがスムーズです。ストアだけちょっとスクロールが引っかかりますが、特に支障はありません。
リモコンが Bluetooth 接続のため、赤外線のリモコンと異なり、本体に向けなくても操作可能です。お行儀は悪いですが布団を肩まで掛けて、手を布団の中に入れたまま、リモコンで操作できます。良い感じ。
リモコンを特定の方向に向ける必要が無いことも、操作すべきはテレビの下にある STB であってテレビは一切関係ないことも、頭ではわかっていますが、ついつい「テレビ」にリモコンを向けて操作してしまうのは、オールドタイプの悲しい性です……。
メディア再生機器としても優秀です。H.265/4K60p は余裕です。H.264/4K60p はデコード性能が足りず、スローになり音と同期がズレていきます。
あえて意地悪な動画を再生しましたが、H.264 で 4K60p は珍しい部類でしょう。もしお持ちの方は H.265 に再エンコードした方が良いかもしれません。サイズも半分で済みますし。
まあ、我が家のテレビは 4K に対応していないので、4K 動画の再生ができても映すテレビが無いんですけど…。
Chromecast built-in が搭載されていますが、スピナー(クルクルするアイコン)が出たまま固まってしまい、イマイチです。何度かやり直せば動くのですが、固まることも多いです。
最近、調子の悪い初代 Google Chromecast を(2018年 1月 26日の日記参照)置き換えようと思っていたので、ちょっと残念ですね。
半年くらい前(2017年 9月 30日の日記参照)に CMA を調べたときはわからなかった問題が一つ解決しました。
悩みはこの 3つで、1つ目はほぼ解決(THP を使わない)していて、2つ目は未だに良くわからないままです。今回は 3つ目の問題が解消しました。
前回の調査では /proc/meminfo を調べていて、CmaFree の項目がなかったため、誰も CMA を使っていないのではないかと思っていました。
MemTotal: 3687912 kB MemFree: 380032 kB MemAvailable: 1527068 kB Buffers: 51344 kB Cached: 1137352 kB SwapCached: 5848 kB Active: 1483616 kB Inactive: 784324 kB Active(anon): 897704 kB Inactive(anon): 203852 kB Active(file): 585912 kB Inactive(file): 580472 kB Unevictable: 3632 kB Mlocked: 3632 kB SwapTotal: 524284 kB SwapFree: 70164 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 1080040 kB Mapped: 587568 kB Shmem: 22300 kB Slab: 210492 kB SReclaimable: 79676 kB SUnreclaim: 130816 kB KernelStack: 39184 kB PageTables: 43764 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2368240 kB Committed_AS: 71185752 kB VmallocTotal: 258998208 kB VmallocUsed: 157168 kB VmallocChunk: 258691972 kB ★★CmaTotal や CmaFree が無いのに…★★
ふと /proc/pagetypeinfo を見たところ CMA の項目が出ました。meminfo には出ないのに pagetypeinfo には出てくるの??
Page block order: 10 Pages per block: 1024 Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10 Node 0, zone DMA, type Unmovable 53146 18233 851 1 0 0 0 0 0 0 0 Node 0, zone DMA, type Reclaimable 1938 120 9 3 0 0 0 0 0 0 0 Node 0, zone DMA, type Movable 195 17 12 3 0 0 0 0 0 0 0 Node 0, zone DMA, type CMA 0 0 0 0 0 0 0 0 0 0 0 Node 0, zone DMA, type Reserve 0 1 16 0 0 0 0 0 0 0 0 Node 0, zone DMA, type Isolate 0 0 0 0 0 0 0 0 0 0 0 Number of blocks type Unmovable Reclaimable Movable CMA Reserve Isolate Node 0, zone DMA 539 35 298 51 2 0 ★★MIGRATE_CMA がカウントされている★★
他の機種を見ても meminfo には CMA の項目はなく pagetypeinfo に CMA の項目が出ていました。なぜ meminfo に表示されないのかわかりませんが、理由は後で考えるとして、一番下に出てくる Number of blocks が知りたかった情報です。
行が Zone を表します。ZenFone は Zone DMA しかありません。機種によっては Zone DMA と Zone Normal の 2本立てになっていることもあります。
列が MIGRATE_TYPE です。数値の単位はページでは無くブロックです。ブロックは pagetypeinfo の先頭に「Pages per block: 1024」とある通り、1ブロック=1024ページです。ARM は 1ページ 4KB なので 1ブロックは 4MB になります。1ブロックのページ数はカーネルコンフィグによって変わりますので、どの機種でも常に 4MB ではないことに注意です。
さて ZenFone 3 Deluxe ZS550KL というか Qualcomm Snapdragon 625 のシステム構成という方が近いかもしれませんが…、Linux が管理している全体のブロック数は 925ブロック(3788800KB)で、CMA は 51ブロック(208896KB)のようです。
物理的に搭載されている RAM が 4GB らしいので Linux の管理外となっている領域は、4194304 - 3788800 = 405504KB だと思われます。かなり大きいです。もしかするとデコード/エンコード用の領域はこちらから取っているのかもしれません。
また meminfo によれば MemTotal が 3687912KB ですので、Linux 管理内だけど使うことができない Reserved 領域は、3788800 - 3687912 = 100888KB だと思われます。内訳はわかりませんが、多くも少なくもないと思います。たぶん。
1. 物理搭載メモリ | 4194304KB |
---|---|
2. Linux 管理内 | 3788800KB |
3. Linux 管理外(1. - 2.) | 405504KB |
4. MemTotal | 3687912KB |
5. Reserved 領域(2. - 4.) | 100888KB |
私の推測としては CMA 領域(204MB)では 4K 動画をデコード/エンコードするには足りなさそうなので、Linux 管理外の領域を使っているんだろうなーと思います。
どうして pagetypeinfo には CMA の項目があって、meminfo には CMA の項目がないのか?カーネルのコードを見る限り CONFIG_CMA が有効になっていたら必ず meminfo に項目が出るはずなのに、出てこない理由が良くわかりません。
手持ちの Android 機器を見ていたら、カーネルバージョンがやたら古いことに気づきました。Android 機器ってほとんど Linux 3.18 とか 3.10 とか…、とかく 3.x 系のバージョンが多くないですか?
ああ、これまさか、古いバージョンのカーネルだと meminfo に CMA の項目が出ないのか??と思って、3.x 系のカーネルのコードを見ると、meminfo に CMA が表示されるようになったのが 3.19 以降であることがわかりました。
道理で meminfo に CMA の項目が出ない訳ですよ。こんな単純なことに気づかなかったとは……orz
新旧混ざっていますが、家にある Android デバイスのメモリの使い方を見てみました。ADB が繋がると楽で良いですね。Linux の管理外領域、Reserved 領域など、各社の特徴があって面白いです。
1つ目は、第一世代 Kindle fire HD 8.9(Linux 3.0.21-04374-gb4bbee6, Android 4.0.4 ベース)です。SoC は TI OMAP4470 で、RAM は恐らく 1GB でしょう。工場出荷状態にしているので、OS のバージョンが古いかもしれません。
MemTotal: 786084 kB MemFree: 29360 kB Buffers: 8268 kB Cached: 287052 kB SwapCached: 0 kB Active: 319148 kB Inactive: 231740 kB Active(anon): 255844 kB Inactive(anon): 260 kB Active(file): 63304 kB Inactive(file): 231480 kB Unevictable: 240 kB Mlocked: 0 kB HighTotal: 153600 kB HighFree: 5376 kB LowTotal: 632484 kB LowFree: 23984 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 255824 kB Mapped: 238188 kB Shmem: 296 kB Slab: 15476 kB SReclaimable: 6888 kB SUnreclaim: 8588 kB KernelStack: 6688 kB PageTables: 18828 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 393040 kB Committed_AS: 7951964 kB VmallocTotal: 253952 kB VmallocUsed: 98000 kB VmallocChunk: 98244 kB
Page block order: 10 Pages per block: 1024 Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10 Node 0, zone Normal, type Unmovable 4 12 10 9 4 2 5 2 1 0 0 Node 0, zone Normal, type Reclaimable 49 43 4 3 2 2 2 0 0 0 0 Node 0, zone Normal, type Movable 86 714 216 52 8 2 0 0 2 0 0 Node 0, zone Normal, type Reserve 0 0 0 0 0 0 0 0 0 0 1 Node 0, zone Normal, type Isolate 0 0 0 0 0 0 0 0 0 0 0 Node 0, zone HighMem, type Unmovable 28 27 20 19 8 5 3 0 0 0 0 Node 0, zone HighMem, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0 Node 0, zone HighMem, type Movable 11 5 1 2 2 5 5 0 0 0 0 Node 0, zone HighMem, type Reserve 0 0 0 0 0 1 0 0 0 0 0 Node 0, zone HighMem, type Isolate 0 0 0 0 0 0 0 0 0 0 0 Number of blocks type Unmovable Reclaimable Movable Reserve Isolate Node 0, zone Normal 38 2 118 1 0 Node 0, zone HighMem 8 0 29 1 0
40122000-401220ff : mpu 40124000-401240ff : mpu 40126000-401260ff : mpu 40138000-4013807f : omap_timer.5 40138000-4013807f : omap_timer 4013a000-4013a07f : omap_timer.6 4013a000-4013a07f : omap_timer 4013c000-4013c07f : omap_timer.7 4013c000-4013c07f : omap_timer 4013e000-4013e07f : omap_timer.8 4013e000-4013e07f : omap_timer 40180000-4018ffff : dmem 401a0000-401a1fff : cmem 401c0000-401c5fff : smem 401e0000-401e1fff : pmem 401f1000-401f13ff : mpu 44000000-44000fff : l3_main_1.0 44000000-44000fff : omap_l3_noc.0 44800000-44801fff : omap_l3_noc.0 45000000-45000fff : omap_l3_noc.0 48020000-480200ff : omap_uart.2 48020000-480200ff : omap_uart 48032000-4803207f : omap_timer.2 48032000-4803207f : omap_timer 48034000-4803407f : omap_timer.3 48034000-4803407f : omap_timer 48036000-4803607f : omap_timer.4 48036000-4803607f : omap_timer 4803e000-4803e07f : omap_timer.9 4803e000-4803e07f : omap_timer 48040000-4804007f : omapdss_dss 48041000-48041fff : omapdss_dispc 48042000-480420ff : omapdss_rfbi 48043000-480430ff : omapdss_venc 48044000-480441ff : omapdss_dsi1 48045000-480451ff : omapdss_dsi2 48046000-48046fff : omap-hdmi-codec 48046000-48046fff : hdmi-audio-dai 48046000-48046fff : omapdss_hdmi 48055000-480551ff : omap_gpio.1 48057000-480571ff : omap_gpio.2 48059000-480591ff : omap_gpio.3 4805b000-4805b1ff : omap_gpio.4 4805d000-4805d1ff : omap_gpio.5 48060000-480600ff : omap_i2c.3 48060000-480600ff : omap_i2c 4806a000-4806a0ff : omap_uart.0 4806a000-4806a0ff : omap_uart 4806c000-4806c0ff : omap_uart.1 4806c000-4806c0ff : omap_uart 4806e000-4806e0ff : omap_uart.3 4806e000-4806e0ff : omap_uart 48070000-480700ff : omap_i2c.1 48070000-480700ff : omap_i2c 48072000-480720ff : omap_i2c.2 48072000-480720ff : omap_i2c 48086000-4808607f : omap_timer.10 48086000-4808607f : omap_timer 48088000-4808807f : omap_timer.11 48088000-4808807f : omap_timer 48096000-480960ff : omap-mcbsp.4 48098100-480982ff : omap2_mcspi.1 48098000-480981ff : omap2_mcspi.1 4809a100-4809a2ff : omap2_mcspi.2 4809a000-4809a1ff : omap2_mcspi.2 480b4100-480b44ff : omap_hsmmc.1 480b4100-480b44ff : omap_hsmmc 480b8100-480b82ff : omap2_mcspi.3 480b8000-480b81ff : omap2_mcspi.3 480ba100-480ba2ff : omap2_mcspi.4 480ba000-480ba1ff : omap2_mcspi.4 480d5100-480d54ff : omap_hsmmc.4 480d5100-480d54ff : omap_hsmmc 48350000-483500ff : omap_i2c.4 48350000-483500ff : omap_i2c 49022000-490220ff : dma 49024000-490240ff : dma 49026000-490260ff : dma 49038000-4903807f : omap_timer.5 4903a000-4903a07f : omap_timer.6 4903c000-4903c07f : omap_timer.7 4903e000-4903e07f : omap_timer.8 49080000-4908ffff : dmem_dma 490a0000-490a1fff : cmem_dma 490c0000-490c5fff : smem_dma 490e0000-490e1fff : pmem_dma 490f1000-490f13ff : dma 4a002378-4a0023ff : case_temp_sensor.0 4a002378-4a0023ff : omap_temp_sensor.0 4a056000-4a056fff : omap_dma_system.0 4a066000-4a0660ff : omap-iommu.1 4a066000-4a0660ff : dsp.0 4a0ab000-4a0ab003 : musb-omap2430 4a0ab000-4a0ab003 : musb-omap2430 4a0d9000-4a0d903f : smartreflex.2 4a0d9000-4a0d903f : smartreflex.2 4a0db000-4a0db03f : smartreflex.1 4a0db000-4a0db03f : smartreflex.1 4a0dd000-4a0dd03f : smartreflex.0 4a0dd000-4a0dd03f : smartreflex.0 4a0f4000-4a0f41ff : omap-mailbox 4a0f6000-4a0f6fff : omap_hwspinlock.0 4a10a000-4a10a1ff : fdif.0 4a310000-4a3101ff : omap_gpio.0 4a314000-4a31407f : omap_wdt 4a314000-4a31407f : omap_wdt 4a318000-4a31807f : omap_timer 4c000000-4c0000ff : omap_emif.0 4d000000-4d0000ff : omap_emif.1 4e000000-4e0007ff : dmm 52000000-520000ff : rpres.3 55082000-550820ff : omap-iommu.0 56000000-5600ffff : pvrsrvkm.0 58000000-5800007f : omapdss_dss 58001000-58001fff : omapdss_dispc 58002000-580020ff : omapdss_rfbi 58003000-580030ff : omapdss_venc 58004000-580041ff : omapdss_dsi1 58005000-580051ff : omapdss_dsi2 58006000-58006fff : omap-hdmi-codec 58006000-58006fff : hdmi-audio-dai 58006000-58006fff : omapdss_hdmi 59000000-590007ff : gccore.0 5a000000-5a07ffff : iva.0 80000000-9fffffff : System RAM 8004b000-807c0fff : Kernel text 807c2000-809b6a67 : Kernel data a0000000-a01fffff : ram_console a0200000-b15fffff : System RAM
2つ目は、第七世代 Kindle fire HD 10(Linux 3.18.19, Android 5.1.1, Fire OS 5.6.0.1)です。SoC は MediaTek MT8173 で、RAM は 2GB だったはず。こいつは /proc/iomem を見ることができませんでした。
MemTotal: 1859352 kB MemFree: 154136 kB MemAvailable: 746096 kB Buffers: 51148 kB Cached: 654676 kB SwapCached: 0 kB Active: 852688 kB Inactive: 319524 kB Active(anon): 469736 kB Inactive(anon): 1464 kB Active(file): 382952 kB Inactive(file): 318060 kB Unevictable: 3156 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 24 kB Writeback: 0 kB AnonPages: 469524 kB Mapped: 292104 kB Shmem: 1680 kB Slab: 97544 kB SReclaimable: 52184 kB SUnreclaim: 45360 kB KernelStack: 20224 kB PageTables: 18672 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 929676 kB Committed_AS: 24985496 kB VmallocTotal: 260046784 kB VmallocUsed: 339000 kB VmallocChunk: 259616448 kB
Page block order: 10 Pages per block: 1024 Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10 Node 0, zone DMA, type Unmovable 1762 3473 31 7 125 94 30 14 0 0 0 Node 0, zone DMA, type Reclaimable 26 9 3 1 0 0 0 0 0 0 0 Node 0, zone DMA, type Movable 2662 1111 594 1412 85 21 6 1 0 0 0 Node 0, zone DMA, type Reserve 0 0 0 0 0 0 0 0 0 0 0 Number of blocks type Unmovable Reclaimable Movable Reserve Node 0, zone DMA 117 13 334 2
3つ目は、SHARP AQUOS PHONE ZETA SH-01F(Linux 3.4.0, Android 4.4.2)です。SoC は Qualcomm Snapdragon 800 MSM8974 で、RAM は 2GB ですかね。これも工場出荷状態にしているので、OS が古いかもしれません。CMA って HighMem に確保できるんだね…、知らなかったです。
MemTotal: 1833480 kB MemFree: 304764 kB Buffers: 20268 kB Cached: 553340 kB SwapCached: 0 kB Active: 758564 kB Inactive: 440948 kB Active(anon): 625904 kB Inactive(anon): 620 kB Active(file): 132660 kB Inactive(file): 440328 kB Unevictable: 0 kB Mlocked: 0 kB HighTotal: 1342464 kB HighFree: 44376 kB LowTotal: 491016 kB LowFree: 260388 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 52 kB Writeback: 0 kB AnonPages: 625784 kB Mapped: 183372 kB Shmem: 688 kB Slab: 45908 kB SReclaimable: 13920 kB SUnreclaim: 31988 kB KernelStack: 11264 kB PageTables: 23536 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 916740 kB Committed_AS: 44340740 kB VmallocTotal: 294912 kB VmallocUsed: 34500 kB VmallocChunk: 169996 kB
Page block order: 10 Pages per block: 1024 Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10 Node 0, zone Normal, type Unmovable 595 362 180 106 93 49 26 15 3 0 3 Node 0, zone Normal, type Reclaimable 0 6 2 2 1 1 0 0 0 1 0 Node 0, zone Normal, type Movable 666 496 406 265 184 72 17 9 4 4 30 Node 0, zone Normal, type Reserve 0 0 0 0 0 0 0 0 0 0 1 Node 0, zone Normal, type CMA 8 4 1 0 1 0 1 0 1 0 3 Node 0, zone Normal, type Isolate 0 0 0 0 0 0 0 0 0 0 0 Node 0, zone HighMem, type Unmovable 0 32 24 8 1 16 12 6 2 1 0 Node 0, zone HighMem, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0 Node 0, zone HighMem, type Movable 267 161 4 1 1 10 7 2 0 2 0 Node 0, zone HighMem, type Reserve 0 0 0 0 0 0 0 0 0 0 1 Node 0, zone HighMem, type CMA 241 256 415 134 32 0 1 0 0 0 0 Node 0, zone HighMem, type Isolate 0 0 0 0 0 0 0 0 0 0 0 Number of blocks type Unmovable Reclaimable Movable Reserve CMA Isolate Node 0, zone Normal 45 4 84 1 4 0 Node 0, zone HighMem 66 0 176 1 85 0
00000000-05cfffff : System RAM 00008000-0100a2eb : Kernel code 0120e000-0164c083 : Kernel data 0dc00000-0f9fffff : System RAM 0ff00000-0fffffff : System RAM 11000000-11ffffff : System RAM 13000000-7e6fffff : System RAM f920c100-f92fbfff : f9200000.dwc3 f9824900-f9824a1b : mmc0 f98a4900-f98a4a1b : mmc1 f9922000-f9922fff : msm_serial_hsl f9923000-f9923fff : spi_qsd f9924000-f9924fff : spi_qsd f9927000-f9927fff : f9927000.i2c f9928000-f9928fff : f9928000.i2c f9966000-f9966fff : spi_qsd f9967000-f9967fff : f9967000.i2c f9968000-f9968fff : f9968000.i2c fb21b000-fb21dfff : pmu_base fc380000-fc3e9fff : fc380000.msm-bimc fc401680-fc401683 : restart_reg fc4016c0-fc4016c3 : restart_reg fc401700-fc401703 : clk_base fc4281d0-fc4291cf : vmpm fc460000-fc463fff : fc460000.msm-sys-noc fc468000-fc46bfff : fc468000.msm-periph-noc fc470000-fc473fff : fc470000.msm-ocmem-noc fc478000-fc47bfff : fc478000.msm-mmss-noc fc480000-fc483fff : fc480000.msm-config-noc fc4a8000-fc4a9fff : tsens_physical fc4bc000-fc4bcfff : tsens_eeprom_physical fc820000-fc82001f : rmb_base fc880000-fc8800ff : qdsp6_base fd485300-fd48530b : halt_base fda00020-fda0002f : csi_clk_mux fda00030-fda00033 : csiphy_clk_mux fda00038-fda0003b : csiphy_clk_mux fda00040-fda00043 : csiphy_clk_mux fda04000-fda040ff : fda04000.qcom,cpp fda08000-fda080ff : fda08000.qcom,csid fda08400-fda084ff : fda08400.qcom,csid fda08800-fda088ff : fda08800.qcom,csid fda08c00-fda08cff : fda08c00.qcom,csid fda0a000-fda0a4ff : fda0a000.qcom,ispif fda0ac00-fda0adff : fda0ac00.qcom,csiphy fda0b000-fda0b1ff : fda0b000.qcom,csiphy fda0b400-fda0b5ff : fda0b400.qcom,csiphy fda0c000-fda0cfff : fda0c000.qcom,cci fdb00000-fdb0ffff : kgsl-3d0 fdb20000-fdb2ffff : kgsl-3d0 fdc80000-fdc803ff : vbif_base fdce0000-fdce3fff : wrapper_base fe200000-fe2000ff : qdsp6_base fec00000-fed7ffff : fdd00000.qcom,ocmem
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2021.
Powered by PHP 5.2.17.
using GD bundled (2.0.34 compatible)(png support.)