2006年9月29日

ディスクIO性能(10) - PDC20270/ITE8212/430MCPの比較

取り敢えず PDC20270/ITE8212/430MCPのmdベースのRAID0性能を比較をしてみる。

blog20060928-RAID0-all

  1. 2units(2channel)で明らかなRAID0性能向上の傾向がread/writeともに見られる。但し、PDC20270のwriteの向上は鈍い。
  2. 実際の2units(1channel)の性能は1unit比べてやはり劣化がある。
  3. サウスブリッジ内蔵(430MCP)とPCI直下のChip(PDC20270/ITE8212)の性能の違いは無い。

2units/1channel の性能劣化の良い説明が思いつかない(嘆いているっぽいはいる)。IDE channelの共有による調停とかのボトルネックなのかなぁ? IDEインターフェース自体やPCIのDMA転送の仕組みが分からないとイマイチ理解できないなぁ。。。

本題の「ディスクI/O性能はどのようにすればあげられるのか」を考えると、経験則としてストックすべきなんだろうなぁ。

2006年9月27日

ディスクIO性能(9) - 430MCP上でのRAID0の性能

M2NPV-VM の onBoard のPATAであるnForce 430MCPに4台のHDDを繋いで幾つかのベンチマークを取ってみた。

果たして、Chipset に組み込まれているIDEは早いらしいとか言うのは正しいのだろうか?

環境

毎度のこと検証環境は、

  1. Athlon64X2 3800+ (但し、Single CPUとして制限)
  2. M2NPV-VM(GeForce6150+nForce 430MCP)
  3. メモリは512M(カーネルパラメータで制限)
  4. システム用のHDDで Segate ST3500630AS, SATA
  5. Debian/etch Linux-2.6.16
  6. Seagate ST340015A, 40GB, PATA UDMA100, 2MBキャッシュ, 5400 rpm の4台

Chipset のサウスブリッジ 430MCPには、IDEインタフェースが組み込まれている。

# lspci -s 00:0d.0 -v
00:0d.0 IDE interface: nVidia Corporation MCP51 IDE (rev a1) (prog-if 8a [Master SecP PriP])
        Subsystem: ASUSTeK Computer Inc. Unknown device 81c0
        Flags: bus master, 66MHz, fast devsel, latency 0
        I/O ports at f400 [size=16]
        Capabilities: [44] Power Management version 2
 

測定

測定は、md で下記構成のRAIDボリュームに対して、シーケンシャルなread/write の性能を 、bonnie++(1.03)を使い測定する。

  1. RAID0 のHDDx1台(1u)。
  2. RAID0 のHDDx 2 台(2u-2ch)。但し、IDEの2チャンネルにそれぞれにHDDを割り当てる。
  3. RAID0 のHDDx 2 台(2u-1ch)。但し、IDEの1チャンネルのみにHDDを割り当てる。
  4. RAID0 のHDDx 3 台(3u)。IDEの片方のチャンネルに2台で一方に1台を割り当てる。
  5. RAID0 のHDDx 4 台(4u)。IDEの両方のチャンネルに2台を割り当てる。
  6. linear のHDDx 4 台(4u)。IDEの両方のチャンネルに2台を割り当てる。

HDDの設定

4台のHDDは hdparm を使い、下記の様に設定。

# hdparm -d 1 -c 3 -m 16 -W 1 -tTi /dev/hda  

/dev/hda:
 setting 32-bit IO_support flag to 3
 setting multcount to 16
 setting using_dma to 1 (on)
 setting drive write-caching to 1 (on)
 multcount    = 16 (on)
 IO_support   =  3 (32-bit w/sync)
 using_dma    =  1 (on)

 Model=ST340015A, FwRev=3.01, SerialNo=5LAJS1TX
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
 BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=16
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=78165360
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
 AdvancedPM=no WriteCache=enabled
 Drive conforms to: Unspecified:  ATA/ATAPI-1 ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6

 * signifies the current active mode

 Timing cached reads:   3936 MB in  1.99 seconds = 1973.79 MB/sec
 Timing buffered disk reads:  130 MB in  3.03 seconds =  42.97 MB/sec
ファイルシステム

RAIDボリュームは 標準的な ext3 に初期化した。

# dumpe2fs -h /dev/md0
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name:   
Last mounted on:          
Filesystem UUID:          8ba1a4a7-9a35-4a2a-994b-721745dbdb8b
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal resize_inode dir_index filetype needs_recovery sparse_super large_file
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              19546112
Block count:              39081472
Reserved block count:     1954073
Free blocks:              38419937
Free inodes:              19546101
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         16384
Inode blocks per group:   512
Filesystem created:       Thu Sep 28 22:43:21 2006
Last mount time:          Thu Sep 28 22:45:13 2006
Last write time:          Thu Sep 28 22:45:13 2006
Mount count:              1
Maximum mount count:      25
Last checked:             Thu Sep 28 22:43:21 2006
Check interval:           15552000 (6 months)
Next check after:         Tue Mar 27 22:43:21 2007
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   tea
Directory Hash Seed:      9b620d96-95a0-48e6-9336-5d9cb21f847f
Journal backup:           inode blocks
Journal size:             128M
測定コマンド

