星期四, 6月 29, 2017

Intel 750 SSD 1.2TB with VMware小記

Intel 750 SSD 1.2TB with VMware小記

這個是之前就已經安裝的 Intel SSD 750 SSD 小記

VMware OS:  VMware ESXi 6.5
Intel SSD 750 1.2TB

之前因為專案需要, 就進行 Intel 750 SSD 1.2TB 與 VMware ESXi 測試

感覺上, 目前這張卡還是被定義在消費機產品, 所以在 Intel 網頁上面, VMware 的 NVMe 驅動程式還停留在 1.5.0, 但是其他的 OS 最新版已經到 3.0.0 了
但是既然是要給 VM 使用, 當然是要在 VMware 上面裝, 感覺比較有效( 後來跟同事比對, 好像也是這樣 )

下載頁面

如果沒有安裝 NVMe 的話, 之前我的經驗是卡片不一定會認到, 然後效果不一定好.

安裝步驟( 可以參考下面的 Reference )
  • 下載完之後, 解開 .zip 檔案, 上傳到 datastore
  • 使用 esxcli  software  vib  install 指令安裝 vib 檔案
  • 將 VMware ESXi 重新開機

重開機完之後, 可以進 VMware ESXi 看相關資訊

[root@localhost:~] esxcfg-scsidevs   - a
vmhba0  vmw_ahci          link-n/a  sata.vmhba0                             (0000:00:11.4) Intel Corporation Wellsburg AHCI Controller
vmhba1  vmw_ahci          link-n/a  sata.vmhba1                             (0000:00:1f.2) Intel Corporation Wellsburg AHCI Controller
vmhba2  lsi_mr3           link-n/a  sas.578da6e715b20b20                    (0000:0d:00.0) Avago (LSI) MegaRAID SAS Invader Controller
vmhba3  intel-nvme        link-n/a  pscsi.vmhba3                            (0000:0e:00.0) Intel Corporation NVM-Express PCIe SSD
vmhba4  intel-nvme        link-n/a  pscsi.vmhba4                            (0000:81:00.0) Intel Corporation NVM-Express PCIe SSD
vmhba5  fnic              link-n/a  fc.1000a46c2aec7668:2000a46c2aec7668    (0000:0b:00.0) Cisco Systems Inc Cisco VIC FCoE HBA
vmhba6  fnic              link-n/a  fc.1000a46c2aec7669:2000a46c2aec7669    (0000:0c:00.0) Cisco Systems Inc Cisco VIC FCoE HBA

[root@localhost:~] vmkload_mod -s nvme | grep Version
Version: 1.2.0.32-2vmw.650.0.0.4564106

[root@localhost:~] vmkchdev -l | grep vmhba3
0000:0e:00.0 8086:0953 8086:370d vmkernel vmhba3

撿來的測試資訊
2017-06-29 21-38-31 的螢幕擷圖.png

Reference:


~ enjoy it

星期六, 6月 24, 2017

Python Basic Day 3 小記

Day 3

9:00 ~ 10:22

Notes
  • 自訂函數
    • 要先定義 function 才能執行 function
  • return 敘述
    • return 單獨使用,會中斷函數的執行
      • Python 對任何的回傳都有回傳值, 預設是 None
    • 可以用 tuple 回傳多個值

練習檔案

# coding=utf-8

# function 要執行之前要先定義, 如果先執行一個沒有定義的 function就會出錯
# 如果這個時候執行 ff() 就會出錯

def ff():
#註解要寫在function 裡面, 方便日後查詢
  '''Hello'''
  print('Hello')
# return 單獨使用,會中斷函數的執行,會回到
  return
# 所以這個 world 不會被列出
  print('world')

# 執行 ff()
ff()

# 這邊來觀察回傳值
r = ff()
print(r)

print('====================')
#查詢 ff 的用法
help(ff)

print('====================')

# 自訂 return 值
def dd():
  return 2+ 5

# 執行且列出
r=dd()
print(r)


輸出結果

Hello
Hello
None
====================
Help on function ff in module __main__:

ff()
   Hello

====================
7


  • yield 敘述
    • 可以回傳 generator 物件
    • 可以建立比較複雜的序列資料

練習檔案

# coding=utf-8
def ff():
# yield 可以回傳generator 物件
  yield 100
  yield 30
  yield 500
  yield 600
  yield 700

r = ff()
# 直接 print r
print(r)

