天天看點

ovs-appctl 使用者手冊中文翻譯運作時管理指令 ovs-appctl 能夠向運作中的ovs-vswitchd程序發送指令。現已支援的指令描述如下。這些描述假設讀者了解如何配置open vswitch。  

該文章收錄在在我的部落格:http://www.sskywatcher.com/blog/

運作時管理指令 ovs-appctl 能夠向運作中的ovs-vswitchd程序發送指令。現已支援的指令描述如下。這些描述假設讀者了解如何配置open vswitch。  

通用指令

exit 優雅關閉ovs-vswitchd程序 

qos/show interface 查詢核心中關于qos的配置以及和給出端口有關的狀态 

cfm/show [interface] 顯示在指定端口上CFM配置的詳細資訊。如果沒有指定接口,則顯示所有使能了CFM的接口 

cfm/set-fault [interface] status 強制将指定端口的CFM子產品的錯誤狀态(如果沒指定接口則是全部接口)設定成指定的狀态。可以是”true”,”false”,”normal” 

stp/tcn [bridge] 在運作了stp的bridge上強制進行拓撲變更。之将導緻該dp發送拓撲變更通知并且重新整理MAC表。。如果沒有指定橋,則應用到所有dp   

橋指令 

這些指令用于管理橋。  

fdb/flush [bridge] 清除指定橋的MAC學習表,沒有指定橋則應用于所有橋 

fdb/show bridge 列出指定橋上每個MAC直至與VLAN的對應資訊,并且包含該學習到該MAC的端口号還有該條目的age資訊,機關為秒 

bridge/reconnect [bridge] 指令橋斷開和目前openFlow控制器的連接配接并且重連,如果沒有指定橋,則應用于所有橋,這個指令可以在分析排查控制器錯誤的時候很有用 

bridge/dump-flows bridge 列出橋上所有的流,包括那些在其他指令中(例如 ovs-ofctl dump-flows)預設隐藏的流.一些機制比如帶内管理等設定的流政策是不行允許修改和覆寫的,是以對控制器來說他們是隐藏的。  

BOND指令 這些指令管理ovs橋上綁定端口。要了解這些指令,你需要了解一種叫做源負載分擔(SLB)的實施細節。作為直接将源MAC位址設成SLAVE的做法,通過特定的計算将48bit的MAC自動化映射到一個8bit的值(MAC hash)。所有比對這個hash值得mac位址被指定為slave。 

bond/list 列出所有的綁定配置,以及slaves,範圍包含所有橋 

bond/show[port] 給出指定端口的所有綁定有關的資訊(updelay,downdelay,距離下次進行重新平衡的時間),如果沒指定端口,則列出所有bond的端口。同時也列出所有slave的資訊,包括這些slave是處于enable還是disable狀态、完成一個正在實施中的updelay或者一個downdelay的時間、是否是激活态的slave。任何關于LACP的資訊可以使用lacp/show來檢視。 

bond/migrate port hash slave 僅适用于配置了SLB的綁定。配置設定一個指定的machash值給一個新的slave。Port指定了bond的端口,hash則是将要遷移的mac hash值(十進制0到255之間),slave即是要新的slave。 這個重新制定的關系不是永久的:rebalanceing或者發生fail-over時,這個mac hash蔣輝按照正常的方式切換到新的slave上面 MAC hash值不能指定到一個disable态的slave上  

bond/set-active-slave port slave 将給定slave設為激活态的slave。給定的slave必須是enable狀态。 這個配置不是永久的:如果該slave變成disable,将會自動選擇一個新的slave。 

bond/enable-slave port slave 

bond/disable-slave port slave Enable/disableslave在給定的bond port上,忽略任何updelay和downdelay。 這個設定不是永久的:他将保持到該slave的承載狀态變化 

bond/hashmac [valn] [basis] 傳回指定mac(伴随指定vlan和basis)的hash值 

lacp/show [port] 列出所有指定端口的lacp關聯資訊。包括active/passive、system id、systempriority。同時列出每個slave 的資訊:enable/disable、連接配接上或者未連接配接上、端口id和優先級、主用資訊和成員資訊。如果沒有指定端口,則顯示所有應用了CFM的接口資訊。   

資料通道指令(datapath) 

這些指令管理邏輯資料通道。類似ovs-dpctl的指令。 

dpif/dump-dps 在多行中顯示所有配置的datapath名稱 

dpif/show[dp….] 列印dp的彙總資訊,包括dp的狀态還有連接配接上的端口清單。端口的資訊包括openFlow的端口号,datapath的端口号,以及類型(本地端口被辨別為openflow port 65534) 如果指定了一個或多個datapath,将隻顯示指定的這些dp的資訊。否則,則顯示所有dp的資訊。 