bonnie については、下記のコマンドを使用(/mntに対象ボリュームをマウント)。

# bonnie -u root -d /mnt -n 0 -f -b

結果

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
430MCP
md-raid0(1u)     1G           37910   8 18697   3           47355   4 164.6   0
md-raid0(2u-2ch) 1G           75550  18 30762   6           85096   8 260.1   0
md-raid0(2u-1ch) 1G           32792   8 13865   2           28791   2 171.0   0
md-raid0(3u)     1G           51519  14 19736   4           42076   4 248.8   0
md-raid0(4u)     1G           78513  20 25605   5           50256   4 287.6   0
md-linear(4u)    1G           37635   8 18120   3           47276   4 168.8   0
blog20060927-RAID0-430MCP

  1. 2units(2channel)で明らかなRAID0性能向上の傾向がread/writeともに見られる。3units/4unitsは、RAID0性能向上の傾向が見られるが、2units(2channel)よりは性能向上は劣っている。
  2. 実際の2units(1channel)の性能は1unit比べてやはり劣化がある。

ほとんどITE8212/pass through mode の挙動と同じである。若干、3units/4units での性能向上が見られる。 やはり、IDEの1チャンネルに2台ぶらさがる事が並列化を妨げ「劣化」させる要因になっているようである。

結論

PATAでは1チャンネルに複数のデバイスをぶら下げるとRAIDの性能向上を妨げるので、1チャンネル1台にしよう。

2006年9月25日

ディスクIO性能(8) - ITE8212上でのRAID0の性能

IO-DATA UIDE-133R(ITE8212) に4台のHDDを繋いで幾つかのベンチマークを取ってみた。

環境

毎度のこと検証環境は、

  1. Athlon64X2 3800+ (但し、Single CPUとして制限)
  2. M2NPV-VM(GeForce6150+nForce 430MCP)
  3. メモリは512M(カーネルパラメータで制限)
  4. システム用のHDDで Segate ST3500630AS, SATA
  5. Debian/etch Linux-2.6.16
  6. IO-DATA UIDE-133R(ITE8212)
  7. Seagate ST340015A, 40GB, PATA UDMA100, 2MBキャッシュ, 5400 rpm の4台

ITE8212は、430MCP配下のPCIバス(32bit/33Mhz)にぶら下がっている。

04:08.0 RAID bus controller: <pci_lookup_name: buffer too small> (rev 11)
        Subsystem: Integrated Technology Express, Inc. IT/ITE8212 Dual channel ATA RAID controller
        Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 209
        I/O ports at 9c00 [size=8]
        I/O ports at 9800 [size=4]
        I/O ports at 9400 [size=8]
        I/O ports at 9000 [size=4]
        I/O ports at 8c00 [size=16]
        Expansion ROM at fda00000 [disabled] [size=128K]
        Capabilities: [80] Power Management version 2

測定

測定は、pass through mode で md を使ってRAIDを組んだ場合とsmart modeでBIOSでRAIDを定義した場合のそれぞれで下記構成のRAIDボリュームに対して、シーケンシャルなread/write の性能を 、bonnie++(1.03)を使い測定する。

  1. RAID0 のHDDx1台(1u)。
  2. RAID0 のHDDx 2 台(2u-2ch)。但し、IDEの2チャンネルにそれぞれにHDDを割り当てる。
  3. RAID0 のHDDx 2 台(2u-1ch)。但し、IDEの1チャンネルのみにHDDを割り当てる。
  4. RAID0 のHDDx 3 台(3u)。IDEの片方のチャンネルに2台で一方に1台を割り当てる。
  5. RAID0 のHDDx 4 台(4u)。IDEの両方のチャンネルに2台を割り当てる。
  6. linear のHDDx 4 台(4u)。IDEの両方のチャンネルに2台を割り当てる。

HDDの設定

HDDの設定は hdparm を使っても多く設定が出来ないので、デフォルト値のままにした。

# hdparm  /dev/hda

/dev/hda:
 multcount    =  0 (off)
 IO_support   =  3 (32-bit w/sync)
 unmaskirq    =  1 (on)
 using_dma    =  1 (on)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 19462/255/63, sectors = 312661432, start = 0
# hdparm  -i /dev/hda

/dev/hda:

 Model=Integrated Technology Express Inc, FwRev=, SerialNo=%
 Config={ }
 RawCHS=0/0/0, TrkSize=0, SectSize=0, ECCbytes=0
 BuffType=unknown, BuffSize=0kB, MaxMultSect=0
 (maybe): CurCHS=0/0/0, CurSects=0, LBA=yes, LBAsects=268435455
 IORDY=no
 PIO modes:  pio0
 DMA modes:  mdma0 mdma1 mdma2
 AdvancedPM=no

 * signifies the current active mode
