Solaris


Solaris関連のメモ帳

 サーバ環境

旧1(〜2011/06/19)

  • CPU AMD Athlon II X4 605e
  • Motherborard Foxconn A7DA-S 3.0
  • Memory DDR3 1333 4GB x4
  • SAS Card LSI SAS 9211-8i
  • NIC Card Intel 1000CT x2
  • Infiniband Card IBM 44R8728 ConnectX Dual-Port 4X DDR IB PCIe 2.0 HCA x1
  • HDD Hitachi HTS725032A9A364 x1
  • HDD ST32000542AS x11
  • HDD OCZ-VERTEX2 x1
  • OS Nexenta Core 3.01 add private patch

旧2(〜2011/09/01)

  • CPU Intel Xeon X3430
  • Motherborard SuperMicro X8SIA-F
  • Memory DDR3 ECC Reg 1066 8GB x2
  • SAS Card LSI SAS 9211-8i
  • NIC Card OnBoard Intel 82574L x2
  • NIC Card Myri10G x 1
  • Infiniband Card Mellanox ConnectX Single-Port 4X QDR IB PCIe 2.0 HCA x1
  • HDD Hitachi HTS725032A9A364 x1
  • HDD ST32000542AS x12
  • HDD OCZ-VERTEX2 x1
  • OS Nexenta Core 3.01 add private patch

移行中の仮サーバ

  • CPU AMD Athlon II X4 605e
  • Motherborard Foxconn A7DA-S 3.0
  • Memory DDR3 1333 4GB x2
  • SAS Card LSI SAS 1064E-4i
  • NIC Card Intel 1000CT x1
  • Infiniband Card IBM 44R8728 ConnectX Dual-Port 4X DDR IB PCIe 2.0 HCA x1
  • HDD 160GB x1
  • HDD 500GB x4
  • HDD HDS5C3030ALA630 x4
  • OS Solaris 11 Express

新(現在移行中)

  • CPU Intel Xeon X3460
  • Motherborard SuperMicro X8SIA-F
  • Memory DDR3 ECC Reg 1066 8GB x4
  • SAS Card LSI SAS 9210-8i(IBM M1015IT ファームへ書き換え) x 2
  • NIC Card OnBoard Intel 82574L x2
  • NIC Card Intel 1000VT Quad port adapter
  • InfiniBand Card IBM 44R8728 ConnectX Dual-Port 4X DDR IB PCIe 2.0 HCA x1
  • HDD Hitachi HTS725032A9A364 x1
  • HDD ST32000542AS x10
  • HDD HDS5C3030ALA630 x6
  • HDD OCZ-VERTEX2 x1
  • OS Nexenta Core 3.1

 Webから色々管理

楽するなら、napp-itがお勧め。
InfiniBand関係の設定はできないけど、ZFSとかCOMSTAR周りの設定がすごい楽になります。

 Solarisにて標準で認識したデバイス

Solaris11

  • Storage
    • LSI MegaRaid 9220-8i
    • LSI SAS HBA 9210-8i
    • Intel 6G SATA
    • Intel 3G SATA
    • Adaptec ASR-6405E 動作せず
  • Network
    • Intel 82579L GbE
    • Intel 82574L GbE (1000CT)
  • InfiniBand
    • MHQH19B-XTC

Solaris 11 EA

  • Storage
    • AMD 690G AHCI
  • Netowerk
    • INtel 82574L GbE (1000CT)
  • InfiniBand
    • MHEA-1TC

OpenIndiana 151a

  • Storage
    • LSI SAS HBA 9210-8i
    • Intel 3G SATA
  • Network
    • Intel 82576 GbE (GigabitET)
  • InfiniBand
    • MHQH19-XTC

Solaris Express 11

  • Storage
    • LSI SAS HBA 9211-8i
    • AMD 785G AHCI
  • Network
    • Intel 82574L GbE (1000CT)
  • InfiniBand
    • MHQH19-XTC

NexentaCore

  • Storage
    • LSI SAS HBA 9210-8i x 2
    • Intel SAS Expander Board
    • Intel 3G AHCI
  • Network
    • Intel 82575 GbE (1000VT)
    • Intel 82574L
  • InfiniBand
    • MHEA28-2TC
    • MHEA28-1TC(HP OEM)
    • MHGH28-XTC(HP OEM)
    • MHGH29-XTC(IBM OEM)
    • MHQH19-XTC
    • MHQH29-XTC

 カーネルパラメータ

