Sharing

2012年5月31日 星期四

Install Ubuntu 12.04 on USB by VMware

上一次有提到 bootable USB 要怎麼做, 可以利用 Unetbootin 這個工具來做

http://unetbootin.sourceforge.net/

但我今天試著用這個工具做出來的 USB, 雖然的確可以開機, 但結果就和開機光碟一樣, 會進入安裝模式, 即使進入 command line 模式, 也因為工具太少, 而做不了什麼事, 所以就找了一下別人是怎麼做 LiveUSB.

https://help.ubuntu.com/community/Installation/FromUSBStick#From_Ubuntu_Linux
http://mintarticles.com/read/operating-systems-articles/how-to-install-portable-linux-ubuntu-on-a-bootable-usb-flash-drive-from-sun-virtualbox,13641/

大至上就是真的把 Ubuntu 裝一次, 但裝在 USB 上面, 做法你可以真的拿一台機器來裝, 但文章中都提到使用 VirtualBox 來裝, 也就是虛擬機器. 我對 VirtualBox 不太熟, 反而對 VMware Player 比較熟一點, 所以就試著用它來裝裝看

首先創造一個 Virtual Machine, 安裝 iso 檔就以 Ubuntu 12.04 server amd64 為例


到最後一個畫面時, 把 "Power on this virtual machine after creation" 勾選去掉, 先不要讓他開機


接下來把剛剛新加入的 VM 打開來, 把 Hard Disk 砍掉


接下來第一個光碟的 "connect at power on"  也不要勾選, 他會讓 Virtual Machine 自動安裝


USB 的部份, 則是把 "Show all USB input devices" 勾選起來


接下來就可以開機了, 第一次開機會用光碟開機, 因為要安裝 Ubuntu 12.04, 趁他開機的時間記得把 USB 接上去, 在右下角其中有一個 icon 代表著 USB, 把 Connect 按下去後, 他就會把 USB 轉接到 VM 上面去



因為沒有硬碟, 你唯一看到的就是 16G 的 USB, 就裝上去吧!


裝好之後, 要試驗一下他是否真的能開機, 但比較麻煩的是,  VMware Player 的虛擬主機版很舊, 所以無法用 USB 開機, 但有厲害的人做好另一個開機光碟可以間接讀取 USB

http://theholyjava.wordpress.com/2010/06/10/booting-from-a-usb-stick-in-vmware-player/


把 plpbt 下載下來後, 裡面有一個 plpbt.iso 檔, 我們就把它掛戴到第一個光碟機, 並且把 "Connect at power on" 勾選起來



開機的畫面如下, 就可以選 USB 開機囉!





2012.06.01 補:
如果要把 USB 做成 .img 檔,  Linux 上可以直接用 dd,  window 上可以用 usbit 這個小工具
http://www.alexpage.de/usb-image-tool/

2012.06.01 補:
結果今天前輩告訴我... 如果只是要做一個 linux-like 的 liveCD 不用這麼麻煩...
到這個網站下載就可以了, 而且還是 iso 檔... Orz
http://www.sysresccd.org/SystemRescueCd_Homepage

2012年5月30日 星期三

xrdp/mstsc in Ubuntu12.04


http://www.liberiangeek.net/2012/05/connect-to-ubuntu-12-04-precise-pangolin-via-windows-remote-desktop/

pjack@ubuntu04:~$ sudo apt-get install xrdp
pjack@ubuntu04:~$ echo "gnome-session --session=ubuntu-2d" > ~/.xsession

下面兩行我不知道是否必要.. 但因為不小心我就裝了
pjack@ubuntu04:~$ sudo apt-get install gnome-shell
pjack@ubuntu04:~$ sudo apt-get install gnome-session-fallback

之後就可以用 window 的遠端連線(mstsc) 連上去了


不過試了一早上, 想要解決在 windows/linux 之間不能 copy/paste 的問題, 但仍試不出來
試著裝 autocutsel 也無法解決, 最後就放棄了.. 如果有人知道要怎麼弄再和我說吧~