ファイルシステム

RAIDボリュームは 標準的な ext3 に初期化した。

# dumpe2fs -h /dev/hda1
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          a0060cd1-078c-4212-bc49-849077c18012
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal resize_inode dir_index filetype sparse_super large_file
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              19546112
Block count:              39082120
Reserved block count:     1954106
Free blocks:              38420585
Free inodes:              19546101
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         16384
Inode blocks per group:   512
Filesystem created:       Fri Sep 22 03:17:52 2006
Last mount time:          Fri Sep 22 03:19:57 2006
Last write time:          Fri Sep 22 03:31:15 2006
Mount count:              1
Maximum mount count:      33
Last checked:             Fri Sep 22 03:17:52 2006
Check interval:           15552000 (6 months)
Next check after:         Wed Mar 21 03:17:52 2007
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   tea
Directory Hash Seed:      e5fb4626-6e46-4fc3-b806-e372ee6acf41
Journal backup:           inode blocks
Journal size:             128M
測定コマンド

bonnie については、下記のコマンドを使用(/mntに対象ボリュームをマウント)。

# bonnie -u root -d /mnt -n 0 -f -b

結果


Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
IT8212
md-raid0(1u)     1G           37720   9 18515   4           47306   4 174.0   0
md-raid0(2u-2ch) 1G           75696  21 30213   6           69912   6 261.6   0
md-raid0(2u-1ch) 1G           33420   8 14207   3           28919   2 170.7   0
md-raid0(3u)     1G           46685  12 19849   4           42009   3 249.1   0
md-raid0(4u)     1G           64778  15 25630   5           52087   5 280.2   0
md-linear(4u)    1G           37966   8 18337   4           47288   4 171.8   0
bios-raid0(2u-2ch)1G          60544  18 17886   4           36314   3 169.3   0
bios-raid0(2u-1ch)1G          36289  10 13280   3           30567   2 155.3   0
bios-raid0(3u)   1G           32204   9 15470   3           37817   3 164.9   0
bios-raid0(4u)   1G           39150  11 17373   4           42017   3 183.9   0
bios-linear(4u)  1G           38601  10 18587   4           47329   4 170.2   0
blog20060925-RAID0-IT8212

  1. mdの場合、2units(2channel)で明らかなRAID0性能向上の傾向がread/writeともに見られる。3units/4unitsは、RAID0性能向上の傾向が見られるが、2units(2channel)よりは性能向上は劣っている。
  2. md と smart modeのRAIDを比べると、md を使った方が性能が良い。
  3. 実際の2units(1channel)の性能は1unit比べてやはり劣化がある。

全体的にHDDの台数に性能があまりスケールしない。ただし、IDEの1チャンネルに1台のみぶら下がるようにした場合、台数に対する性能向上が見られる。やはり、IDEの1チャンネルに2台ぶらさがる事が、IDEバスかチップかLinuxのITE8212用のドライバかで並列化を妨げ「劣化」させる要因になっているようである。

結論

PATAでは1チャンネルに複数のデバイスをぶら下げるとRAIDの性能向上を妨げるので、1チャンネル1台にしよう。 姑息に性能を上げるためには、pass through mode で md ベースのRAIDを組もう。但し、過度の期待は禁物である。

2006年9月22日

ディスクIO性能(7) - ITE8212 のRAID機能を探る

最近(2006/9)でPATA RAID でまだ入手できるのはITEのチップが載っているものぐらいで、時たま OnBoard で採用されていたりする。ただ、ITE自体はストレージ系のチップはITE8211/ITE8212 のみなので、企業が存続する限りほそぼそと製品が出荷されるのかなぁ。。。

公開されている大まかなチップ仕様書を見る限り、仮想IDE?やRAIDの再構築等を内部の組み込みCPUで実現できたり、結構HardwareRAIDっぽい。ただし、キャッシュがほとんど無いので性能は見るべき物では無さそうである。

ベンダーからLinux 2.4/2.6用の専用ドライバが配布されている。また 2.6.x では別のドライバがkernel本体に取り込まれている。

  • Linux 2.4 系では ITE配布ドライバ
  • Linux 2.6 系では ITE配布ドライバ or it821x(kernel本体のドライバ)
kernel本体に取り込まれてる it821xを使うのが吉かと思う。

it821xを使う

it821x(kernel本体のドライバ)は smart mode/pass through mode の二種類の動作モードをもつ。

smart mode の時はRAIDボリュームは単体のデバイスとしてアクセスできる。 ちなみに dmraid でのサポートはない、というか Hardware RAIDだから、、、。