kernelパラメータの設定方法

  • bootで読み込ます場合

/etc/systemへ設定
設定を書き込む場合は以下のように

set zfs:zfs_arc_max=0x4002000

  • zfsのdiskへの書込タイミングの変更・確認方法
# echo zfs_txg_timeout/D | mdb -k
zfs_txg_timeout:
zfs_txg_timeout:30 
# echo zfs_txg_timeout/W0t1 | mdb -kw
zfs_txg_timeout:0x1e            =       0x1
# echo zfs_txg_timeout/D | mdb -k
zfs_txg_timeout:
zfs_txg_timeout:1
# echo zfs_txg_timeout/W0t30 | mdb -kw
zfs_txg_timeout:0x1             =       0x1e
# echo zfs_txg_timeout/D | mdb -k
zfs_txg_timeout:
zfs_txg_timeout:30 

  • zfs

一部のデバイスだけキャッシュコマンドを無視する設定、sd.confへ指定する。

sd-config-list = "ATA     Super Duper     ", "nvcache1";
nvcache1=1, 0x40000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1;

OpenIndianaでの4kセクタのディスクの直接指定方法は、上記と同様にsd.confへ指定

# ashift=12 (4KB sector)
sd-config-list =
       "ATA     OCZ-VERTEX4     ", "physical-block-size:4096";

上記の名前の指定は、formatコマンドを実行して、指定のDiskのVendor(8文字)とProduct(16文字)を指定する

root@openindiana-test:~# format
Searching for disks...done


AVAILABLE DISK SELECTIONS:
       0. c4t5E83A97A8F49D19Fd0 <ATA-OCZ-VERTEX4-1.5-119.24GB>
          /scsi_vhci/disk@g5e83a97a8f49d19f
       1. c4t5E83A97B88DD3FA2d0 <ATA-OCZ-VERTEX4-1.5-119.24GB>
          /scsi_vhci/disk@g5e83a97b88dd3fa2
       2. c4t5E83A97F6598C0C0d0 <ATA-OCZ-VERTEX4-1.5-119.24GB>
          /scsi_vhci/disk@g5e83a97f6598c0c0
       3. c4t5E83A973EA35E88Ad0 <ATA-OCZ-VERTEX4-1.5-119.24GB>
          /scsi_vhci/disk@g5e83a973ea35e88a
       4. c5t0d0 <ATA-KINGSTONSVP100S-0202 cyl 14948 alt 2 hd 224 sec 56>
          /pci@0,0/pci15d9,62a@1f,2/disk@0,0
Specify disk (enter its number): 0
selecting c4t5E83A97A8F49D19Fd0
[disk formatted]
/dev/dsk/c4t5E83A97A8F49D19Fd0s0 is part of active ZFS pool datapool. Please see zpool(1M).


FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        !<cmd>     - execute <cmd>, then return
        quit
format> inquiry
Vendor:   ATA
Product:  OCZ-VERTEX4
Revision: 1.5

l2arc_headroomの設定
コマンドライン

# echo  l2arc_headroom/W0t8 | mdb -kw
l2arc_headroom: 0x2             =       0x8

起動時に設定反映
/etc/systemに

set zfs:l2arc_headroom=8

  • おうちのnexentaの設定ファイルとsolaris 11 EAの設定ファイル

zfsの読込が遅いのはここら辺に問題あるのかも
あと、現在は使用されていないパラメータもセットされてる可能性あり

#set mptsas:mptsas_enable_msi=0
set ddi_msix_alloc_limit=4
#set zfs:txg_time=1
#set zfs_txg_timeout=1
set zfs:zfs_txg_timeout=14
set zfs:zfs_prefetch_disable=1
set zfs:zfs_vdev_min_pending=1 
#set zfs:zfs_vdev_min_pending=8
set zfs:zfs_vdev_max_pending=10
set zfs:zfs_vdev_cache_bshift=13
set zfs:zfs_nocacheflush = 1

solaris 11 EAだと、何も自分で弄ってないけど、下記設定が

set zfs:zfs_arc_max=0x4002000
set zfs:zfs_vdev_cache_size=0

solaris 11 EAのパラメータを弄った結果(echo "::zfs_params" | mdb -kM)
これでも、上記のNexetaCoreよりも128kbのブロックサイズだと遅い