另外發現如果裝了 tightvncserver, vnc 連線會一直有問題, 連了之後, 只要打開任一個 App, 就會 crash
也不知道是怎麼一回事 :(

Device Mapper 筆記


official site
http://sourceware.org/dm/

Definition
http://en.wikipedia.org/wiki/Device_mapper

Document
           左邊有很多章節可以點選, 不過只有 snapshot 那章和 device mapper 最直接相關
          redhat 的文件, 但寫到後來都在寫 LVM
          這一份寫在 LVM 的 appendix, 前半段和上一份一樣的內容, 不過後半段有解釋比較多指令用法
上一份的中文版
          IBM 的 technical 文章, 第一篇幾乎都是講 lvm, 第二篇有講到實作概念, 不過少了 snapshot 這部份, 是一篇很老的文章
          Linux man page

Demo
http://linuxgazette.net/114/kapil.html


筆記:


  • LVM2 每次 create snapshot 時總共會製造四個 device


/dev/sda  dm-base-real(rw)  dm-base (ro) 
       ├ dm-snap  (rw)
                /dev/sdb  dm-snap-cow(rw)                        


  • snapshot

          P (Persistent) or N (Not persistent); indicates whether snapshot will survive after reboot
          chunksize; Size in sectors of changed chunks of data that will be stored on the COW device



不明白的東西其實還有一些

  1. chunk 的意義還搞不太清楚
  2. 可以做 snapshot 的 snapshot?
  3. ...








2012年5月29日 星期二

Openstack Essex - Nova Volume


之前在裝 Openstack 時, 沒有裝 nova-volume, 所以都無法 attach 一個 persistent storage
其實在玩的過程, 也可以間接了解一下 Openstack 對於這塊的設計方式

安裝上沒有很困難, nova.conf 相關的設定是 volume_driver, 預設是 compute 端使用 iscsi 連線, controller 用 LVM 來管理
volume_driver = "nova.volume.driver.ISCSIDriver"
所以要記得在 lvm 裡面加上一個叫 nova-volumes 的 virtual group

wistor@ubuntu83:~$ sudo apt-get install -y nova-volume
wistor@ubuntu83:~$ sudo vgcreate nova-volumes /dev/sdb
  No physical volume label read from /dev/sdb
  Physical volume "/dev/sdb" successfully created
  Volume group "test" successfully created


http://www.mail-archive.com/openstack@lists.launchpad.net/msg07989.html

在 nova 裡面, 它將 volume 分成了兩個類型, 一種是關機後就會消失的 ephemeral volume, 另一種則是會繼續存在的 persistent volume, 即使 Virtual Machine 關機後, 你仍可以產生新的 Virtual Machine, 然後將這個 persistent volume 掛上去

而 ephemeral volume 目前會用在兩個地方, 第一個是開機用的主硬碟 (Root Disk), 如果你跑的程式有需要使用額外的空間, 那可以要求多一顆暫用硬碟(Ephemeral Disk), 但仍要注意這個 disk 在關機後就會消失.

我們可以在 Flavor 內看到 Openstack 預設的幾種組合(tiny 的那個雖然寫著沒有 root disk, 但其實仍然有, 只是比較小, 只有 2G)


m1.tiny (1VCPU / 0GB disk / 512MB RAM) 的狀況

ubuntu@vm1:~$ sudo fdisk -l
Disk /dev/vda: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *       16065     4192964     2088450   83  Linux


ubuntu@vm1:~$ sudo less /proc/meminfo | grep -i total
MemTotal:         503520 kB
SwapTotal:             0 kB
VmallocTotal:   34359738367 kB
HugePages_Total:       0

ubuntu@vm1:~$ sudo less /proc/cpuinfo | grep CPU
model name      : QEMU Virtual CPU version 1.0

ubuntu@vm1:~$ sudo df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       2.0G  667M  1.3G  35% /
udev            242M   12K  242M   1% /dev
tmpfs            99M  204K   99M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            246M     0  246M   0% /run/shm


m1.small (1VCPU / 10GB disk / 2048MB RAM) 的狀況, 可以看到比 m1.tiny 多了一個 /dev/vdb , 大小是 20G

ubuntu@vm2:~$ sudo fdisk -l

Disk /dev/vda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *       16065    20964824    10474380   83  Linux

Disk /dev/vdb: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/vdb doesn't contain a valid partition table

ubuntu@vm2:~$ sudo less /proc/meminfo | grep -i total
MemTotal:        2051772 kB
SwapTotal:             0 kB
VmallocTotal:   34359738367 kB
HugePages_Total:       0

ubuntu@vm2:~$ sudo less /proc/cpuinfo | grep CPU
model name      : QEMU Virtual CPU version 1.0

ubuntu@vm2:~$ sudo df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       9.9G  670M  8.7G   7% /
udev            998M  8.0K  998M   1% /dev
tmpfs           401M  208K  401M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none           1002M     0 1002M   0% /run/shm
/dev/vdb         20G  173M   19G   1% /mnt

回到 compute node 上面去看


# 可以看到有兩個 virtual machine 正在跑
wistor@ubuntu83:~$ sudo virsh list
[sudo] password for wistor:
 Id Name                 State
----------------------------------
  3 instance-00000007    running
  4 instance-00000009    running

# 這個只有 vda, 合理的判斷應該是 m1.tiny
wistor@ubuntu83:~$ sudo virsh domblklist 3
Target     Source
------------------------------------------------
vda        /var/lib/nova/instances/instance-00000007/disk

# 這個有 vda 和 vdb, 應該就是 m1.small
wistor@ubuntu83:~$ sudo virsh domblklist 4
Target     Source
------------------------------------------------
vda        /var/lib/nova/instances/instance-00000009/disk
vdb        /var/lib/nova/instances/instance-00000009/disk.local

# 先到 tiny 的資料夾去看, 可以發現有 disk 這個檔案, 還有一個 libvirt.xml
# 但為什麼 disk 大小只有 118M ? 而不是 2G?
wistor@ubuntu83:/var/lib/nova/instances/instance-00000007$ ll -h
total 115M
drwxrwxr-x 2 nova         nova 4.0K May 29 13:54 ./
drwxr-xr-x 6 nova         nova 4.0K May 29 13:57 ../
-rw-rw---- 1 libvirt-qemu kvm   21K May 29 13:55 console.log
-rw-r--r-- 1 libvirt-qemu kvm  118M May 29 14:07 disk
-rw-rw-r-- 1 nova         nova 1.5K May 29 13:54 libvirt.xml

# 看一下 disk 是什麼東西, 結果發現他是 QCOW 格式, backing file 在 _base 裡面
wistor@ubuntu83:/var/lib/nova/instances/instance-00000007$ file disk
disk: QEMU QCOW Image (v2), has backing file (path /var/lib/nova/instances/_base/20938b475c7d805e707888fb2a3196550), 2147483648 bytes

# 看一下 _base 底下有什麼東西
wistor@ubuntu83:/var/lib/nova/instances/_base$ ll -h
total 3.1G
drwxrwxr-x 2 nova         nova 4.0K May 27 23:35 ./
drwxr-xr-x 6 nova         nova 4.0K May 29 13:57 ../
-rw-r--r-- 1 libvirt-qemu kvm  2.0G May 27 23:57 20938b475c7d805e707888fb2a31965508d0bb4b
-rw-r--r-- 1 libvirt-qemu kvm   10G May 27 23:57 20938b475c7d805e707888fb2a31965508d0bb4b_10
-rw-r--r-- 1 libvirt-qemu kvm   20G May 27 23:28 ephemeral_0_20_None

# 而這個 backend 的大小剛好就是 2G, 而且是個 boot sector, 所以他就是 tiny 的 boot disk
wistor@ubuntu83:/var/lib/nova/instances/_base$ file 20938b475c7d805e707888fb2a31965508d0bb4b
20938b475c7d805e707888fb2a31965508d0bb4b: x86 boot sector; partition 1: ID=0x83, active, starthead 0, startsector 16065, 4176900 sectors, code offset 0x63

# 接下來看看 small 的資料夾, 可以發現多一個 disk.local
wistor@ubuntu83:/var/lib/nova/instances/instance-00000009$ ll -h
total 395M
drwxrwxr-x 2 nova         nova 4.0K May 29 13:57 ./
drwxr-xr-x 6 nova         nova 4.0K May 29 13:57 ../
-rw-rw---- 1 libvirt-qemu kvm   21K May 29 13:58 console.log
-rw-r--r-- 1 libvirt-qemu kvm  390M May 29 14:13 disk
-rw-r--r-- 1 libvirt-qemu kvm   12M May 29 13:58 disk.local
-rw-rw-r-- 1 nova         nova 1.7K May 29 13:57 libvirt.xml

# 發現他也是 qcow 格式, backing file 也在 _base 下
wistor@ubuntu83:/var/lib/nova/instances/instance-00000009$ file disk.local
disk.local: QEMU QCOW Image (v2), has backing file (path /var/lib/nova/instances/_base/ephemeral_0_20_None), 21474836480 bytes

# 這個就是 ephemeral disk, 大小為 20G
wistor@ubuntu83:/var/lib/nova/instances/_base$ file ephemeral_0_20_None
ephemeral_0_20_None: Linux rev 1.0 ext3 filesystem data, UUID=e886c848-3a77-4e2c-b6d6-4d77eb51f8da, volume name "ephemeral0" (large files)


另下來就是測試一下 persistent volume. 透過 UI 或是 command line, 我們生成一個大小為 10G 的 volume, 並且把它 attach 到 vm2 (m1.small)


# 從 nova 的 command line 可以看到新增的 volume
wistor@ubuntu83:~$ sudo -i nova volume-list
+----+-----------+--------------+------+-------------+-------------+
| ID |   Status  | Display Name | Size | Volume Type | Attached to |
+----+-----------+--------------+------+-------------+-------------+
| 3  | available | volume1      | 10   | None        |             |
+----+-----------+--------------+------+-------------+-------------+

# 在 lvm 內也可以看到這個新的 volume
wistor@ubuntu83:~$ sudo lvscan
  ACTIVE            '/dev/nova-volumes/volume-00000003' [10.00 GiB] inherit

# 可以看到 tgt 把這個 volume export 出去變成一個 iscsi target
wistor@ubuntu83:~$ sudo tgt-admin -s
Target 1: iqn.2010-10.org.openstack:volume-00000003
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 10737 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/nova-volumes/volume-00000003
            Backing store flags:
    Account information:
    ACL information:
        ALL

# 然後使用 open iscsi initiator 連線到這個 iscsi target 
wistor@ubuntu83:~$ sudo iscsiadm -m session
tcp: [5] 172.17.123.83:3260,1 iqn.2010-10.org.openstack:volume-00000003

# 然後就多一個 device
wistor@ubuntu83:/dev/disk/by-path$ ll
lrwxrwxrwx 1 root root   9 May 29 14:23 ip-172.17.123.83:3260-iscsi-iqn.2010-10.org.openstack:volume-00000003-lun-1 -> ../../sdf

wistor@ubuntu83:~$ sudo fdisk -l /dev/sdf

Disk /dev/sdf: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdf doesn't contain a valid partition table

# 然後也可以看到 vm2 上面又多了一個 device
wistor@ubuntu83:~$ sudo virsh domblklist 4
Target     Source
------------------------------------------------
vda        /var/lib/nova/instances/instance-00000009/disk
vdb        /var/lib/nova/instances/instance-00000009/disk.local
vdc        /dev/disk/by-path/ip-172.17.123.83:3260-iscsi-iqn.2010-10.org.openstack:volume-00000003-lun-1



PS1. 目前發現在 vm 有掛載額外的 volume 時, 重開機會有問題


2012年5月22日 星期二

FIO Disk benchmark



安裝 FIO, 這次客戶指定 2.0.3 版

wistor@ubuntu:~$ git clone git://git.kernel.dk/fio.git
Cloning into 'fio'...
remote: Counting objects: 12112, done.
remote: Compressing objects: 100% (4397/4397), done.
remote: Total 12112 (delta 8787), reused 10519 (delta 7689)
Receiving objects: 100% (12112/12112), 2.76 MiB | 608 KiB/s, done.
Resolving deltas: 100% (8787/8787), done.
wistor@ubuntu:~$ cd fio
wistor@ubuntu:~/fio$ ls
arch            debug.h     filesetup.c           gettime.h    io_u.c      options.c  REPORTING-BUGS  trim.c
backend.c       diskutil.c  fio.1                 hash.h       lib         options.h  server.c        trim.h
blktrace_api.h  diskutil.h  fio.c                 helpers.c    libfio.c    os         server.h        verify.c
blktrace.c      engines     fio_generate_plots    helpers.h    log.c       parse.c    SERVER-TODO     verify.h
cgroup.c        eta.c       fio_generate_plots.1  HOWTO        log.h       parse.h    smalloc.c
cgroup.h        examples    fio.h                 init.c       Makefile    profile.c  smalloc.h
client.c        fifo.c      FIO-VERSION-GEN       io_ddir.h    memalign.c  profile.h  stat.c
compiler        fifo.h      flist.h               ioengine.h   memalign.h  profiles   stat.h
COPYING         file.h      flow.c                ioengines.c  memory.c    rbtree.c   t
crc             filehash.c  flow.h                iolog.c      mutex.c     rbtree.h   time.c
debug.c         filehash.h  gettime.c             iolog.h      mutex.h     README     time.h
wistor@ubuntu:~/fio$ git tag
fio-2.0
fio-2.0.1
fio-2.0.2
fio-2.0.3
fio-2.0.4
fio-2.0.5
fio-2.0.6
fio-2.0.7
wistor@ubuntu:~/fio$ git checkout fio-2.0.3
Note: checking out 'fio-2.0.3'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 3f36aa6... Fio 2.0.3
wistor@ubuntu:~/fio$ make
wistor@ubuntu:~/fio$ sudo make install
install -m 755 -d /usr/local/bin
install fio fio_generate_plots /usr/local/bin
install -m 755 -d /usr/local/man/man1
install -m 644 fio.1 /usr/local/man/man1
install -m 644 fio_generate_plots.1 /usr/local/man/man1
wistor@ubuntu:~$ fio
No jobs(s) defined

fio 2.0.3
fio [options] [job options] 
  --debug=options       Enable debug logging. May be one/more of:
                        process,file,io,mem,blktrace,verify,random,parse,
                        diskutil,job,mutex,profile,time,net
  --output              Write output to file
  --timeout             Runtime in seconds
  --latency-log         Generate per-job latency logs
  --bandwidth-log       Generate per-job bandwidth logs
  --minimal             Minimal (terse) output
  --version             Print version info and exit
  --terse-version=x     Set terse version output format to 'x'
  --help                Print this page
  --cmdhelp=cmd         Print command help, "all" for all of them
  --enghelp=engine      Print ioengine help, or list available ioengines
  --enghelp=engine,cmd  Print help for an ioengine cmd
  --showcmd             Turn a job file into command line options
  --eta=when            When ETA estimate should be printed
                        May be "always", "never" or "auto"
  --readonly            Turn on safety read-only checks, preventing writes
  --section=name        Only run specified section in job file
  --alloc-size=kb       Set smalloc pool to this size in kb (def 1024)
  --warnings-fatal      Fio parser warnings are fatal
  --max-jobs=nr         Maximum number of threads/processes to support
  --server=args         Start a backend fio server
  --daemonize=pidfile   Background fio server, write pid to file
  --client=hostname     Talk to remote backend fio server at hostname

Fio was written by Jens Axboe 
                 Jens Axboe 


SNIA spring 2012 tutorials
http://snia.org/education/tutorials/2012

Install Python on Window7


發現要裝同樣的東西在 Windows  上, 還真不是普通的困難,

雖然到最後我仍然沒有解掉全部的問題, 但還是紀錄一下好了...

1. Python 2.7
    http://www.python.org/getit/

2. Pip
    http://www.lfd.uci.edu/~gohlke/pythonlibs/#pip

3. PyCrypto
    http://yorickdowne.wordpress.com/2010/12/22/compiling-pycrypto-on-win7-64/

如果想要試著直接用 pip 裝 PyCrypto , 可能會遇到他找不到適合 compiler 的問題, 我試了網路上建議的方式
a. 先安裝 mingw32
b. 下載 PyCrypto 的原始碼
c.  python setup.py build -c mingw32
來嘗試安裝它, 但都沒有成功. 會遇到 raise RuntimeError("chmod error"), 情況和這篇描述的一樣
http://stackoverflow.com/questions/9131323/problems-installing-python-fabric-on-windows-7

最後我只好放棄裝最新版的 PyCrypto, 而直接下載別人做好的

4. Fabric
    http://www.lfd.uci.edu/~gohlke/pythonlibs/#base
    或是 pip install fabric

5. pywin32
    http://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32
    如果你遇到 ImportError: No module named win32com.shell.shell, 就請安裝這個

這篇找到一篇有人利用 mingw32 編譯 pycrypto 成功的範例
http://posterous.adambard.com/installing-fabric-under-windows-7-64-bit-with

2012年5月21日 星期一

How to know PCI Express Speed on server?

目前企業比較常見到的 PCIe 2.0 , 一個 lane 的頻寬是  5.0GT/s,  每 8 bit 在傳輸時會使用 10bit 編碼以確保傳輸的資料是正常的, 所以實際的資料傳輸頻寬要打八折

5.0GT/s  * 0.8  =   4Gb/s  =  0.5GB/s

接下來就看有幾個 lane

PCIe x2   =   8 Gb/s   = 1 GB/s
PCIe x4   = 16 Gb/s   = 2 GB/s
PCIe x8   = 32 Gb/s   = 4 GB/s
PCIe x16 = 64 Gb/s   = 8 GB/s


版本
資料傳輸頻寬
單向單通道頻寬
雙向16通道頻寬
原始傳輸率
供電
發表日期
1.0
2Gb/s
250MB/s
8GB/s
2.5GT/s
2002722
1.0a
2Gb/s
250MB/s
8GB/s
2.5GT/s
2003415
1.1
2Gb/s
250MB/s
8GB/s
2.5GT/s
77W
2005328
2.0
4Gb/s
500MB/s
16GB/s
5.0GT/s
225W
20061220
2.1
4Gb/s
500MB/s
16GB/s
5.0GT/s
200934
3.0
8Gb/s
1GB/s
32GB/s
8.0GT/s
20101110
4.0
16.0GT/s
2014-2015[3]


System Bus
Version
Data Rate
Encoding
x1 lane
x4 lane
x8 lane
x16 lane
PCI Express
1.0
2.5 GT/s
8/10
2.0 Gb/s
8.0 Gb/s
16.0 Gb/s
32.0 Gb/s
PCI Express
2.0
5.0 GT/s
8/10
4.0 Gb/s
16.0 Gb/s
32.0 Gb/s
64.0 Gb/s
PCI Express
3.0
8.0 GT/s
128/130
7.9 Gb/s
31.5 Gb/s
63.0 Gb/s
126.0 Gb/s


所以如果是一張 10Gb 的網卡, 上面又有 2 個網孔時

10 Gb/s x 2 = 20 Gb/s  =>  Need  PCIe x 8 ,  所以在計算頻寬時也要注意一下 PCIe 的格規是否有滿足, 不然買了這麼高級的網卡, 也可能被限制住, 就可惜了.

Reference:


以下用 LSI Raid Card 當範例, 如何用 lspci 來查找 PCIe 的速度

# 首先先找出來 LSI 卡的 slot 編號, 前面的數字就是他的編號
wistor@ubuntu:~$ sudo lspci
04:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
07:00.0 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02)
07:00.1 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02)