# 這邊可以透過 next 按順序列出
# next() 返回迭代器的下一个项目
print(next(r))
print(next(r))
print(next(r))

# 透過 tuple方式來收多個回傳值, 使用 tuple好處是不會被更動
lst = tuple(r)

# 前面因為已經使用 3 個, 這邊就可以觀察是剩下的2個內容
print(lst)


輸出結果

<generator object ff at 0x101b82830>
100
30
500
(600, 700)

== Class break ==

10:40 ~ 12:00

  • 函數參數
    • 讓函數做更彈性的運用

練習檔案

# coding=utf-8
def ff(a):
  print('ff function', a)

# 這邊餵進去參數必須跟上面的數量一致
r = ff(10)
print(r)

print('===================')

def bb( a = 20):
  print('bb function:', a)

# 沒有指定就是使用預設值
r=bb()
print(r)

# 也可以覆寫
s = bb(30)
print(s)

print('===================')

def cc(a = 7, b = 40):
  print('cc function:', a, b)

# 參數的餵入依照位置的順序餵入
r = cc(8)
print(r)

# 使用 keyword 指定方式
s = cc( b=50)
print(s)

print('===================')


輸出結果

ff function 10
None
===================
bb function: 20
None
bb function: 30
None
===================
cc function: 8 40
None
cc function: 7 50
None
===================


  • 變數的有效範圍

練習檔案

# coding=utf-8

# 這個 x 是全域變數, 因為直接在 python 內定義
x = 100

def ff():
# x 是區域變數, 所以只在該函數有效
  x = 200
  print('ff function:', x)

ff()

# 這邊的 x 會列出 100
print(x)

print('======================')

# nonlocal 要找時間再想一下
def dd():
  x = 100
  print('dd function:', x)

  def gg():
      nonlocal x
      x = 200
      print('gg', x)

  gg()

  print('ppp', x)

dd()


輸出結果

ff function: 200
100
======================
dd function: 100
gg 200
ppp 200


  • 任意參數數量

練習檔案

# coding=utf-8
# 使用 * 來定義為 tuple
def ff(*a):
  print('ppp', a)

ff(3, 4, 5)

print('===========')

# 使用 ** 為 dict
def dd(**b):
  print('qqq', b)

dd()

x = { 'x':3, 'y':4, 'z':5}
print(x, type(x))

# 這邊要配合 dict 的方式
dd(**x)


輸出結果

ppp (3, 4, 5)
===========
qqq {}
{'z': 5, 'x': 3, 'y': 4} <class 'dict'>
qqq {'z': 5, 'x': 3, 'y': 4}


  • 引用內建外部函數
    • 使用 import 來匯入
      • Python 的 import 是去執行, 不像其他的語言是 copy and paste
    • 可以使用 as 來避免名稱衝突
  • Module
    • 每一個  .py的檔案就是一個 module
    • __name__ 會印出module的名稱


== Class break ==

13:00 ~ 14:00

  • Package
    • 為了區分及管理不同的 module可以將 module 放到 package
      • 資料夾對於 python, 稱之為 package

檔案在 testpackage/xx.py

# coding=utf-8
def ff():
  print('hello')

ff()

練習檔案

# coding=utf-8
# xx.py 放在 testpackage 資料夾下, 所以就是 import testpackage.xx
import testpackage.xx

# from testpackage import xx

# 執行的時候要寫出所有的路徑
testpackage.xx.ff()


輸出結果

hello
hello


== Class break ==

14:15 ~ 15:15

  • Decorator
    • 呼叫某個 function 之前先自動呼叫另一個方法
      • Memoization
      • security

練習檔案

# coding=utf-8
def fa(f):

  def helper():
      # fa 原本的內容
      print('fa')
      #這邊就會執行 fb
      f()

  return helper

# 使用 @fa 方式進行 decorator
# 以前的方式是 fb = fa(fb), 將fb自己傳入 fa
# 有需要先執行 fa, 就在前面加上 @fa 就會先執行
@fa
def fb():
  print('buiness')

# 希望執行 fb 之前先執行 fa
fb()


輸出結果

fa
buiness


== Class break ==
15:20 ~ 16:05

  • Decorator 解說以及自主練習

16:05 ~ 17:00
Chapter 6


  • 物件導向
    • 關鍵在物件關係的差異
      • 不同的目的, 會造成物件會有不同的關係
    • 使用人的邏輯來架構系統
  • 物件導向分析
    • Domain Object
      • 要完成某件目的所需要的元素