IT8212: IDE controller at PCI slot 0000:04:08.0
ACPI: PCI Interrupt Link [APC1] enabled at IRQ 16
ACPI: PCI Interrupt 0000:04:08.0[A] -> Link [APC1] -> GSI 16 (level, low) -> IRQ 209
IT8212: chipset revision 17
it821x: controller in smart mode.
IT8212: 100% native mode on irq 209
    ide0: BM-DMA at 0x8c00-0x8c07, BIOS settings: hda:DMA, hdb:pio
    ide1: BM-DMA at 0x8c08-0x8c0f, BIOS settings: hdc:pio, hdd:pio
Probing IDE interface ide0...
hda: Integrated Technology Express Inc, ATA DISK drive
hda: IT8212 RAID 3 volume(64K stripe).
ide0 at 0x9c00-0x9c07,0x9802 on irq 209
hda: max request size: 128KiB
hda: 312661432 sectors (160082 MB), CHS=19462/255/63
hda: cache flushes not supported
 hda: hda1

pass through mode ではRAIDボリュームが定義されていても個々のIDEディスクとしてアクセスできる。この場合はモジュールパラメータに noraid=1を指定する。

IT8212: IDE controller at PCI slot 0000:04:08.0
ACPI: PCI Interrupt Link [APC1] enabled at IRQ 16
ACPI: PCI Interrupt 0000:04:08.0[A] -> Link [APC1] -> GSI 16 (level, low) -> IRQ 209
IT8212: chipset revision 17
it8212: forcing bypass mode.
it821x: controller in pass through mode.
IT8212: 100% native mode on irq 209
    ide0: BM-DMA at 0x8c00-0x8c07, BIOS settings: hda:DMA, hdb:pio
    ide1: BM-DMA at 0x8c08-0x8c0f, BIOS settings: hdc:pio, hdd:pio
Probing IDE interface ide0...
hda: ST340015A, ATA DISK drive
hdb: ST340015A, ATA DISK drive
ide0 at 0x9c00-0x9c07,0x9802 on irq 209
Probing IDE interface ide1...
hdc: ST340015A, ATA DISK drive
hdd: ST340015A, ATA DISK drive
ide1 at 0x9400-0x9407,0x9002 on irq 209
hda: max request size: 128KiB
hda: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
hda: cache flushes supported
 hda: hda1
hdb: max request size: 128KiB
hdb: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
hdb: cache flushes supported
 hdb: hdb1
hdc: max request size: 128KiB
hdc: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
hdc: cache flushes supported
 hdc: hdc1
hdd: max request size: 128KiB
hdd: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
hdd: cache flushes supported
 hdd: hdd1

smart mode 時にRAIDボリュームに組み込まれていないディスクは単体ディスクとして認識される様であるが、時折発狂するのが見受けられた。

結論

RAIDボリュームと単体ディスクの組み合わせで使わない限り smart mode は安定している。 pass through mode を使えば単なるIDEインタフェースとして普通に使える。何か拍子抜け。

2006年9月21日

ディスクIO性能(6) - PDC20270上でのRAID0の性能

FastTrack100 TX2 (PDC20270) に4台のHDDを繋いで幾つかのベンチマークを取ってみた。

環境

毎度のこと検証環境は、

  1. Athlon64X2 3800+ (但し、Single CPUとして制限)
  2. M2NPV-VM(GeForce6150+nForce 430MCP)
  3. メモリは512M(カーネルパラメータで制限)
  4. システム用のHDDで Segate ST3500630AS, SATA
  5. Debian/etch Linux-2.6.16
  6. FastTrack100 TX2 (PDC20270)
  7. Seagate ST340015A, 40GB, PATA UDMA100, 2MBキャッシュ, 5400 rpm の4台

PDC20270は、430MCP配下のPCIバス(32bit/33Mhz)にぶら下がっている。

# lspci -s 04:09.0 -v
04:09.0 RAID bus controller: Promise Technology, Inc. PDC20270 (FastTrak100 LP/TX2/TX4) (rev 02) (prog-if 85)
        Subsystem: Promise Technology, Inc. FastTrak100 TX2
        Flags: bus master, 66MHz, slow devsel, latency 32, IRQ 209
        I/O ports at 9c00 [size=8]
        I/O ports at 9800 [size=4]
        I/O ports at 9400 [size=8]
        I/O ports at 9000 [size=4]
        I/O ports at 8c00 [size=16]
        Memory at fdbf0000 (32-bit, non-prefetchable) [size=64K]
        Expansion ROM at fda00000 [size=64K]
        Capabilities: [60] Power Management version 1
でも、lspci の出力のFlags に 66Mhz とあるがこれは何を意味するのだろう?

測定