arc_reduce_dnlc_percent = 0x3
zfs_arc_max = 0x780000000
zfs_arc_min = 0x0
arc_shrink_shift = 0x5
zfs_mdcomp_disable = 0x0
zfs_prefetch_disable = 0x1
zfetch_max_streams = 0x8
zfetch_min_sec_reap = 0x2
zfetch_block_cap = 0x100
zfetch_array_rd_sz = 0x100000
zfs_default_bs = 0x9
zfs_default_ibs = 0xe
metaslab_aliquot = 0x80000
mdb: variable reference_tracking_enable not found: unknown symbol name
mdb: variable reference_history not found: unknown symbol name
spa_max_replication_override = 0x3
spa_mode_global = 0x3
zfs_flags = 0x0
zfs_txg_synctime_ms = 0x2710
zfs_txg_timeout = 0xf
zfs_write_limit_min = 0x2000000
zfs_write_limit_max = 0xffde7800
zfs_write_limit_shift = 0x3
zfs_write_limit_override = 0x0
zfs_no_write_throttle = 0x0
zfs_vdev_cache_max = 0x4000
zfs_vdev_cache_size = 0xa00000
zfs_vdev_cache_bshift = 0xd
vdev_mirror_shift = 0x15
zfs_vdev_max_pending = 0xa
zfs_vdev_min_pending = 0x1
zfs_vdev_future_pending = 0x1
zfs_scrub_limit = 0xa
zfs_no_scrub_io = 0x0
zfs_no_scrub_prefetch = 0x0
zfs_vdev_time_shift = 0x6
zfs_vdev_ramp_rate = 0x2
zfs_vdev_aggregation_limit = 0x20000
fzap_default_block_shift = 0xe
zfs_immediate_write_sz = 0x8000
zfs_read_chunk_size = 0x100000
zfs_nocacheflush = 0x1
zil_replay_disable = 0x0
metaslab_gang_threshold = 0x100001
metaslab_df_alloc_threshold = 0x100000
metaslab_df_free_pct = 0x4
zio_injection_enabled = 0x0
zvol_immediate_write_sz = 0x8000

現在使ってるOpenIndianaでの /etc/system

set ddi_msix_alloc_limit=8
#set pcplusmp:apic_multi_msi_max=8
#set pcplusmp:apic_msix_max=8
set pcplusmp:apic_intr_policy=1
set srpt:srpt_errlevel=2
set zfs:zfs_arc_max=0x1700000000
#set zfs:zfs_txg_timeout=14
set zfs:l2arc_headroom=8
set ndd:tcp_wscale_always=1
set ndd:tcp_tstamp_if_wscale=1
set ndd:tcp_max_buf=16777216
set ndd:tcp_cwnd_max=8388608
set ndd:tcp_xmit_hiwat=1048576
set ndd:tcp_recv_hiwat=1048576

  • TCP/IP絡みの設定

nddで毎回設定するのは面倒なので、/etc/systemで指定する。
以下を追加

set ndd:tcp_wscale_always=1
set ndd:tcp_tstamp_if_wscale=1
set ndd:tcp_max_buf=16777216
set ndd:tcp_cwnd_max=8388608
set ndd:tcp_xmit_hiwat=1048576
set ndd:tcp_recv_hiwat=1048576

CPUアフィニティの変更

複数の割り込みを同一のCPUに割り当てないように、割り当てCPUを変更する
NexentaCoreでは、「sunwio-tools」にpcitoolが入ってる。
今回はmpt_sas13のデバイスを変更する
CPUコアの状態を確認

root@nexenta:~# psrinfo -pv
The physical processor has 4 cores and 8 virtual processors (0-7)
 The core has 2 virtual processors (0 4)
 The core has 2 virtual processors (1 5)
 The core has 2 virtual processors (2 6)
 The core has 2 virtual processors (3 7)
   x86 (GenuineIntel 106E5 family 6 model 30 step 5 clock 2800 MHz)
     Intel(r) Xeon(r) CPU           X3460  @ 2.80GHz

現在のCPUへの割り込みの割り当てを確認

# echo '::interrupts -d' | mdb -k

どのデバイス下にいるかチェック

