[Solaris] SO_FLOW_SLA socket option in Solaris 11.2

原文はこちら。
https://blogs.oracle.com/yenduri/entry/so_flow_sla_socket_option

Solaris 11.2で新しいソケットオプションであるSO_FLOW_SLAを追加しました。これを使うとアプリケーションがソケットレベルフローやリソース管理プロパティをsetsockopt()を使って作成することができます。このソケットオプションを使う場合には、PRIV_SYS_FLOW_CONFIG 権限が必要です。
setsockopt(3C) のmanページにはプログラミングAPIの詳細が全て掲載されています。利用は以下のように簡単です。
sock_flow_props_t sprop;
sock = socket(AF_INET, SOCK_STREAM, 0);
sprop.sfp_version = SOCK_FLOW_PROP_VERSION1;
sprop.sfp_mask = SFP_MAXBW;
sprop.sfp_maxbw = 500000000; /* 500 Mbps */
setsockopt(sock, SOL_SOCKET, SO_FLOW_SLA, &sprop, sizeof (sprop));
The flows created using setsockopt(3C)を用いて作成したフローは、pfiles(1)からだけでなく、flowadm(1M), flowstat(1M)を使って監視することができます。
このソケットオプションを使って-Mオプションを実装しているnc(1)/netcatツールの例を見てみましょう。
nc -l 80 を 10.2.3.118 上で実行します。
# nc -M maxbw=100M 10.2.3.118 80
...
別の画面で以下のように観察できます。
# flowadm
FLOW        LINK     PROTO LADDR             LPORT RADDR             RPORT DSFLD
24.sys.sock net1     tcp   10.2.3.117        38769 10.2.3.118        80    --
# flowadm show-flowprop
FLOW         PROPERTY        PERM VALUE          DEFAULT        POSSIBLE
24.sys.sock  maxbw           rw     100          --             -- 
24.sys.sock  priority        rw   --             medium         low,medium,high 
# pfiles `pgrep nc`
18827:  nc -M maxbw=100M 10.2.3.118 80
...
3: S_IFSOCK mode:0666 dev:556,0 ino:5341 uid:0 gid:0 size:0
O_RDWR
SOCK_STREAM
SO_SNDBUF(49152),SO_RCVBUF(128872),
SO_FLOW_SLA(maxbw: 100.000 mbits/sec)
sockname: AF_INET 10.2.3.117  port: 38769
peername: AF_INET 10.2.3.118  port: 80
congestion control: newreno
...

0 件のコメント:

コメントを投稿