測定は、md と dmraid のそれぞれで下記構成のRAIDボリュームに対して、シーケンシャルなread/write の性能を 、bonnie++(1.03)を使い測定する。

  1. RAID0 のHDDx1台(1u)。
  2. RAID0 のHDDx 2 台(2u-2ch)。但し、IDEの2チャンネルにそれぞれにHDDを割り当てる。
  3. RAID0 のHDDx 2 台(2u-1ch)。但し、IDEの1チャンネルのみにHDDを割り当てる。
  4. RAID0 のHDDx 3 台(3u)。IDEの片方のチャンネルに2台で一方に1台を割り当てる。
  5. RAID0 のHDDx 4 台(4u)。IDEの両方のチャンネルに2台を割り当てる。
  6. linear のHDDx 4 台(4u)。IDEの両方のチャンネルに2台を割り当てる。

HDDの設定

4台のHDDは hdparm を使い、下記の様に設定。

# hdparm -d 1 -c 3 -m 16 -W 1 -tTi /dev/hde

/dev/hde:
 setting 32-bit IO_support flag to 3
 setting multcount to 16
 setting using_dma to 1 (on)
 setting drive write-caching to 1 (on)
 multcount    = 16 (on)
 IO_support   =  3 (32-bit w/sync)
 using_dma    =  1 (on)

 Model=ST340015A, FwRev=3.01, SerialNo=5LAJRH73
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
 BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=16
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=78165360
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
 AdvancedPM=no WriteCache=enabled
 Drive conforms to: Unspecified:  ATA/ATAPI-1 ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6

 * signifies the current active mode

 Timing cached reads:   3836 MB in  2.00 seconds = 1922.01 MB/sec
 Timing buffered disk reads:  130 MB in  3.03 seconds =  42.87 MB/sec

ファイルシステム

RAIDボリュームは 標準的な ext3 に初期化した。

# dumpe2fs -h /dev/md0
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          568932f0-35b2-4279-b3b9-b99195504002
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal resize_inode dir_index filetype needs_recovery sparse_super large_file
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              19546112
Block count:              39078016
Reserved block count:     1953900
Free blocks:              38416481
Free inodes:              19546101
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         16384
Inode blocks per group:   512
Filesystem created:       Wed Sep 20 12:44:07 2006
Last mount time:          Wed Sep 20 12:46:16 2006
Last write time:          Wed Sep 20 12:46:16 2006
Mount count:              1
Maximum mount count:      20
Last checked:             Wed Sep 20 12:44:07 2006
Check interval:           15552000 (6 months)
Next check after:         Mon Mar 19 12:44:07 2007
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   tea
Directory Hash Seed:      d2636c25-d719-4b86-919b-5f4fe97ff8ec
Journal backup:           inode blocks
Journal size:             128M

測定コマンド

bonnie については、下記のコマンドを使用(/mntに対象ボリュームをマウント)。

# bonnie -u root -d /mnt -n 0 -f -b

結果

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
PDC20270
md-raid0(1u)     1G           37924   8 18322   4           47218   4 169.1   0
md-raid0(2u-2ch) 1G           48279  11 26484   5           79672   7 267.5   0
md-raid0(2u-1ch) 1G           32114   8 13687   2           28586   2 166.0   0
md-raid0(3u)     1G           39956  11 18437   4           41578   3 249.1   0
md-raid0(4u)     1G           49674  11 23152   5           50915   4 285.8   0
md-linear(4u)    1G           38235   8 18221   3           47197   4 169.6   0

dm-raid0(1u) 1G 38826 12 18584 4 47295 3 174.2 0 dm-raid0(2u-2ch) 1G 52870 17 22017 5 55090 5 264.0 0 dm-raid0(2u-1ch) 1G 34679 10 12061 2 24026 2 168.0 0 dm-raid0(3u) 1G 42278 13 17619 3 40336 4 249.5 0 dm-raid0(4u) 1G 51228 18 22073 5 50590 5 286.2 0 dm-linear(4u) 1G 38215 11 18678 4 47264 4 171.1 0

blog20060921-RAID0-PDC20270

  1. mdの場合、1unit に比べてRAID0性能向上の傾向が見られるのは 2units(2channel)の readのみで、それ以外は何かの制限がありそうである。
  2. md と dmraid の傾向の違いは、2units(2channel)のread以外は無い。
  3. 2units(2channel)のwriteの性能向上が思ったほど無い。
  4. IDEの1channelに2台ぶら下げると性能向上は望めないと言われているが、 実際の2units(1channel)の性能劣化は予想以上である。
  5. 4unitsは、2units(1channel) からRAID0の性能向上の傾向が見られる。
  6. 単体HDDとraid0(4units)とlinear(4units)の性能がほぼ変わらない。

全体的にHDDの台数に性能がスケールしていない。PCIバスの制約は 133MB/secであり、 約80MB/secの性能が出る場合もあり、PCIバスに制限されているのでは無さそうである。 単純に考えると、IDEの1チャンネルに2台ぶらさがる事が、IDEバスかチップかLinuxのPDC20270用ドライバかで並列化を妨げ「劣化」させる要因になっているようである。