root@nexenta:~# cat /etc/path_to_inst | grep mpt_sas
"/pci@0,0/pci8086,d138@3/pci1000,3040@0" 0 "mpt_sas"
"/pci@0,0/pci8086,d138@3/pci1000,3040@0/iport@8" 1 "mpt_sas"
"/pci@0,0/pci8086,d138@3/pci1000,3040@0/iport@10" 3 "mpt_sas"
"/pci@0,0/pci8086,d138@3/pci1000,3040@0/iport@20" 5 "mpt_sas"
"/pci@0,0/pci8086,d138@3/pci1000,3040@0/iport@40" 7 "mpt_sas"
"/pci@0,0/pci8086,d138@3/pci1000,3040@0/iport@80" 9 "mpt_sas"
"/pci@0,0/pci8086,d138@3/pci1000,3040@0/iport@v0" 11 "mpt_sas"
"/pci@0,0/pci8086,d13a@5/pci111d,806f@0/pci111d,806f@4/pci1000,3040@0" 13 "mpt_sas"
"/pci@0,0/pci8086,d13a@5/pci111d,806f@0/pci111d,806f@4/pci1000,3040@0/iport@8" 2 "mpt_sas"
"/pci@0,0/pci8086,d13a@5/pci111d,806f@0/pci111d,806f@4/pci1000,3040@0/iport@10" 4 "mpt_sas"
"/pci@0,0/pci8086,d13a@5/pci111d,806f@0/pci111d,806f@4/pci1000,3040@0/iport@20" 6 "mpt_sas"
"/pci@0,0/pci8086,d13a@5/pci111d,806f@0/pci111d,806f@4/pci1000,3040@0/iport@40" 8 "mpt_sas"
"/pci@0,0/pci8086,d13a@5/pci111d,806f@0/pci111d,806f@4/pci1000,3040@0/iport@80" 10 "mpt_sas"
"/pci@0,0/pci8086,d13a@5/pci111d,806f@0/pci111d,806f@4/pci1000,3040@0/iport@v0" 12 "mpt_sas"

上記で/pci@0,0の下にいる事を確認
で、pcitoolで変更したいデバイスのinoを探す。

root@nexenta:~# pcitool /pci@0,0 -i all
[snip]
ino 0x42 mapped to cpu 0x7
Device: /pci@0,0/pci8086,d13a@5/pci111d,806f@0/pci111d,806f@4/pci1000,3040@0
  Driver: mpt_sas, instance 13
[/snip]

現在は、ino 0x42で、cpu7へ割り当てられるのが確認できる。
inoが解れば、以下のコマンドでCPU0へ変更

root@nexenta:~# pcitool /pci@0,0 -i 42 -w 0

-iがinoで、-wで変更したいCPU番号へ

割り込みについて

割り込みがどのCPUに割り当てられてるか確認

# echo '::interrupts -d' | mdb -k

現在どれ位割り込みが発生しているかを確認

root@nexenta:~# intrstat

社外ドライバの追加

ASR-6445を使用する為に、Adaptecの純正ドライバを追加する。
1 - Solaris11でASR-6445とか比較的新しいAdaptecのカードを使用する為にAdaptec純正ドライバに変更する。
2 - Adaptecのサイトから最新のドライバをダウンロードしてくる。Solaris11用はなかったので、Solaris10用を落とした。
3 - 現在の環境のクローンを作成するコマンドを実行

    # beadm create solaris11_aacdriver

4 - 新しい環境を(/aac)にマウントする

    # beadm mount solaris11_aacdriver /aac

5 - 新しい環境から、標準のaacドライバを削除する

    # pkg -R /aac uninstall aac

6 - Adaptecのサイトからダウンロードしたファイルを、/tmp/aacに展開し新環境へインストール。

    # pkgadd -R /aac  -d /tmp/aac/aac.pkg

7 - 新環境をアンマウントする

    # beadm unmount -f solaris11_aacdriver

8 - 新環境でブートするようにアクティブにする

    # beadm activate solaris11_aacdriver

9 - 再起動

    # reboot -p

結局認識せず orz


 Disk関係

Disk操作について

  • 接続されてるDiskの確認
#  format
  • SMARTの確認(AHCIインターフェイス)
# smartctl -d sat,12 -a /dev/rdsk/c0t2d0s2
  • SMARTの確認(SASインターフェイス)
# smartctl -d sat,12 -a /dev/rdsk/c3t5000C5002A6E7180d0s2
  • 内蔵SATAデバイスのHotSwap(取り外し)
# cfgadm -c unconfigure sata0/2
  • 内蔵SATAデバイスのHotSwap(取り付け)
# cfgadm -c configure sata0/2
  • SAS/SATAデバイスの確認
# cfgadm -al
  • Disk I/Oの状態確認
# iostat -xtC 1

上記だと一秒ごとのI/O状況を表示

  • SAS HBAに刺さったディスクの交換の方法