dpif/dump-flows dp 想控制端列印dp中流表的所有條目。 這個指令主要來與debugOpen Vswitch.它所列印的流表不是openFlow的流條目。它列印的是由dp子產品維護的簡單的流。如果你想檢視OpenFlow條目,請使用ovs-ofctl dump-flows。dpif/del-fow dp 删除指定dp上所有流表。同上所述,這些不是OpenFlow流表。   

OpenFlow協定指令 

這些指令管理核心OpenFlow交換的實施。 

ofproto/list 列出所有運作中ofproto執行個體。這些名字可能在ofproto/trace中用到。 

ofproto/trace[dpname] odp_flow [-generate] [packet] ofproto/tracebridgebr_flow [-generate] [packet] 追蹤報告構造包在交換機中的路徑。標頭(例如源和目的)和中繼資料(比如:入端口),一起組成它的“flow”,根據這些“flow”決定包的目的地。你可以用些列途徑位址流。 dpnameodp-flow odp-flow 是一個可以使用 ovs-dpctl dump-flows指令列印出來的流。如果你所有的橋都是同樣樣的類型,這也是通常的情況,那麼你可以忽略 dp-name,但是如果你的橋擁有不同類型(即,ovs-netdev和ovs-system型),那麼你必須要指定dp-name。 bridgebr_flow br_flow是一種可以使用ovs−ofctl  add−flow指令添加的流類型。(這不是一個OpenFlow流:除了其他的差異,這種流永遠不會有通配符)bridge指定了被追蹤的br-flow經過的橋名。   通常情況下,你可以隻指定一個流,用以上提到的一種形式,但是有時候你可能需要值一個确切的資料包來代替流   副作用 有些動作是由副作用的,比如,normal 動作能重新整理MAC學習表,learn動作會改變OpenFlow表。ofproto/trace隻有在指定包的時候發生副作用。如果你需要虛作用,那麼你必須提供一個包。 (output 動作也是明顯的副作用,但是ofproto/trace 永遠不會執行這個動作,即便是你制定了包的時候)   不完整的資訊 大多數時候,Open Vswitch能夠盡力用流就得出一個包所經路徑的所有資訊,但是在一些特定場景下,ovs可能需要檢視一些不包含在流内的其他包的部分資訊。這種情況下,如果你不提供一個包,那麼ofproto/trace就會提示你需要一個包。   如果你希望在ofproto/trace 操作中包含一個包,你有兩種方法實作:   -generate 這個選項,附加在之前叙述的兩種流方式後面用來在内生成該流的一個包并且使用這個包。如果你的目地是利用副作用,那麼這個選項是你達成目标的最容易的方法。但是-generate 不是一個填充不完整資訊的好方式,因為生成的包是基于流資訊的,即是說這個包并不能帶有任何這個流以外的資訊。   packet 這種形式提供了一個明确的以十六進制數字序清單示的包。一個以太網幀至少14 bytes長,即至少28個16進制的數字。很明顯,使用手工輸入是很不友善的。好在我們的ovs-pacp 和ovs-tcpundump 工具提供了簡便的方法。 利用這種形式,標頭直接從packet中提取,那麼odp_flow或者br_flow應該隻包含中繼資料。中繼資料可以是以下類型:   skb_priority 封包的qos優先級 skb_mark 封包的SKB标記 tun_id 封包到達的隧道id号 in_port 封包到達的端口 第一種流格式的in_port的值是核心 datapath的端口号,而OpenFlow的端口号值是OpenFlow的端口号。這兩種端口号一般都是不一樣的,而且沒什麼關系可言。   

ofproto/self-check [switch] 運作内部一緻性檢查,并且傳回一個簡要的彙總。指定橋的時候限定在該執行個體,否則是所有執行個體。如果彙總報告了任何錯誤,那麼ovs的日志中會包含更多詳細的資訊。請将這些錯誤報告作為bug發送給ovs的開發者。  

vlog指令 

這些指令管理ovs-vswitchd的日志配置   

vlog/set [spec] 設定日志等級。沒有spec時,設定所有子產品和設施的日志等級為dbg。其他情況下,spec是一個用逗号或者空格或者冒号分隔的單詞清單,最多支援下面所述範疇的每樣配置一個。 l  一個可用子產品名,可以用ovs-appctlvlog/list 指令來檢視所有可用子產品名。 l syslog、console、file改變着三項任意項的日志等級。 l off、emer、err、warn、info、dbg,這些用來控制日志等級,不低于這些等級的消息蔣輝被記錄在日志中,所有低于該等級的将被過濾。參考ovs-appctl檢視日志等級的詳細定義。 如果沒有指定spec, 對于file選項,不論日志等級是否設定,隻有當ovs-vswitchd調用 –log-file選項時,日志才會被記錄至檔案。 為了保持和老版本的ovs的相容性,any可以作為合法參數但是不會發生作用。 vlog/set PATTERN:facility:pattern 設定應用于每個設施日志的格式,可以參考ovs-appctl檢視格式的可用文法資訊。 