なんとも納得がいかない結果だなぁ。

ベンダー提供のドライバとの比較も必要かも。。。PATAでそこまでするかなぁ。

結論

PATAでは1チャンネルに複数のデバイスをぶら下げるとRAIDの性能向上を妨げるので、1チャンネル1台にしよう。 mdもdmraidも大きな違いが無いが、このRAIDカードではシーケンシャルなreadの性能はmdの方が高かった。PCI(32bit/33Mhz)でぶら下がる RAIDカードに過度に期待しないでおこう。

シーケンシャルI/OだけでなくランダムI/Oの性能評価が出来るようになろう。

2006年9月19日

ディスクIO性能(5) - PDC20270 のRAID機能(dmraid)を探る(3)

dmraid でサポートされるRAIDボリュームはルートファイルシステムに使えないかと思っていた。 dmraid の新しめの版でinitramfs-tools用のフックスクリプトが取り込まれており、dmraidをサポートした initrd イメージが作成できるので、ルートファイルシステムに使えるようである。また debian-installer 用のバイナリパッケージがあるようなので、d-i でさっくり使えるかもしれない(試して無いが、、、)。

ただ物は試しに、インストール済みのファイルイメージをdump/restore して dmraid上のRAIDボリュームに移してみたが普通に使える。

Debian/etchが出た暁には最強に環境になるんだろうなあぁ。

そう言えば、RAIDを組んだDISKの組のことを何て言えば良いのだろう? RAIDボリューム?RAIDアレイ?RAIDセット?ふぅ〜む。

2006年9月13日

grub2 を使ってみる

ThinkPad X41 に入れている Debian/etch を、grub から grub2 に移行してみると、3点で躓いてしまった。

  • grub-probefsが、root権限で起動されたとき正しくファイルシステムを検出してくれない。
  • grub-setupが、正しくルートデバイスを推測してくれない。
  • update-initramfs が grub2 を認識せずに、lilo を使おうとしてしまう。
なので、不足した情報を補う必要がある。

# grub-install --no-floppy --modules="ext2 linux terminal terminfo" /boot/grub
cannot find a GRUB device for /boot/grub.
grub-setup: error: Cannot guess the root device. Specify the option ``--root-device''.
#  grub-setup --directory=/boot/grub --device-map=/boot/grub/device.map -r'(hd0,0)' /dev/sda1
# ln -s /boot/grub/grub.cfg /boot/grub/menu.lst

それをクリアすると、grub の様に使える。。。いや grub とそのまんまである。 grub2 に移行するメリット無しか、grub に止まるメリットが無しか、、、。

md/lvmとかを使うとgrub2の方が活発に開発されるから良いのかなぁ、、、分からん。

2006年9月12日

マザーボードのBIOSが本当に飛んだ!!

ELPIDAのDDR2メモリは、Athlon64とかCoreDuoとかと相性が悪いらしく。これ以上は改善の見込みが無い様なので、新しいメモリを物色。。。

で、Corsair/PC-64000の1Gメモリを4枚買った。その4枚全部をM2NPV-VMのマザーに刺してみたら、メモリエラーが発生してイマイチ動作しない。ただ2枚のみだと安定して動くので、その状態でBIOSの更新をしたら、途中でBeep音が鳴り響き、中断すると、全く立ち上がらなくなった、、、。

はじめてっす。FANが1秒回って電源OFF、CrashFree も機能しない、、、完全敗北。

PLCC引抜治具(1,2)で引き抜いて、ROMライター(1,2)で焼こうかと思いました。でもROMライターは結構良い値段するので諦めて、もう一枚同じマザーボードを買いました。で、確認するとメモリの4枚のうち1枚がメモリエラーで動作不良品だったようです。。。ガックシ。

まだ初物地雷ロードだったようです。

2006年9月5日

ディスクIO性能(4) - PDC20270 のRAID機能(dmraid)を探る(2)

FastTrack100 TX2 (PDC20270)のBIOS画面で RAID Array を定義すると、grubの様なブートローダから一つのディスクとしてアクセスできる。この機能はRAID上のBIOSで提供され、ディスクに障害が発生しても異常停止することなく起動出来るらしい。RAID1 or RAID10などの障害復旧のときの再構築の機能も大抵ある。

そんな素敵な機能を無視して、単体HDDとして扱うために1台のみLinear Arrayとして定義して使うとき気をつけなければいけないことは何だろうか?

RAIDセットの情報は何処?

何か元ディスクのCHSが違うけどどうすればいいの?

マニュアルにはどこにも書いていないが、隠れソフトウェアRAIDのmetadataはディスクの最後尾ほどに書かれている。特にPromise の RAID では最終トラックの最初のセクタ(大抵最後から63セクタ前)にあるらしい。