# 接著利用剛剛那個編號找到更詳細的資訊, 記得要加上 sudo, 不然會看不到 Speed 資訊
wistor@ubuntu:~$ sudo lspci -vvv -s 04:00
04:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
        Subsystem: LSI Logic / Symbios Logic MegaRAID SAS 9260-4i
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0, Cache Line Size: 256 bytes
        Interrupt: pin A routed to IRQ 26
        Region 0: I/O ports at d000 [size=256]
        Region 1: Memory at fbdfc000 (64-bit, non-prefetchable) [size=16K]
        Region 3: Memory at fbd80000 (64-bit, non-prefetchable) [size=256K]
        Expansion ROM at fbd40000 [disabled] [size=256K]
        Capabilities: [50] Power Management version 3
                Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [68] Express (v2) Endpoint, MSI 00
                DevCap: MaxPayload 4096 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
                        ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset+
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
                        RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset-
                        MaxPayload 128 bytes, MaxReadReq 512 bytes
                DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-
                LnkCap: Port #0, Speed 5GT/s, Width x8, ASPM L0s, Latency L0 <64ns, L1 <1us
                        ClockPM- Surprise- LLActRep- BwNot-
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
                DevCap2: Completion Timeout: Range BC, TimeoutDis+
                DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
                LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
                         Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
                         Compliance De-emphasis: -6dB
                LnkSta2: Current De-emphasis Level: -6dB
        Capabilities: [d0] Vital Product Data