vlog/list 列出所有支援記錄日志的子產品和他們目前的日志等級。

vlog/reopen 讓ovs-vswitchd關閉并且重新打開日志檔案(可以用于在轉換日志後,重建立立一個新日志檔案來使用) 需要ovs-vswitchd 使能 –log-file選項時才有效 vlog/disable-rate-limit [module]… vlog/enable-rate-limit [module]… 預設情況下,ovs-vswitchd 限制了記錄日志的速率。當消息發生的頻率高于預設值時,該消息将會被抑制。這将節省磁盤空間,讓日志更加可讀,并且讓程序更加流暢,但是有些情況下的排錯需要更多的細節。這樣,vlog/disable−rate−limit允許特定獨立子產品的日志記錄不限制在預設速率下。你可以指定一個或多個子產品名,這些子產品名可以通過vlog/list檢視。不指定子產品名或者使用any關鍵字将應用到所有記錄日志的子產品。 vlog/enable−rate−limit指令,和vlog/disable−rate−limit的文法一樣,可以恢複速率限制。 記憶體指令(MEMORYCOMMANDS) 報告記憶體的使用率 memory/show 顯示一些ovs-vswitchd記憶體使用的基礎狀态資訊。ovs−vswitchd也會在啟動後并且周期性的檢測記憶體的增長   COVERAGE COMMANDS 這個指令管理ovs−vswitchd的“coverage counters”,即在守護程序運作期間發生的特殊事件的次數。除了使用這個指令意外,當ovs−vswitchd檢測到主循環運作周期異常長的時候,會自動以INFO的日志等級記錄coverage counters。 主要用于性能分析和debugging。 coverage/show 顯示coverage counters值。  

壓力選項指令(STRESSOPTION COMMANDS) 

這些指令允許開發者測試OpenvSwitch,進而觸發一些隻有在極端案例中出現的行為。開發和測試者是以可以更加容易的發現隻有在偶然的後者極端情況下才會出現的bug。壓力選項可能導緻一些非正常的行為,但這些行為可能并不是bug,是以,這些指令應該僅僅用于測試。  

stress/enable

stress/disable  所有壓力選項的開關  stress/list  以下用表格形式列出了所有可用的壓力選項和他們的設定,表頭如下: NAME 一個單詞用來定義這個選項,并在 stress/set 中使用這個名字 DESCRIPTION 為不了解這個選項内部代碼和該選項完成動作的人所添加的描述資訊 PERIOD 現行配置的觸發周期。如果壓力選項是去使能狀态,那麼這也是disabled。否則這是一個表示壓力選項觸發的動作時間發生的間隔計數。 MODE 如果壓力選項disabled,那麼值為 n/a 。其他情況,如果選項制定了确切的觸發周期那麼是 periodic, 如果是指定周期内随機觸發則是 random   COUNTER   如果壓力選項disabled,那麼n/a,其餘情況,顯示下個觸發周期錢一共觸發了多少次。 HITS 這個壓力選項從程式啟動開始一共觸發了多少次 RECOMMENDED 對不熟悉間隔的人建議的周期。這是一個可信的壓力,不會造成系統的崩潰。MINIMUM/MAXIMUM 周期的最大/最小值 DEFAULT 預設周期,這将會在今使能了壓力選項( tress/enable ),但是沒有具體配置的時候( stress/set )。當壓力選項為關閉時預設關閉。  

stress/set option period [random|periodic] 設定壓力選項option的周期為給定period值。period為0是disable這個選項。指定random時,将以一個平均周期為給定period的值來随機觸發這個選項,指定periodic時,将精确地以周期值來觸發動作。之後是預設值。 有過壓力選項沒有用stress/enable使能,這個指令将不會生效。  

限制(LIMITS) 

我們相信限制和我們如下所寫的一樣精确。這些限制假設你使用linux核心的dp。 

l  大約256個橋需要5000個檔案描述符來(ovs-switchd程序每個datapath需要17個檔案描述符)

l  每個橋65280個端口。根據綁定的hash标的尺寸,每個橋接口在1024以上,性能将會降級 

l  每個橋可以學習2048個MAC條目 

l  核心的流僅受限于核心的可用記憶體。32位的核心每個橋維護的流數大于1048576或者64位的核心維護的流數目大于262144時,性能将會降級。(ovs-vswitchd永遠都不應該加載那麼多條流) 

l  OpenFlow流僅受限于可用記憶體。性能根據獨特的通配符個數呈現線性分布。OpenFlow表中相同通配符的流資訊都有相同的查找時間。但是當一個表擁有很多不同通配置的流時,查表的時間就線性上升了。 

l  每個橋255端口可以加入STP協定 

l  每個橋支援32個端口鏡像(MIRROR) 

l  端口名最長15位元組(這是linux系統核心的限制)