これを確かめるには、元HDDのセクタ数とdmraidで認識される単体HDDのセクタ数の差を比較すれば良く。

# hdparm -g /dev/hdf
/dev/hdf:
 geometry     = 65535/16/63, sectors = 78165360, start = 0
# dmraid -r /dev/hdf
/dev/hdf: pdc, "pdc_dhgiffaf", linear, ok, 78165297 sectors, data@ 0
# expr 78165360 - 78165297
63

dmraid 経由で扱う場合は気をつける必要は無いのだが、 RAID metadata を踏まない様にパーテションを切る必要がある。

次に、RAIDセットのCHS情報は、元になった単体HDDとは異なる。 正しくはRAIDセットのCHS情報に基づいて、パーテション情報を書かなければならない。

昔ディスクのCHS情報は重要なものだったが、いまはLBA/LBA48なりを拡張INT13Hでアクセスするのが定石らしく、パーテションテーブルには、CHSベースとLBAベースの両方の値がかかれている(参考ディスク情報パーテションテーブル)。

ディスクアクセスにCHSを使うのはDOSか古いブートローダぐらいなので、元になった単体HDDのCHSベースでパーテションを切っても問題無いかと思う(違うかも)。

ただ安全を考えると、dmraid で有効かされたディスクに対して fdisk を実行してパーテションを切った方がよい。その場合、自動的にRAID metadataを外すように割り当ててくれるので、一石二鳥である。

結論

単体HDDとして扱うために1台のみLinear Arrayとして定義して使うときのパーテション切りは、dmraid経由に使わない場合でも、一度 dmraid で有効化させたRAIDセットに対して fdisk を実行しよう。

但し、RAID機能を無効に出来るならばそっちを使おう。

2006年9月1日

MacPortsができてる

OpenDarwin プロジェクトが閉鎖を決めて以来、DarwinPorts がどうなるか注視してきたが どうやら、Mac OS Forge のもとで MacPorts として再出発するようである。何にしてもよかった。

ディスクIO性能(3) - PDC20270 のRAID機能(dmraid)を探る(1)

昔 Promise technology とはLinux界隈では物騒な話があった。そのためか IDE controller が本来の性能が出せなかった時期が長かった。また、Promise社はATA RAIDの雄で良くオンボードRAIDチップとして乗っていた。HardwareRAIDとして売られているが、OSドライバとカード上のBIOSが、RAID機能の100パーセントを提供するHardwareRAIDもどきなので、ベンダーからLinux用の専用ドライバを組み込まないといけない。これが面倒であった。

ただし、オープンソースでのRAIDドライバは開発は進んでおり

  • Linux 2.4 系では ataraid
  • Linux 2.6 系では dmraid
が使える。但し、dmraid は比較的新しいのでディストリビューション側でまだinitrdに組み込まれていないので、ルートファイルシステムに使いたい場合は、手動でなんとかしなければいけないようだ。

dmraid を試す

Debian etch に dmraid 1.0.0 rc9 が含まれるので手軽に試してみよう。

  • ASUS M2NPV-VM
  • Athlon64X2 3800+
  • CD1G-D2U667/ELP (但し、DDR2-533で運用)
  • FastTrack100 TX2 (PDC20270)
  • Seagate ST340015A, 40GB, PATA UDMA100, 2MBキャッシュ, 5400 rpm