pcilib: sysfs_read_vpd: read failed: Connection timed out
                Not readable
        Capabilities: [a8] MSI: Enable- Count=1/1 Maskable- 64bit+
                Address: 0000000000000000  Data: 0000
        Capabilities: [c0] MSI-X: Enable+ Count=15 Masked-
                Vector table: BAR=1 offset=00002000
                PBA: BAR=1 offset=00003800
        Capabilities: [100 v1] Advanced Error Reporting
                UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
                CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
                AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
        Capabilities: [138 v1] Power Budgeting <?>
        Kernel driver in use: megaraid_sas
        Kernel modules: megaraid_sas


LnkCap 代表的是卡片本身支援的最高速度, 以上面 LSI 為例就是 5GT/s (PCIe v2), Width x8
LnkSta 代表是實際跑的的速度, 如果正常應該要和 LnkCap 一樣, 才能獲得最大的頻寬
如果發現 LnkSta 的速度比較小, 那就要追一下是不是插槽本身的速度就有限制,
或者是想了解是否有全速利用到插槽的頻寬, 那要怎麼知道是那一個插槽呢?

# 以樹狀圖來看 pci 串連的狀況
wistor@ubuntu:~$ sudo lspci -vt
 \-[0000:00]-+-00.0  Intel Corporation 5520 I/O Hub to ESI Port
             +-01.0-[07]--+-00.0  Intel Corporation 82575EB Gigabit Network Connection
             |            \-00.1  Intel Corporation 82575EB Gigabit Network Connection
             +-03.0-[06]--
             +-04.0-[05]--
             +-05.0-[04]----00.0  LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator]
             +-07.0-[03]--


