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の詳細が全て掲載されています。利用は以下のように簡単です。
The flows created using setsockopt(3C)を用いて作成したフローは、pfiles(1)からだけでなく、flowadm(1M), flowstat(1M)を使って監視することができます。
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));
このソケットオプションを使って-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 件のコメント:
コメントを投稿