RAID0のテスト

  1. カードのBIOS設定(FastBuild Utility)にて 4台HDDの Stripe Array を定義する。
  2. 別HDDにインストール済み Debian/Linux etch システムを起動する。 下記のようにRAIDカードとHDDが認識されているのを確認する
    # dmesg
    ...
    PDC20270: IDE controller at PCI slot 0000:04:09.0
    ACPI: PCI Interrupt Link [APC2] enabled at IRQ 17
    ACPI: PCI Interrupt 0000:04:09.0[A] -> Link [APC2] -> GSI 17 (level, low) -> IRQ 209
    PDC20270: chipset revision 2
    PDC20270: ROM enabled at 0xfda00000
    PDC20270: 100% native mode on irq 209
        ide2: BM-DMA at 0x8c00-0x8c07, BIOS settings: hde:pio, hdf:pio
        ide3: BM-DMA at 0x8c08-0x8c0f, BIOS settings: hdg:pio, hdh:pio
    ...
    Probing IDE interface ide2...
    hde: ST340015A, ATA DISK drive
    hdf: ST340015A, ATA DISK drive
    ide2 at 0x9c00-0x9c07,0x9802 on irq 209
    Probing IDE interface ide3...
    hdg: ST340015A, ATA DISK drive
    hdh: ST340015A, ATA DISK drive
    ide3 at 0x9400-0x9407,0x9002 on irq 209
    ...
    hde: max request size: 128KiB
    hde: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
    hde: cache flushes supported
     hde: unknown partition table
    hdf: max request size: 128KiB
    hdf: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
    hdf: cache flushes supported
     hdf: unknown partition table
    hdg: max request size: 128KiB
    hdg: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
    hdg: cache flushes supported
     hdg: unknown partition table
    hdh: max request size: 128KiB
    hdh: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
    hdh: cache flushes supported
     hdh: unknown partition table
    ...
  3. dmraidをインストール
    # apt-get install dmraid
  4. RAIDセットとデバイスを確認する。
    # dmraid -s
    *** Set
    name   : pdc_gddhfeaj
    size   : 312660992
    stride : 128
    type   : stripe
    status : ok
    subsets: 0
    devs   : 4
    spares : 0
    # dmraid -r
    /dev/hde: pdc, "pdc_gddhfeaj", stripe, ok, 78165248 sectors, data@ 0
    /dev/hdf: pdc, "pdc_gddhfeaj", stripe, ok, 78165248 sectors, data@ 0
    /dev/hdg: pdc, "pdc_gddhfeaj", stripe, ok, 78165248 sectors, data@ 0
    /dev/hdh: pdc, "pdc_gddhfeaj", stripe, ok, 78165248 sectors, data@ 0
  5. RAIDセットの有効化
    # dmraid -a yes -v
    INFO: Activating stripe RAID set "pdc_gddhfeaj"
    これでRAIDセット /dev/mapper/pdc_gddhfeaj として1つのブロックデバイスに見えるようになる。
  6. fdisk でパーティションを切る。パーティションを再認識させるためには、該当RAIDセットの無効化&有効化を行う。
    # fdisk /dev/mapper/pdc_gddhfeaj
    ...
    # /etc/init.d/dmraid restart
    Shutting down DMRAID devices... RAID set "pdc_gddhfeaj1" is not active
    INFO: Deactivating partition RAID set "pdc_gddhfeaj1"
    INFO: Deactivating stripe RAID set "pdc_gddhfeaj"
    .
    Setting up DMRAID devices...INFO: Activating stripe RAID set "pdc_gddhfeaj"
    INFO: Activating partition RAID set "pdc_gddhfeaj1"
    .
  7. ファイルシステムを作る。
    # mkfs.ext3 -E stride=16 /dev/mapper/pdc_gddhfeaj1
    ext3 では、RAIDセットのchunk sizeをファイルシステムのブロック単位で指定すると、少し適した配置をしてくれる。
  8. 再起動を行い問題なく立ち上がるか確認する。

再起動後に、下記のようなメッセージが出る場合は運用は諦めよう!似たようなバグ報告があるのでそのうち直るかも。

hde: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
hde: task_in_intr: error=0x10 { SectorIdNotFound }, LBAsect=156393776, sector=156328497
ide: failed opcode was: unknown
PDC202XX: Primary channel reset.
ide2: reset: success
hde: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
hde: task_in_intr: error=0x10 { SectorIdNotFound }, LBAsect=156393776, sector=156328497
ide: failed opcode was: unknown
end_request: I/O error, dev hde, sector 156328497
上記は実際、2台のRAID0を構築したときに発生した。単体HDDより大きなサイズのパーティションを作成した場合のみ起き、上記のエラーログが延々出力され、起動が完了しない(shellも使えない)。運良く KNOPPIX 5 だとエラーを吐きながらも起動が完了するので、fdisk等でパーティションを書き換えることができた。4台では起きないのでかなりレアな条件が重なるとエラーになるっぽいなぁ。

RAID1のテスト

  1. カードのBIOS設定(FastBuild Utility)にて 2台HDDの Mirror Array を定義する。
  2. あとはRAID0と変わらない
    
    # dmraid -s
    *** Active Set
    name   : pdc_gdijjjaf
    size   : 78165248
    stride : 128
    type   : mirror
    status : ok
    subsets: 0
    devs   : 2
    spares : 0
    # dmraid -a yes -v
    INFO: Activating mirror RAID set "pdc_gdijjjaf"
    # fdisk /dev/mapper/pdc_gdijjjaf
    ...
    # /etc/init.d/dmraid restart
    ...
    # mkfs.ext3 /dev/mapper/pdc_gdijjaf1
    
RAIDセットと元の単体HDDの総セクター数は、RAIDセットの方が必ず小さくなるのでRAID0であったような起動時の異常は起きそうにはない。

結論

安全を考えるとまだdmraidの安定運用はRAID1以外では期待できないのだろうなぁ。運が良ければ、RAID0/RAID10/RAID5が運用できそうだなぁ。

Cocoa Emacs 24.3 構築 (2013/03版)

暫く使っている Cocoa Emacs を更新していなかったので、24.3 に上げてみた。 当てるパッチは inline patch と ポップアップフリーズ対応パッチ くらい。 24.3 には既にフルスクリーン実装が入っているので、よく使われているフルスクリーンパッチは外し...