以上面的例子可以看到 LSI 被接在 5520 I/O Hub 的第五個 Port
用同樣的方法可以查一下他的頻寬

wistor@ubuntu:~$ sudo lspci -vvv -s 00:05.0
00:05.0 PCI bridge: Intel Corporation 5520/X58 I/O Hub PCI Express Root Port 5 (rev 22) (prog-if 00 [Normal decode])
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0, Cache Line Size: 256 bytes
        Bus: primary=00, secondary=04, subordinate=04, sec-latency=0
        I/O behind bridge: 0000d000-0000dfff
        Memory behind bridge: fbd00000-fbdfffff
        Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
        Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
        BridgeCtl: Parity- SERR+ NoISA- VGA- MAbort- >Reset- FastB2B-
                PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
        Capabilities: [40] Subsystem: Intel Corporation Device 0000
        Capabilities: [60] MSI: Enable- Count=1/2 Maskable+ 64bit-
                Address: 00000000  Data: 0000
                Masking: 00000000  Pending: 00000000
        Capabilities: [90] Express (v2) Root Port (Slot+), MSI 00
                DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
                        ExtTag+ RBE+ FLReset-
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
                        RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
                        MaxPayload 128 bytes, MaxReadReq 128 bytes
                DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
                LnkCap: Port #0, Speed 5GT/s, Width x8, ASPM L0s L1, Latency L0 <512ns, L1 <64us
                        ClockPM- Surprise+ LLActRep+ BwNot+
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive+ BWMgmt+ ABWMgmt-
                SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug- Surprise-
                        Slot #6, PowerLimit 25.000W; Interlock- NoCompl-

                SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq- LinkChg-
                        Control: AttnInd Off, PwrInd Off, Power- Interlock-
                SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+ Interlock-
                        Changed: MRL- PresDet+ LinkState+
                RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible-
                RootCap: CRSVisible-
                RootSta: PME ReqID 0000, PMEStatus- PMEPending-
                DevCap2: Completion Timeout: Range BCD, TimeoutDis+ ARIFwd+
                DevCtl2: Completion Timeout: 260ms to 900ms, TimeoutDis- ARIFwd-
                LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
                         Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
                         Compliance De-emphasis: -6dB
                LnkSta2: Current De-emphasis Level: -6dB
        Capabilities: [e0] Power Management version 3
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
                Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [100 v1] Advanced Error Reporting
                UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                CESta:  RxErr+ BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
                CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
                AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
        Capabilities: [150 v1] Access Control Services
                ACSCap: SrcValid+ TransBlk+ ReqRedir+ CmpltRedir+ UpstreamFwd+ EgressCtrl- DirectTrans-
                ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-
        Kernel driver in use: pcieport
        Kernel modules: shpchp