下記のコマンドで交換するDISKを確認

# cfgadm -al
Ap_Id                          Type         Receptacle   Occupant     Condition
c5                             scsi-sas     connected    configured   unknown
c5::es/ses0                    ESI          connected    configured   unknown
c5::smp/expd0                  smp          connected    configured   unknown
c5::w5000c50007281739,0        disk-path    connected    configured   unknown
c5::w5000c5002a6df19c,0        disk-path    connected    configured   unknown
c5::w5000c5002a6e7180,0        disk-path    connected    configured   unknown
c5::w5000c5002a6e9583,0        disk-path    connected    configured   unknown
c5::w5000c5002b5e690f,0        disk-path    connected    configured   unknown
c5::w5000c50024c8d5a2,0        disk-path    connected    configured   unknown
c5::w5000c5002077d17c,0        disk-path    connected    configured   unknown
c5::w5000c5003260bad1,0        disk-path    connected    configured   unknown
c5::w5000cca228c13f55,0        disk-path    connected    configured   unknown
c5::w5000cca228c13fc7,0        disk-path    connected    configured   unknown
c5::w5000cca228c14dc4,0        disk-path    connected    configured   unknown
c5::w5000cca228c14189,0        disk-path    connected    configured   unknown
c6                             scsi-sas     connected    configured   unknown
c6::w5000cca228c13cbc,0        disk-path    connected    configured   unknown
c7                             scsi-sas     connected    configured   unknown
c7::w5000c5002a6d8391,0        disk-path    connected    configured   unknown
c8                             scsi-sas     connected    configured   unknown
c8::w5000c5002b5cd734,0        disk-path    connected    configured   unknown
c9                             scsi-sas     connected    configured   unknown
c9::w5000c5002b557147,0        disk-path    connected    configured   unknown
c10                            scsi-sas     connected    unconfigured unknown
hca:2C90300065766              IB-HCA       connected    configured   ok
ib                             IB-Fabric    connected    configured   ok
ib::2C90300065767,0,ipib       IB-PORT      connected    configured   ok
ib::daplt,0                                 connected    configured   ok
ib::eibnx,0                                 connected    configured   ok
ib::iser,0                                  connected    configured   ok
ib::rdsib,0                                 connected    configured   ok
ib::rdsv3,0                                 connected    configured   ok
ib::rpcib,0                                 connected    configured   ok
ib::sdpib,0                                 connected    configured   ok
ib::sol_umad,0                              connected    configured   ok
ib::sol_uverbs,0                            connected    configured   ok
ib::srpt,0                                  connected    configured   ok
sata0/0::dsk/c4t0d0            disk         connected    configured   ok
sata0/1                        sata-port    empty        unconfigured ok
sata0/2                        sata-port    empty        unconfigured ok
sata0/3                        sata-port    empty        unconfigured ok
sata0/4                        sata-port    empty        unconfigured ok
sata0/5::dsk/c4t5d0            disk         connected    configured   ok

今回は、「c5::w5000c50007281739,0」を取り外す。

# cfgadm -c unconfigure c5:::w5000c50007281739,0

SAS Expanderに、SATAとSASがMixされて刺さってるため、今回は失敗 orz

Diskの止まる対策かも

/kernel/drv/sd.confに以下の行を追加

allow-bus-device-reset=0;

まだテストしていないので、治るかわかりません。
ちなみに、SASとSATAの混合したExpandersでのReset Stormを止める方法みたい。

使用していないときにDiskをSpinDownさせる

/etc/power.confに以下の行を追加(ディスクの指定部分は各自の環境で書換の事)
・LSIの場合

device-thresholds /scsi_vhci/disk@g50014ee2ae83efdd 5m

・AHCI等の場合

 device-thresholds /pci@0,0/pci1043,82d4@1f,2/disk@4,0 1200s

pmconfig実行して設定を反映

# pmconfig

Ramdisk作成方法

/etc/systemに以下を追加

set ramdisk:rd_percent_physmem=80

数字はメモリ容量に対するパーセンテージ
設定後、一度再起動。
実際にRamdisk作成は以下のコマンドで

# ramdiskadm -a ramdsk0 10g

上記では、ramdsk0を10GBで作成している。
作成したRamdiskは以下にできてるので、後は適当に

/dev/ramdisk/

 その他

mpt_sasで認識したドライブのデバイス名が異常に長い

これ、mpt_sasドライバの仕様。長いのは諦めましょうw