SSDでのUDMA2病対処方法 Puppy528JP

パピーを名犬にするための技、テクニック

モデレータ: 暇人, YoN, nyu

返信する
heikichi
記事: 13
登録日時: 14/05/01(木) 11:21

SSDでのUDMA2病対処方法 Puppy528JP

投稿記事 by heikichi »

私のNEC LM3001DG, Celeron800MHz, チップセットVIAは、実はWindowsXP時代からバッファローのSSDに換装していまして、そのときからUDMA2病で、今まで「まあ、いいか」で来ていました。このたび、Puppy 5.2.8JPでUDMA2を脱し、UDMA5 ATA/100にすることに成功したので一応ご参考に。
ネットではLinuxでのUDMA2病対処策がいろいろと紹介されていますが、Puppyではどんな方法がいいのか思案していました。私の場合、hdparmの-xコマンドではUDMAのモードを切り替えることは受付られませんでした。いろいろな記事を参考にしてほかの方法も試したところたまたま成功しました。あくまでも私の環境でですが・・・

menu.lstのKernelの行にlibata.force=1.00:udma5,noncqを追記するだけです。noncqは環境により記述しなくてもいいかもしれません。
私のmenu.istの例です。

title My OS 528JP
find --set-root --ignore-floppies /Puppy-Linux-528JP/initrd.gz
kernel /Puppy-Linux-528JP/vmlinuz psubdir="Puppy-Linux-528JP" pfix=fsck libata.force=1.00:udma5,noncq
initrd /Puppy-Linux-528JP/initrd.gz
boot

脱線しますが、titleのところは自分で名前がつけられるのですね。日本語フォントは無理のようですが・・・
この方法なら、とても簡単です。ヒントになったのはacpi=forceの対処策の記事だったのですが、ここには起動時のカーネルのオプションを指定でき、confファイルをいじって再構築とかと比べて簡単です。万一に備えてオリジナルの起動メニューもバックアップしておけばいいですしね。

結果
hdparmコマンドでの設定確認結果。hdparmはpuppy標準搭載だったか自分でインストールしたのか忘れてしまいました・・・・
みると、ちゃんとUDMA5になっています。
# hdparm -I /dev/sda1

/dev/sda1:

ATA device, with non-removable media
Model Number: BUFFALO SHD-NPUM32G
Serial Number: ---------
Firmware Revision: 04.90310
Standards:
Supported: 7 6 5 4
Likely used: 7
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 63078400
LBA48 user addressable sectors: 63078400
Logical Sector size: 512 bytes
Physical Sector size: 512 bytes
device size with M = 1024*1024: 30800 MBytes
device size with M = 1000*1000: 32296 MBytes (32 GB)
cache/buffer size = unknown
Nominal Media Rotation Rate: Solid State Device
Capabilities:
LBA, IORDY(can be disabled)
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 1 Current = 1
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
* Power Management feature set
* Look-ahead
* WRITE_BUFFER command
* READ_BUFFER command
* 48-bit Address feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
Integrity word not set (found 0x0000, expected 0x8fa5)

テスト結果
# hdparm -Tt /dev/sda1

/dev/sda1:
Timing cached reads: 250 MB in 2.01 seconds = 124.35 MB/sec
Timing buffered disk reads: 180 MB in 3.00 seconds = 60.00 MB/sec

UDMA2病では25MB/secでした。ちなみにUDMA4に設定して約50MB/sec、UDMA5でも60MB/secなのは、こんなものなのであることとチップセット、旧機であるハードの限界ですね。たぶん。でも以前より早くなったので満足です。

dmesgの結果です。
# dmesg
(関係個所だけ抜粋)
ata1.00: FORCE: horkage modified (noncq)
ata1.00: ATA-7: BUFFALO SHD-NPUM32G, 04.90310, max UDMA/100
ata1.00: 63078400 sectors, multi 1: LBA48
ata1.00: limited to UDMA/33 due to 40-wire cable
ata1.00: FORCE: xfer_mask set to udma5
ata1.00: configured for UDMA/100

40芯ケーブルのためUDMA/33になると記述されていますがコマンドが効いて
ちゃんと強制的にUDMA/100に設定されてしまっています。

SSDユーザーにとってUDMA2病は悩みの種ですが、Puppyでは起動時の設定で回避できてしまいました。
Puppyってすごいですね。
返信する