以上面來看, LnkCap 是 5GT/s Width x8, 目前 LnkSta 也是 5GT/s Width x8, 很好, 一點也沒有浪費

# 另外這個也是很有用的指令
wistor@ubuntu:~$ sudo lshw -businfo
Bus info          Device     Class      Description
===================================================
pci@0000:04:00.0  scsi6      storage    MegaRAID SAS 2108 [Liberator]
pci@0000:07:00.0  eth0       network    82575EB Gigabit Network Connection
pci@0000:07:00.1  eth1       network    82575EB Gigabit Network Connection
pci@0000:00:1f.2  scsi0      storage    82801JI (ICH10 Family) SATA AHCI Controller
scsi@0:0.0.0      /dev/sda   disk       250GB ST9250610NS
scsi@0:0.0.0,1    /dev/sda1  volume     56GiB EXT4 volume
scsi@0:0.0.0,2    /dev/sda2  volume     175GiB Extended partition
                  /dev/sda5  volume     175GiB Linux swap / Solaris partition




Reference:
https://noc.sara.nl/wiki/Server_Performance_Tuning
http://benjr.tw/node/663

2012年5月19日 星期六

VPN


最喜歡的解釋是這段, 沒有資訊背景的人也聽的懂

以日常生活的例子來比喻,虛擬私人網路就像:甲公司某部門的A想寄信去乙公司某部門的B。A已知B的地址及部門,但公司與公司之間的信不能註明部門名稱。於是,A請自己的秘書把指定B所屬部門的信(A可以選擇是否以密碼與B通訊)放在寄去乙公司地址的大信封中。當乙公司的秘書收到從甲公司寄到乙公司的信件後,該秘書便會把放在該大信封內的指定部門信件以公司內部郵件方式寄給B。同樣地,B會以同樣的方式回信給A。

VPN 設定
http://sofree.cc/vpn/
http://icc.web.ym.edu.tw/ezcatfiles/b032/img/img/856/VPN_Win7.pdf

如果遇到無法連線成功, 有可能是使用 L2TP 連線, window7 預設不開啟, 那可以 Smart VPN Client 來幫你開啟, 開啟後需要重新開機
http://www.draytek.com/user/SupportDLUtility.php

另外 L2TP 如果是使用預設金鑰的模式, 可以參考這篇設定
http://www.hideipvpn.com/2010/03/howto-windows-7-ipsecl2tp-vpn-setup-tutorial/


這是連線前的 routing table
===========================================================================
介面清單
 10...1c 6f 65 21 74 2b ......Realtek PCIe GBE Family Controller
 19...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
 20...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
  1...........................Software Loopback Interface 1
 17...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
 11...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
 18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
 21...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
 29...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #4
===========================================================================

IPv4 路由表
===========================================================================
使用中的路由:
網路目的地                 網路遮罩         閘道          介面       計量
          0.0.0.0          0.0.0.0      192.168.1.1      192.168.1.2     20
        127.0.0.0        255.0.0.0            在連結上         127.0.0.1    306
        127.0.0.1  255.255.255.255            在連結上         127.0.0.1    306
  127.255.255.255  255.255.255.255            在連結上         127.0.0.1    306
      192.168.1.0    255.255.255.0            在連結上       192.168.1.2    276
      192.168.1.2  255.255.255.255            在連結上       192.168.1.2    276
    192.168.1.255  255.255.255.255            在連結上       192.168.1.2    276
     192.168.65.0    255.255.255.0            在連結上      192.168.65.1    276
     192.168.65.1  255.255.255.255            在連結上      192.168.65.1    276
   192.168.65.255  255.255.255.255            在連結上      192.168.65.1    276

D:\>tracert  -d www.google.com

在上限 30 個躍點上
追蹤 www.l.google.com [74.125.31.103] 的路由:

  1    <1 ms    <1 ms    <1 ms  192.168.1.1
  2    16 ms    17 ms    17 ms  168.95.98.254
  3     *       16 ms    16 ms  168.95.85.42
  4    18 ms    18 ms    19 ms  211.22.226.1
  5    18 ms    18 ms    18 ms  209.85.243.26
  6    38 ms    18 ms    18 ms  209.85.250.103
  8    28 ms    40 ms    32 ms  209.85.241.166
  9    28 ms    31 ms    32 ms  72.14.203.103
這是連線後的 routing table, 可以發現多了一個 VPN 介面 (172.16.1.102) routing table 也預設都從這個新介面出去 (0.0.0.0 => 172.16.1.102) 連結 VPN Server (60.251.132.28) 則設定成從原來的閘道 192.168.1.1 出去
===========================================================================
介面清單
 28...........................VPN 連線
 10...1c 6f 65 21 74 2b ......Realtek PCIe GBE Family Controller
 19...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
 20...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
  1...........................Software Loopback Interface 1
 17...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
 11...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
 18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
 21...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
 29...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #4
===========================================================================

IPv4 路由表
===========================================================================
使用中的路由:
網路目的地                 網路遮罩         閘道          介面       計量
          0.0.0.0          0.0.0.0      192.168.1.1      192.168.1.2   4245
          0.0.0.0          0.0.0.0            在連結上      172.16.1.102     21
    60.251.132.28  255.255.255.255      192.168.1.1      192.168.1.2   4246
        127.0.0.0        255.0.0.0            在連結上         127.0.0.1   4531
        127.0.0.1  255.255.255.255            在連結上         127.0.0.1   4531
  127.255.255.255  255.255.255.255            在連結上         127.0.0.1   4531
     172.16.1.102  255.255.255.255            在連結上      172.16.1.102    276
      192.168.1.0    255.255.255.0            在連結上       192.168.1.2   4501
      192.168.1.2  255.255.255.255            在連結上       192.168.1.2   4501
    192.168.1.255  255.255.255.255            在連結上       192.168.1.2   4501
     192.168.65.0    255.255.255.0            在連結上      192.168.65.1   4501
     192.168.65.1  255.255.255.255            在連結上      192.168.65.1   4501
   192.168.65.255  255.255.255.255            在連結上      192.168.65.1   4501

D:\>ipconfig

Windows IP 設定

PPP 介面卡 VPN 連線:

   連線特定 DNS 尾碼 . . . . . . . . :
   IPv4 位址 . . . . . . . . . . . . : 172.16.1.102
   子網路遮罩 . . . . . . . . . . . .: 255.255.255.255
   預設閘道 . . . . . . . . . . . . .: 0.0.0.0

D:\>tracert  -d www.google.com

在上限 30 個躍點上
追蹤 www.l.google.com [72.14.203.103] 的路由:

  1    23 ms    23 ms    23 ms  172.16.1.3
  2    25 ms    23 ms    23 ms  10.8.0.1
  3    34 ms    32 ms    32 ms  60.251.132.254
  4    28 ms    31 ms    40 ms  168.95.211.74
  5    34 ms    32 ms    31 ms  211.22.226.1
  6    34 ms    31 ms    32 ms  209.85.243.26
  7    33 ms    32 ms    31 ms  209.85.250.103
  8    28 ms    40 ms    32 ms  209.85.241.166
  9    28 ms    31 ms    32 ms  72.14.203.103

D:\>tracert  -d 60.251.132.28

在上限 30 個躍點上追蹤 60.251.132.28 的路由

  1    <1 ms    <1 ms    <1 ms  192.168.1.1
  2    26 ms    17 ms    37 ms  168.95.98.254
  3     *        *       16 ms  168.95.85.42
  4    17 ms    19 ms    17 ms  168.95.209.73
  5    19 ms    23 ms    24 ms  60.251.132.28
  6    27 ms    24 ms    24 ms  60.251.132.28

不過其實 tracert 出來的結果讓我有點意外, 或者說和我猜的不一樣, 原以為他應該要透過 192.168.1.1 先連到 60.251.132.28, 再連到 172.16.1.102, 最後再連到 google.com

但結果卻沒有顯示連到 172.16.1.102 這段, 我想是因為 VPN 是架在 Layer 2 的服務, 送到 172.16.1.3 的封包, 應該都會被 VPN Client 轉包過, 然後送到 VPN Server, 所以 ping 這個服務並不知道自己送的東西曾經被轉包過, 也自然無法顯示出這段路徑

Reference:
http://zh.wikipedia.org/wiki/%E8%99%9B%E6%93%AC%E7%A7%81%E4%BA%BA%E7%B6%B2%E8%B7%AF

http://avp.toko.edu.tw/docs/class/3/VPN%20%E8%99%9B%E6%93%AC%E7%A7%81%E6%9C%89%E7%B6%B2%E8%B7%AF%E6%8A%80%E8%A1%93%E6%A6%82%E8%AA%AA(%E7%AA%84%E9%A0%BB).pdf http://life.different.idv.tw/scottwu/37.htm

http://www.cc.ntu.edu.tw/chinese/epaper/20070620_1004.htm

http://technet.microsoft.com/zh-tw/library/cc737500(v=ws.10).aspx