{"id":11266,"date":"2014-10-08T14:57:15","date_gmt":"2014-10-08T05:57:15","guid":{"rendered":"http:\/\/labs.gree.jp\/blog\/?p=11266"},"modified":"2014-10-20T13:08:12","modified_gmt":"2014-10-20T04:08:12","slug":"%e3%82%88%e3%81%8f%e3%82%8f%e3%81%8b%e3%82%8blinux%e5%b8%af%e5%9f%9f%e5%88%b6%e9%99%90","status":"publish","type":"post","link":"https:\/\/labs.gree.jp\/blog\/2014\/10\/11266\/","title":{"rendered":"\u3088\u304f\u308f\u304b\u308bLinux\u5e2f\u57df\u5236\u9650"},"content":{"rendered":"<p>\u77e2\u53e3\u3067\u3059\u3002<\/p>\n<p>\u307f\u306a\u3055\u3093\u306fLinux\u306etc\u3068\u3044\u3046\u6a5f\u80fd\u3092\u3054\u5b58\u77e5\u3067\u3057\u3087\u3046\u304b\u3002\u9001\u4fe1\u3059\u308b\u30d1\u30b1\u30c3\u30c8\u306e\u5e2f\u57df\u5236\u5fa1\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u5927\u5909\u5f37\u529b\u306a\u6a5f\u80fd\u3067\u3001\u30b0\u30ea\u30fc\u3067\u3082\u3044\u304f\u3064\u304b\u306e\u7528\u9014\u3067\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u5177\u4f53\u7684\u306a\u4e8b\u4f8b\u306e\u4e00\u3064\u306fRedis\u3067\u3059\u3002Redis\u3067\u306freplication\u3092\u65b0\u898f\u306b\u958b\u59cb\u3059\u308b\u969b\u3084failover\u304c\u767a\u751f\u3057master\u304c\u5207\u308a\u66ff\u308f\u3063\u305f\u969b(\u7279\u306b2.6\u7cfb)\u306b\u30b9\u30c8\u30a2\u3055\u308c\u3066\u3044\u308b\u5168\u30c7\u30fc\u30bf\u304c\u8ee2\u9001\u3055\u308c\u307e\u3059\u3002\u3057\u304b\u3057\u5e2f\u57df\u5236\u9650\u3092\u304b\u3051\u308b\u6a5f\u80fd\u304c\u306a\u3044\u305f\u3081\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5e2f\u57df\u3092\u5727\u8feb\u3057\u3066\u3057\u307e\u3046\u5371\u967a\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305f\u901a\u5e38\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u306e\u901a\u4fe1\u3067\u3082\u5927\u91cf\u306e\u30af\u30a8\u30ea\u306b\u3088\u308a\u4e88\u60f3\u4ee5\u4e0a\u306e\u5e2f\u57df\u3092\u4f7f\u7528\u3057\u3066\u3057\u307e\u3046\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u5834\u5408\u306btc\u3092\u7528\u3044\u308b\u3053\u3068\u3067Redis\u306e\u4f7f\u7528\u3059\u308b\u5e2f\u57df\u3092\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u3088\u3046\u306b\u6709\u7528\u306atc\u3067\u3059\u304c\u6b8b\u5ff5\u306a\u3053\u3068\u306b\u65e5\u672c\u8a9e\/\u82f1\u8a9e\u3068\u3082\u306b\u308f\u304b\u308a\u3084\u3059\u3044\u89e3\u8aac\u3084\u8a73\u7d30\u306a\u60c5\u5831\u306f\u591a\u304f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p>\u79c1\u3082\u793e\u5185\u306b\u304a\u3044\u3066\u4f7f\u308f\u308c\u3066\u3044\u305ftc\u306e\u8a2d\u5b9a\u306b\u554f\u984c\u304c\u898b\u3064\u304b\u308a\u3001\u4fee\u6b63\u304c\u5fc5\u8981\u306b\u306a\u3063\u305f\u969b\u306b\u521d\u3081\u3066\u89e6\u308c\u305f\u306e\u3067\u3059\u304c\u60c5\u5831\u304c\u5c11\u306a\u304f\u82e6\u52b4\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u3053\u306e\u6587\u7ae0\u306f\u305d\u306e\u6570\u5c11\u306a\u3044\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\uff08\u53c2\u8003\u6587\u732e\u306e\u9805\u76ee\u306b\u8a18\u8f09\u3057\u3066\u3042\u308a\u307e\u3059\uff09\u3084\u30ab\u30fc\u30cd\u30eb\u306e\u30b3\u30fc\u30c9\u3092\u8aad\u307f\u306a\u304c\u3089\u7406\u89e3\u3057\u305f\u5185\u5bb9\u306b\u3064\u3044\u3066\u793e\u5185\u5411\u3051\u306b\u307e\u3068\u3081\u305f\u3082\u306e\u3067\u3059\u3002<\/p>\n<h1>Abstract<\/h1>\n<p>Linux\u306b\u306fQoS\u3084Traffic Control(tc)\u3068\u547c\u3070\u308c\u308bIP\u30d1\u30b1\u30c3\u30c8\u306e\u9001\u4fe1\u5236\u5fa1\u6a5f\u69cb\u304c\u3042\u308a\u307e\u3059\u3002tc\u306f\u69d8\u3005\u306a\u76ee\u7684\u306b\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u6700\u3082\u4e00\u822c\u7684\u306a\u5229\u7528\u65b9\u6cd5\u306f\u7279\u5b9a\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\/\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u5e2f\u57df\u3092\u5236\u9650\u3057\u305f\u3044\u5834\u5408\u3067\u3057\u3087\u3046\u3002<br \/>\n\u5927\u304d\u306a\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u767a\u751f\u3055\u305b\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u591a\u304f\u306fbwlimit\u3068\u3044\u3063\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6301\u3061\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u5236\u9650\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u304c\u3001\u4e2d\u306b\u306f\u305d\u306e\u3088\u3046\u306a\u6a5f\u80fd\u3092\u4fdd\u305f\u306a\u3044\u3082\u306e\u3082\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070Redis\u306f\u65b0\u3057\u3044Replication\u3092\u5f35\u308b\u969b\u306b\u30b9\u30c8\u30a2\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3059\u3079\u3066\u3092\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u3044\u3063\u3071\u3044\u306b\u4f7f\u3063\u3066\u9001\u4fe1\u3057\u3088\u3046\u3068\u3057\u307e\u3059\u3002<br \/>\ntc\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u3053\u306e\u3088\u3046\u306a\u901a\u4fe1\u306e\u5e2f\u57df\u4f7f\u7528\u3092\u4e00\u5b9a\u5024\u306b\u5236\u9650\u3057\u3001\u540c\u3058\u30b5\u30fc\u30d0\u30fc\/\u30b9\u30a4\u30c3\u30c1\/\u30eb\u30fc\u30bf\u30fc\u3092\u4f7f\u7528\u3059\u308b\u4ed6\u306e\u901a\u4fe1\u306b\u5f71\u97ff\u3092\u53ca\u307c\u3059\u3053\u3068\u3092\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u6587\u7ae0\u3067\u306ftc\u306b\u3064\u3044\u3066\u5e2f\u57df\u5236\u9650\u306b\u5229\u7528\u3059\u308b\u6a5f\u80fd\u3092\u4e2d\u5fc3\u306b\u539f\u7406\u30fb\u5b9f\u88c5\u3092\u89e3\u8aac\u3057\u3001\u5b9f\u7528\u7684\u306a\u8a2d\u5b9a\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u3088\u308a\u5177\u4f53\u7684\u306a\u8a2d\u5b9a\u306e\u6307\u91dd\u7b49\u306b\u3064\u3044\u3066\u306f\u5225\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u307e\u3068\u3081\u307e\u3057\u305f\u306e\u3067\u305d\u3061\u3089\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002<br \/>\n<a href=\"http:\/\/labs.gree.jp\/blog\/2014\/10\/11288\/\">Linux TC (\u5e2f\u57df\u5236\u5fa1\u3001\u5e2f\u57df\u4fdd\u8a3c) \u8a2d\u5b9a\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/a><\/p>\n<h1>Traffic Control\u306e\u30b3\u30f3\u30bb\u30d7\u30c8<\/h1>\n<p>Traffic Control\u306f\u9001\u4fe1\u3057\u305f\u3044\u30d1\u30b1\u30c3\u30c8\u3092scheduler\u3068\u547c\u3070\u308c\u308b\u3082\u306e\u306b\u901a\u3059\u3053\u3068\u3067\u884c\u308f\u308c\u307e\u3059\u3002scheduler\u306f\u30ad\u30e5\u30fc\u30a4\u30f3\u30b0\u898f\u5247(Queueing discipline: <strong>qdisc<\/strong>)\u3068\u3082\u547c\u3070\u308c\u3001\u30d1\u30b1\u30c3\u30c8\u3092\u4e00\u6642\u7684\u306b\u683c\u7d0d\u3057\u3001\u9806\u756a\u3092\u4e26\u3079\u66ff\u3048\u305f\u308a\u3001\u9045\u5ef6\u3055\u305b\u305f\u308a\u3001\u7834\u68c4\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0bqdisc\u3068\u547c\u3073\u307e\u3059\u3002<\/p>\n<p>qdisc\u306f\u6975\u3081\u3066\u9ad8\u5ea6\u3067\u8907\u96d1\u306a\u69cb\u9020\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u304c\u3001\u5916\u90e8\u304b\u3089\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306f\u3068\u3066\u3082\u30b7\u30f3\u30d7\u30eb\u306a\u3082\u306e\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u5916\u90e8\u304b\u3089\u898b\u305fqdisc\u306e\u64cd\u4f5c\u306f\u4e3b\u306b2\u3064\u3057\u304b\u3042\u308a\u307e\u305b\u3093\u3002enqueue\u3068dequeue\u3067\u3059\u3002<\/p>\n<h2>qdisc\u304c\u306a\u3044\u5834\u5408\u306e\u30d1\u30b1\u30c3\u30c8\u9001\u4fe1<\/h2>\n<p>\u307e\u305aqdisc\u304c\u5b58\u5728\u3057\u306a\u3044\u3068\u4eee\u5b9a\u3057\u305f\u5834\u5408\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u30d1\u30b1\u30c3\u30c8\u9001\u4fe1\u306f\u4ee5\u4e0b\u306e\u56f3\u306e\u3088\u3046\u306b\u30d7\u30ed\u30c8\u30b3\u30eb\u5c64\u304cdevice driver\u306b\u30d1\u30b1\u30c3\u30c8\u3092\u6e21\u3059\u51e6\u7406\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre><code># packet send\n\n\u30d7\u30ed\u30c8\u30b3\u30eb\u5c64 -> (\u9001\u4fe1\u3055\u308c\u308b\u4e88\u5b9a\u306e\u30d1\u30b1\u30c3\u30c8) --> device driver<\/code><\/pre>\n<p>qdisc\u306f\u3053\u306e\u30d7\u30ed\u30c8\u30b3\u30eb\u5c64\u3068device driver\u306e\u9593\u306b\u5165\u308a\u307e\u3059\u3002<\/p>\n<h2>enqueue<\/h2>\n<p>enqueue\u306f\u9001\u4fe1\u3055\u308c\u308b\u4e88\u5b9a\u306e\u30d1\u30b1\u30c3\u30c8\u3092qdisc\u306b\u683c\u7d0d\u3057\u3088\u3046\u3068\u3059\u308b\u51e6\u7406\u3067\u3059\u3002\u4e3b\u306bTCP\u306a\u3069\u306e\u30d7\u30ed\u30c8\u30b3\u30eb\u5c64\u304b\u3089\u547c\u3073\u51fa\u3055\u308c\u307e\u3059\u3002enqueue\u306f\u5931\u6557\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u3001\u305d\u306e\u5834\u5408\u306f\u305d\u306e\u30d1\u30b1\u30c3\u30c8\u306fdrop\u3057\u307e\u3059\u3002\u3069\u306e\u3088\u3046\u306a\u5834\u5408\u306benqueue\u304c\u6210\u529f\u3057\u3069\u306e\u3088\u3046\u306a\u5834\u5408\u306b\u5931\u6557\u3059\u308b\u304b\u306fqdisc\u5185\u90e8\u3067\u5224\u65ad\u3055\u308c\u3001\u5916\u90e8\u306b\u306f\u7d50\u679c\u306e\u307f\u304c\u4f1d\u308f\u308a\u307e\u3059\u3002<\/p>\n<pre><code># packet enqueue\n\n\u30d7\u30ed\u30c8\u30b3\u30eb\u5c64 --> (\u9001\u4fe1\u3055\u308c\u308b\u4e88\u5b9a\u306e\u30d1\u30b1\u30c3\u30c8) --> qdisc\n                                       |\n                                       v\n\u3000\u3000\u3000\u3000\u3000\u3000 \u3000\u3000        \u3000\u3000\u3000\u3000\u3000\u3000 \u3000   drop<\/code><\/pre>\n<h2>dequeue<\/h2>\n<p>dequeue\u306fqdisc\u306b\u683c\u7d0d\u3055\u308c\u305f\u30d1\u30b1\u30c3\u30c8\u3092\u53d6\u308a\u51fa\u3057\u3001\u30c7\u30d0\u30a4\u30b9\u30c9\u30e9\u30a4\u30d0\u306b\u6e21\u3059\u51e6\u7406\u3067\u3059\u3002dequeue\u3082enqueue\u3068\u540c\u69d8\u306b\u5931\u6557\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u5931\u6557\u306f\u5358\u306bqdisc\u304c\u7a7a\u306e\u5834\u5408\u306b\u3082\u767a\u751f\u3057\u307e\u3059\u3057\u3001\u4f55\u3089\u304b\u306e\u7406\u7531\u3067\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30d1\u30b1\u30c3\u30c8\u3092qdisc\u304c\u9001\u4fe1\u3057\u305f\u304f\u306a\u3044\u5834\u5408\u306b\u3082\u767a\u751f\u3057\u307e\u3059\u3002\u3069\u306e\u3088\u3046\u306a\u5834\u5408\u306b\u6210\u529f\u3057\u3069\u306e\u3088\u3046\u306a\u5834\u5408\u306b\u5931\u6557\u3059\u308b\u304b\u306fqdisc\u5185\u90e8\u3067\u5224\u65ad\u3055\u308c\u3001\u5916\u90e8\u306b\u306f\u7d50\u679c\u306e\u307f\u304c\u4f1d\u308f\u308a\u307e\u3059\u3002<\/p>\n<pre><code># packet dequeue\n\nqdisc --> (\u9001\u4fe1\u3055\u308c\u308b\u4e88\u5b9a\u306e\u30d1\u30b1\u30c3\u30c8) --> device driver<\/code><\/pre>\n<h1>qdisc\u306e\u4e00\u89a7\u3068\u76ee\u7684\u3001\u4ed5\u7d44\u307f<\/h1>\n<p>\u3053\u306e\u7ae0\u3067\u306f\u4e3b\u306aqdisc\u306e\u4e00\u89a7\u3068\u305d\u306e\u76ee\u7684\u3068\u4ed5\u7d44\u307f\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<h2>classless qdisc<\/h2>\n<p>classless\u306a\u30b7\u30f3\u30d7\u30eb\u306aqdisc\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<h3>PFIFO<\/h3>\n<p>PFIFO(Packet First-In First-Out)\u306f\u6700\u521d\u306b\u5165\u3063\u305f\u30d1\u30b1\u30c3\u30c8\u304c\u6700\u521d\u306b\u51fa\u3066\u3044\u304f\u30b7\u30f3\u30d7\u30eb\u306aqdisc\u3067\u3059\u3002<br \/>\nP(Packet)\u3068\u3044\u3046\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u304c\u3064\u3044\u3066\u3044\u308b\u306e\u306f\u683c\u7d0d\u3067\u304d\u308b\u30d1\u30b1\u30c3\u30c8\u306e\u9650\u754c\u3092\u30d1\u30b1\u30c3\u30c8\u6570\u3067\u898f\u5b9a\u3057\u3066\u3044\u308b\u304b\u3089\u3067\u3059\u3002\u9650\u754c\u3092Byte\u3067\u898f\u5b9a\u3067\u304d\u308bBFIFO\u3068\u3044\u3046\u3082\u306e\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n<h3>PFIFO_FAST<\/h3>\n<p>PFIFO_FAST\u306fPFIFO\u306b\u30d1\u30b1\u30c3\u30c8\u306e\u512a\u5148\u5ea6(Priority: prio)\u3092\u8003\u616e\u3059\u308b\u6a5f\u80fd\u3092\u8ffd\u52a0\u3057\u305f\u3082\u306e\u3067\u3059\u3002\u5185\u90e8\u306b\u8907\u6570\u306equeue\u3092\u6301\u3063\u3066\u304a\u308a\u3001enqueue\u306e\u969b\u306bIP\u30d8\u30c3\u30c0\u306eTOS\u3092\u8aad\u307f\u512a\u5148\u5ea6\u3067\u5206\u985e\u3057\u3066queue\u306b\u683c\u7d0d\u3057\u307e\u3059\u3002dequeue\u306e\u969b\u306f\u512a\u5148\u5ea6\u306e\u9ad8\u3044queue\u304b\u3089\u5148\u306b\u53d6\u308a\u51fa\u3055\u308c\u307e\u3059\u3002<br \/>\n\u3053\u306ePFIFO_FAST\u306fLinux\u306e\u30c7\u30d5\u30a9\u30eb\u30c8qdisc\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<br \/>\n\u307e\u305f\u3001\u683c\u7d0d\u3067\u304d\u308bpacket\u6570\u306f\u6307\u5b9a\u304c\u306a\u3044\u5834\u5408tx_queue_len\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u5024\u306fifconfig\u30b3\u30de\u30f3\u30c9\u306etxqueuelen\u306e\u9805\u76ee\u3067\u78ba\u8a8d\/\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>SFQ<\/h3>\n<p>SFQ(Stochastic Fair Queuing)\u306f\u30bb\u30c3\u30b7\u30e7\u30f3\u3054\u3068\u306b\u516c\u5e73\u306b\u30d1\u30b1\u30c3\u30c8\u9001\u4fe1\u6a5f\u4f1a\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u308bqdisc\u3067\u3059\u3002<br \/>\nPFIFO\u3067\u591a\u6570\u306e\u30d1\u30b1\u30c3\u30c8\u3092\u9001\u4fe1\u3059\u308b\u30bb\u30c3\u30b7\u30e7\u30f3\u3067\u5e2f\u57df\u3084qdisc\u304c\u3044\u3063\u3071\u3044\u3068\u306a\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u3042\u307e\u308a\u30d1\u30b1\u30c3\u30c8\u3092\u9001\u4fe1\u3057\u306a\u3044\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u30d1\u30b1\u30c3\u30c8\u3092\u9001\u4fe1\u3057\u3088\u3046\u3068\u3057\u3066\u3082\u3001enqueue\u3067\u304d\u305adrop\u3057\u3066\u3057\u307e\u3063\u305f\u308a\u3001\u65e2\u306b\u591a\u6570\u306epacket\u304cqdisc\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u3066dequeue\u3059\u308b\u307e\u3067\u306b\u9577\u3044\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u5834\u5408\u306bPFIFO\u306e\u4ee3\u308f\u308a\u306bSFQ\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3053\u306e\u3088\u3046\u306a\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u30d1\u30b1\u30c3\u30c8\u3092drop\u305b\u305a\u306b\u8fc5\u901f\u306b\u9001\u4fe1\u3067\u304d\u308b\u53ef\u80fd\u6027\u3092\u9ad8\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br \/>\n\u305f\u3060\u3057SFQ\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067latency\u304c\u5927\u304d\u304f\u306a\u3063\u3066\u3057\u307e\u3046\u3068\u3044\u3046\u6b20\u70b9\u304c\u5b58\u5728\u3057\u307e\u3059\u3002<\/p>\n<p>SFQ\u3067\u306f\u591a\u6570\u306equeue\u3068\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u7528\u610f\u3057\u3001\u30d1\u30b1\u30c3\u30c8\u3092\u6240\u5c5e\u3059\u308b\u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u5fdc\u3058\u305fqueue\u306b\u683c\u7d0d\u3057\u307e\u3059\u3002dequeue\u3067\u306f\u5404queue\u3092\u9806\u756a\u306b\u307e\u308f\u308a(Round Robin)\u30d1\u30b1\u30c3\u30c8\u3092\u53d6\u308a\u51fa\u3057\u307e\u3059\u3002\u307e\u305f1\u3064\u306equeue\u304b\u3089\u4e00\u5b9a\u6570\u306e\u30d1\u30b1\u30c3\u30c8\u3092\u53d6\u308a\u51fa\u3059\u3068\u5f37\u5236\u7684\u306b\u6b21\u306equeue\u306b\u53d6\u308a\u51fa\u3059\u5bfe\u8c61\u3092\u79fb\u3057\u307e\u3059\u3002<br \/>\n\u540c\u4e00\u30bb\u30c3\u30b7\u30e7\u30f3\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\u3059\u308b\u306e\u306b\u306f\u30cf\u30c3\u30b7\u30e5\u5024\u306ekey\u306b\u306fdestination address, source address, protocol\u756a\u53f7\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u30d7\u30ed\u30c8\u30b3\u30eb\u304cTCP, UDP\u306a\u3069\u306e\u5834\u5408\u306fsource port, destination port\u3082\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n<h3>TBF<\/h3>\n<p>TBF(Token Bucket Filter)\u306fbitrate\u3092\u5236\u5fa1\u3059\u308b\u305f\u3081\u306eqdisc\u3067\u3059\u3002<br \/>\nToken Bucket\u3068\u3044\u3046\u6982\u5ff5\u3092\u7528\u3044\u308b\u3053\u3068\u3067bitrate\u5236\u9650\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\nToken Bucket\u306f\u6642\u9593\u7d4c\u904e\u306b\u3088\u308atoken\u304c\u8ffd\u52a0\u3055\u308c\u308b\u30d0\u30b1\u30c4\u3067\u30d1\u30b1\u30c3\u30c8\u3092dequeue\u3059\u308b\u969b\u306bdequeue\u3057\u305f\u30d1\u30b1\u30c3\u30c8\u306ebyte\u6570\u5206token\u3092\u6d88\u8cbb\u3057\u307e\u3059\u3002token\u3092\u3059\u3079\u3066\u6d88\u8cbb\u3057\u30d0\u30b1\u30c4\u304c\u7a7a\u306b\u306a\u3063\u305f\u72b6\u614b\u3067\u306fdequeue\u304c\u5931\u6557\u3057\u307e\u3059\u3002<br \/>\n\u6307\u5b9a\u3057\u305fbitrate\u3088\u308a\u5c11\u306a\u3044bitrate\u306e\u5206\u3057\u304b\u9001\u4fe1\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u30d1\u30b1\u30c3\u30c8\u304c\u306a\u3044\u3068\u304d\u306b\u306f\u30d0\u30b1\u30c4\u306b\u306ftoken\u304c\u8caf\u307e\u308a\u307e\u3059\u3002\u8caf\u307e\u3063\u3066\u3044\u308btoken\u306e\u5206\u306e\u30d1\u30b1\u30c3\u30c8\u306b\u3064\u3044\u3066\u306f\u9023\u7d9a\u3057\u3066dequeue\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u3001\u3053\u308c\u3092 <strong>burst<\/strong> \u3068\u547c\u3073\u307e\u3059\u3002<br \/>\n\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066burst\uff08\u30d0\u30b1\u30c4\u306e\u5927\u304d\u3055\uff09\u3068bitrate\uff08\u6642\u9593\u3042\u305f\u308a\u306e\u30d0\u30b1\u30c4\u3078\u306etoken\u306e\u4f9b\u7d66\u91cf\uff09\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\u30d1\u30b1\u30c3\u30c8\u9001\u4fe1\u306e\u7279\u6027\u3092\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u306a\u305c\u3053\u306e\u3088\u3046\u306a\u3084\u3084\u3053\u3057\u3044\u4ed5\u7d44\u307f\u3068\u306a\u3063\u3066\u3044\u308b\u304b\u306f\u5f8c\u306e\u7ae0\u300cbitrate\u3068timer\u89e3\u50cf\u5ea6\u300d\u3067\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<p>\u203b\u306a\u304a\u30d0\u30b1\u30c4\u3068\u3044\u3046\u306e\u306f\u3042\u304f\u307e\u3067\u30e1\u30bf\u30d5\u30a1\u30fc\u3067\u3042\u308a\u3001\u5b9f\u88c5\u4e0a\u306ftokens\u3068\u3044\u3063\u305f\u540d\u524d\u306eint\u578b\u306e\u5909\u6570\u3067\u3059\u3002\u305d\u306e\u305f\u3081burst\u3092\u5927\u304d\u304f\u3057\u3066\u4f8b\u3048\u307010MB\u306b\u3057\u3066\u3082\u4f55\u304b\u306e\u30d0\u30c3\u30d5\u30a1\u3068\u3057\u306610MB\u30e1\u30e2\u30ea\u3092\u591a\u304f\u6d88\u8cbb\u3059\u308b\u3068\u3044\u3063\u305f\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002<br \/>\n\uff08\u3053\u306e\u3042\u305f\u308a\u306f\u8a73\u3057\u304f\u8abf\u3079\u3066\u3044\u306a\u3044\u306e\u3067\u3059\u304c\u3001\u30d1\u30b1\u30c3\u30c8\u9001\u4fe1\u306b\u304a\u3044\u3066\u6d88\u8cbb\u3059\u308b\u30e1\u30e2\u30ea\u3092\u6c7a\u5b9a\u3059\u308b\u306e\u306f\/proc\/sys\/net\/core\/wmem_default, \/proc\/sys\/net\/core\/wmem_max, \/proc\/sysy\/net\/ipv4\/tcp_wmem, \u5404qdisc\u306elimit\u306a\u3069\u3067\u3057\u3087\u3046\uff09<\/p>\n<h2>classful qdisc<\/h2>\n<p>classful qdisc\u3068\u306fclass(\u968e\u5c64\u3092\u6301\u3063\u305f\u5206\u985e\uff09\u69cb\u9020\u3092\u6301\u3063\u305fqdisc\u3067\u3059\u3002\u3053\u3053\u3067\u306eclass\u306b\u306f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306a\u3069\u306b\u304a\u3051\u308bclass\u306e\u610f\u5473\u5408\u3044\u306f\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e3b\u306aclassful qdisc\u306bHTB\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h3>classful qdisc\u306e\u4ed5\u7d44\u307f<\/h3>\n<p>classful qdisc\u306f\u5185\u90e8\u306b\u8907\u6570\u306eqdisc\u3092\u6301\u3061\u3001enqueue\u3055\u308c\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u30d1\u30b1\u30c3\u30c8\u306f\u3044\u305a\u308c\u304b\u306e\u5185\u90e8qdisc\u306b\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002classful qdisc\u306b\u304a\u3044\u3066\u306f\u5185\u90e8\u3067\u306eenqueue\u51e6\u7406\u304c2\u3064\u306b\u5206\u304b\u308c\u307e\u3059\u3002classify\u3068\u5185\u90e8qdisc\u3078\u306eenqueue\u3067\u3059\u3002<\/p>\n<p>classify\u3001class\u69cb\u9020\u3001\u5185\u90e8qdisc\u306b\u3064\u3044\u3066\u305d\u308c\u305e\u308c\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<h4>classify<\/h4>\n<p>\u203b\u7b46\u8005\u306fclass\u306b\u3064\u3044\u3066\u306f\u8a73\u3057\u304f\u306a\u3044\u305f\u3081\u3001\u4e0b\u8a18\u306e\u8a18\u8ff0\u306f\u6b63\u78ba\u3067\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>classify\u306ffilter\u304b\u3089\u3069\u306e\u5185\u90e8qdisc\u306b\u683c\u7d0d\u3059\u308b\u3079\u304d\u304b\u3092\u6c7a\u5b9a\u3059\u308b\u51e6\u7406\u3067\u3059\u3002<\/p>\n<p>\u4e0b\u8a18\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f8b\u306b\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre><code># \u30b3\u30de\u30f3\u30c9\u4f8b\ntc qdisc del dev eth0 root\ntc qdisc add dev eth0 root handle 1: htb default 20\ntc class add dev bond0.1230 parent 1: classid 1:1 htb rate 1000Mbit ceil 1000Mbit burst 10Mb cburst 10Mb\ntc class add dev bond0.1230 parent 1:1 classid 1:10 htb rate 200Mbit ceil 200Mbit burst 10Mb cburst 10Mb\ntc class add dev bond0.1230 parent 1:1 classid 1:20 htb rate 800Mbit ceil 1000Mbit burst 10Mb cburst 10Mb\ntc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 6379 0xffff flowid 1:10<\/code><\/pre>\n<p>\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306e\u3046\u30613-5\u884c\u76ee\u306f\u5b9f\u306fclassify\u306b\u306f\u95a2\u4fc2\u304c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<pre><code># \u30b3\u30de\u30f3\u30c9\u4f8b(classify\u306b\u95a2\u4fc2\u3059\u308b\u7b87\u6240\u306e\u307f)\ntc qdisc del dev eth0 root\ntc qdisc add dev eth0 root handle 1: htb default 20\ntc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 6379 0xffff flowid 1:10<\/code><\/pre>\n<p>1:10\u3068\u3044\u3063\u305f\u6570\u5b57\u304c\u96e3\u89e3\u306b\u601d\u3048\u308b\u3067\u3057\u3087\u3046\u3002\u3053\u306e\u6570\u5b57\u306fclassid\u3068\u547c\u3070\u308c\u3001<code>majorid:minorid<\/code>\u3068\u3044\u3046\u66f8\u5f0f\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<br \/>\n\u4eca\u56de\u306e\u30b3\u30de\u30f3\u30c9\u306b\u306f\u308f\u305a\u304b\u306aclass\u3057\u304b\u767b\u5834\u3057\u307e\u305b\u3093\u304c\u5185\u90e8\u7684\u306b\u306f\u3082\u3063\u3068\u305f\u304f\u3055\u3093\u306eclassid\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u305f\u3068\u3048\u3070majorid 1\u306e\u4e2d\u306b\u306f1:0, 1:1, 1:2, ..., 1:100, 1:1000, ...\u3068\u3044\u3063\u305fclassid\u304c\u5b58\u5728\u3057\u307e\u3059\u3002classify\u3067\u306f\u3053\u306e\u4e2d\u3067\u6700\u3082\u5c0f\u3055\u306a\u756a\u53f7\u304b\u3089\u5206\u985e\u306b\u5229\u7528\u3057\u3088\u3046\u3068\u8a66\u307f\u307e\u3059\u3002\u4eca\u56de\u306e\u4f8b\u3067\u306f\u6b21\u306b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<ol>\n<li>1:0\u3092\u78ba\u8a8d\u3059\u308b<\/li>\n<li>1:0\u306ffilter\u3067\u3042\u308b\u3002IP\u30d1\u30b1\u30c3\u30c8\u304cTCP\u3001UDP\u306a\u3069\u3067\u3042\u3063\u305f\u5834\u5408\u306bsource port\u304c6379\u3067\u3042\u308b\u304b\u78ba\u8a8d\u3057\u3001\u305d\u3046\u3067\u3042\u308c\u30701:10\u306b\u5206\u985e\u3057\u3001classify\u3092\u5b8c\u4e86\u3059\u308b\u3002<\/li>\n<li>2\u306b\u8a72\u5f53\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u3001\u4ed6\u306bfilter\u304c\u306a\u3044\u305f\u3081\u3001default\u3067\u8a2d\u5b9a\u3055\u308c\u305f1:20\u306b\u5206\u985e\u3057\u3001classify\u3092\u5b8c\u4e86\u3059\u308b\u3002<\/li>\n<\/ol>\n<p><\/p>\n<h4>class\u69cb\u9020<\/h4>\n<p>\u5148\u307b\u3069\u306e\u30b3\u30de\u30f3\u30c9\u4f8b\u3067\u306fclassify\u306e\u30eb\u30fc\u30eb\u3060\u3051\u3067\u306a\u304fclass\u69cb\u9020\u3082\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u4eca\u56de\u306e\u4f8b\u3060\u3068\u4e0b\u56f3\u306e\u3088\u3046\u306a\u69cb\u9020\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre><code># \u30b3\u30de\u30f3\u30c9\u4f8b\ntc qdisc del dev eth0 root\ntc qdisc add dev eth0 root handle 1: htb default 20\ntc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbit ceil 1000Mbit burst 10Mb cburst 10Mb\ntc class add dev eth0 parent 1:1 classid 1:10 htb rate 200Mbit ceil 200Mbit burst 10Mb cburst 10Mb\ntc class add dev eth0 parent 1:1 classid 1:20 htb rate 800Mbit ceil 1000Mbit burst 10Mb cburst 10Mb\ntc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 6379 0xffff flowid 1:10<\/code><\/pre>\n<pre><code># \u30af\u30e9\u30b9\u56f3\n\n  root(1:)\n     |\n    1:1\n     |\n  ------\n  |     |\n1:10  1:20<\/code><\/pre>\n<p>classify\u3067\u306f\u30d1\u30b1\u30c3\u30c8\u304c\u3053\u306etree\u306e\u3088\u3046\u306a\u69cb\u9020\u306e\u3044\u305a\u308c\u304b\u306e\u8449(leaf)\u306b\u5206\u985e\u3055\u308c\u308b\u3088\u3046\u306a\u30eb\u30fc\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\n\u3067\u306f\u3001\u3053\u306eclass\u69cb\u9020\u306f\u3069\u306e\u3088\u3046\u306b\u5229\u7528\u3055\u308c\u308b\u306e\u3067\u3057\u3087\u3046\u304b\u3002\u5b9f\u306f\u305d\u308c\u306fclassful qdisc\u306e\u5b9f\u88c5\u306b\u4efb\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<h4>\u5185\u90e8qdisc<\/h4>\n<p>\u5185\u90e8qdisc\u306fclassful\u306aqdisc\u306e\u5185\u90e8\u3067\u4f7f\u7528\u3055\u308c\u308bqdisc\u3067\u3059\u3002\u4e00\u822c\u7684\u306b\u306fclassless qdisc\u3067\u3042\u308bPFIFO\u3084SFQ\u306a\u3069\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<br \/>\nclass\u69cb\u9020\u306e\u8449(leaf)\u3068\u306a\u308b\u8981\u7d20\u306b\u306f\u304b\u306a\u3089\u305aqdisc\u304c1\u3064\u4ed8\u5c5e\u3057\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u4f8b\u3067\u306fclassful qdisc\u3067\u3042\u308bA\u306eleaf\u3068\u306a\u308b1:10\u30681:20\u306e\u5185\u90e8qdisc\u3068\u3057\u3066\u306e\u51e6\u7406\u3092B\u3068C\u306b\u884c\u308f\u305b\u308b\u3088\u3046handle\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u3053\u3053\u3067\u306fB\u3068C\u306b\u65b0\u305f\u306amajorid 100:\u3068200:\u3092\u4e0e\u3048\u3066\u3044\u307e\u3059\u304c\u3001PFIFO\u306fclassless qdisc\u3067\u3042\u308b\u305f\u3081\u5927\u304d\u306a\u610f\u5473\u306f\u6301\u3061\u307e\u305b\u3093\u3002\u4ed6\u306emajorid\u3068\u304b\u3076\u3089\u306a\u3044\u3082\u306e\u3092\u6307\u5b9a\u3059\u308c\u3070\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<pre><code># \u30b3\u30de\u30f3\u30c9\u4f8b\ntc qdisc del dev eth0 root\ntc qdisc add dev eth0 root handle 1: htb default 20 # qdisc A\ntc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbit ceil 1000Mbit burst 10Mb cburst 10Mb\ntc class add dev eth0 parent 1:1 classid 1:10 htb rate 200Mbit ceil 200Mbit burst 10Mb cburst 10Mb\ntc class add dev eth0 parent 1:1 classid 1:20 htb rate 800Mbit ceil 1000Mbit burst 10Mb cburst 10Mb\ntc qdisc add dev eth0 parent 1:10 handle 100: pfifo limit 1000 # inner qdisc B\ntc qdisc add dev eth0 parent 1:20 handle 200: pfifo limit 1000 # inner qdisc C<\/code><\/pre>\n<pre><code># \u30af\u30e9\u30b9\u56f3\u3068\u5185\u90e8qdisc\n\n   root(1:)\n      |\n     1:1\n      |\n  ---------\n  |        |\n1:10     1:20\n  |        |\nB(100:)  C(200:)<\/code><\/pre>\n<p>\u306a\u304a\u3001\u5185\u90e8qdisc\u306f\u6307\u5b9a\u3092\u7701\u7565\u3057\u305f\u5834\u5408\u306b\u3082\u6697\u9ed9\u7684\u306b\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002HTB\u306e\u5834\u5408PFIFO\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre><code># \u30b3\u30de\u30f3\u30c9\u4f8b\ntc qdisc del dev eth0 root\ntc qdisc add dev eth0 root handle 1: htb default 20 # qdisc A\ntc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbit ceil 1000Mbit burst 10Mb cburst 10Mb\ntc class add dev eth0 parent 1:1 classid 1:10 htb rate 200Mbit ceil 200Mbit burst 10Mb cburst 10Mb\ntc class add dev eth0 parent 1:1 classid 1:20 htb rate 800Mbit ceil 1000Mbit burst 10Mb cburst 10Mb\n\n# \u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3068\u540c\u7b49\u306e\u6307\u5b9a\u304c\u6697\u9ed9\u7684\u306b\u884c\u308f\u308c\u308b\n# tc qdisc add dev eth0 parent 1:10 handle &lt;XXXX&gt;: pfifo limit $<tx_queue_len>\n# tc qdisc add dev eth0 parent 1:20 handle &lt;XXXX&gt;: pfifo limit $<tx_queue_len><\/code><\/pre>\n<h3>HTB<\/h3>\n<p>HTB(Hierarchical Token Bucket)\u306f\u968e\u5c64\u69cb\u9020\u3068TBF\u6a5f\u80fd\u3092\u6301\u3063\u305fclassful qdisc\u3067\u3059\u3002TBF\u3068\u6bd4\u8f03\u3059\u308b\u3068\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6a5f\u80fd\u304c\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li> \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u5206\u985e\u3057\u3066\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3054\u3068\u306b\u5e2f\u57df\u5236\u9650\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b<\/li>\n<li> \u5206\u985e\u3055\u308c\u305f\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u304c\u78ba\u5b9f\u306b\u4f7f\u7528\u3067\u304d\u308b\u5e2f\u57df\u3092\u78ba\u4fdd\u3059\u308b\u5e2f\u57df\u4fdd\u8a3c\u304c\u3067\u304d\u308b<\/li>\n<li> class\u306etree\u69cb\u9020\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u3001\u305d\u306e\u4e2d\u3067\u5e2f\u57df\u3092\u8b72\u308a\u3042\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u3002<\/p>\n<\/li>\n<\/ul>\n<p>HTB\u3067\u306f\u5404class\u304c\u4f7f\u7528\u3067\u304d\u308b\u5e2f\u57df\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3042\u3089\u305f\u3081\u3066\u4eca\u307e\u3067\u5229\u7528\u3057\u3066\u304d\u305f\u4f8b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre><code># \u30b3\u30de\u30f3\u30c9\u4f8b\ntc qdisc del dev eth0 root\ntc qdisc add dev eth0 root handle 1: htb default 20 # qdisc A\ntc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbit ceil 1000Mbit burst 10Mb cburst 10Mb\ntc class add dev eth0 parent 1:1 classid 1:10 htb rate 200Mbit ceil 200Mbit burst 10Mb cburst 10Mb\ntc class add dev eth0 parent 1:1 classid 1:20 htb rate 800Mbit ceil 1000Mbit burst 10Mb cburst 10Mb<\/code><\/pre>\n<p><strong>rate<\/strong> \u3068 <strong>ceil<\/strong> \u304c\u5e2f\u57df\u306b\u3064\u3044\u3066\u306e\u6307\u5b9a\u3067\u3059\u3002\u3053\u306e2\u3064\u306e\u6982\u5ff5\u306b\u3064\u3044\u3066\u8aac\u660e\u3059\u308b\u306e\u306f\u3068\u3066\u3082\u96e3\u3057\u3044\u306e\u3067\u3059\u304c\u3001\u4e00\u822c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u306b\u304a\u3044\u3066\u306e\u3053\u3068\u306b\u3064\u3044\u3066\u306e\u307f\u3067\u3059\u3068\u6bd4\u8f03\u7684\u7c21\u5358\u306a\u3082\u306e\u3068\u306a\u308a\u307e\u3059\u3002<br \/>\n\u307e\u305fburst\u3068cburst\u306f\u305d\u308c\u305e\u308crate\u3068ceil\u306b\u5bfe\u5fdc\u3059\u308btoken bucket\u306esize\u3068\u306a\u308a\u307e\u3059\u3002\u5f8c\u8ff0\u3059\u308b\u65b9\u6cd5\u3067\u8a08\u7b97\u30fb\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\nHTB\u306b\u3082\u540c\u69d8\u306e\u6a5f\u80fd\u304c\u3042\u3063\u305f\u3001ceil\u304b\u3089\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<h4>ceil<\/h4>\n<p>ceil\u306f\u305d\u306eclass\u304c\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u6700\u5927\u306e\u5e2f\u57df\u3001\u3064\u307e\u308a\u5e2f\u57df\u5236\u9650\u306e\u5024\u3067\u3059\u3002\u4e0a\u8a18\u306e\u4f8b\u3067\u3059\u30681:1\u306f1000Mbits\/s\u306b\u30011:10\u306f200Mbits\/s\u306b\u30011:20\u306f1000Mbits\/s\u306b\u5236\u9650\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>ceil\u3092\u6307\u5b9a\u3059\u308b\u3068\u304d\u3001\u5b50\u306eceil\u306e\u3046\u3061\u6700\u5927\u306e\u3082\u306e\u304c\u89aa\u306eceil\u3068\u540c\u4e00\u304b\u305d\u308c\u4ee5\u4e0b\u306b\u306a\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3055\u3082\u306a\u3044\u3068\u3001\u6319\u52d5\u306e\u8aac\u660e\u304c\u5927\u5909\u96e3\u3057\u3044\u3082\u306e\u3068\u306a\u308a\u307e\u3059\u3002\u305f\u3060\u3057\u5408\u8a08\u5024\u306e\u8a08\u7b97\u306f\u53b3\u5bc6\u3067\u3042\u308b\u5fc5\u8981\u306f\u306a\u304f\u3001\u6982\u306d\u5408\u3063\u3066\u3044\u308c\u3070\u5b9f\u7528\u4e0a\u306e\u554f\u984c\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p>ceil\u304c\u660e\u793a\u7684\u306b\u6307\u5b9a\u3055\u308c\u306a\u3044\u5834\u5408\u3001rate\u3068\u540c\u4e00\u306e\u5024\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<h4>rate<\/h4>\n<p>rate\u306fclass\u69cb\u9020\u306e\u6700\u4e0a\u4f4d\u3068\u305d\u308c\u4ee5\u5916\u3067\u610f\u5473\u5408\u3044\u304c\u7570\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u6700\u4e0a\u4f4d\u3067\u306f\u5358\u306bbitrate\u306e\u4e0a\u9650\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u3053\u308c\u306fceil\u3068\u540c\u3058\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u6700\u4e0a\u4f4dclass\u3067\u306frate=ceil\u3068\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002<\/p>\n<p>\u305d\u308c\u4ee5\u5916\u306e\u7b87\u6240\u3067\u306frate\u306f\u305d\u306eclass\u306b\u4fdd\u8a3c\u3055\u308c\u3066\u3044\u308b\u5e2f\u57df\u3067\u3059\u3002\u4e0a\u8a18\u306e\u4f8b\u3067\u3059\u30681:1\u306b\u306f1000Mbits\/s\u304c\u30011:10\u306b\u306f200Mbits\/s\u304c\u30011:20\u306b\u306f800Mbits\/s\u304c\u4f7f\u7528\u3067\u304d\u308b\u3053\u3068\u304c\u4fdd\u8a3c\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>rate\u3092\u6307\u5b9a\u3059\u308b\u3068\u304d\u3001\u5b50\u306erate\u306e\u5408\u8a08\u304c\u89aa\u306erate\u3068\u540c\u4e00\u304b\u305d\u308c\u4ee5\u4e0b\u306b\u306a\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3055\u3082\u306a\u3044\u3068\u3001\u6319\u52d5\u306e\u8aac\u660e\u304c\u5927\u5909\u96e3\u3057\u3044\u3082\u306e\u3068\u306a\u308a\u307e\u3059\u3002\u305f\u3060\u3057\u5408\u8a08\u5024\u306e\u8a08\u7b97\u306f\u53b3\u5bc6\u3067\u3042\u308b\u5fc5\u8981\u306f\u306a\u304f\u3001\u6982\u306d\u5408\u3063\u3066\u3044\u308c\u3070\u5b9f\u7528\u4e0a\u306e\u554f\u984c\u306f\u3042\u308a\u307e\u305b\u3093\u3002<br \/>\n\u4eca\u56de\u306e\u4f8b\u3067\u3059\u3068<br \/>\n200Mbits\/s+800Mbits\/s=1000Mbit\/s<br \/>\n\u3067\u89aa\u306erate\u3068\u5b50\u306erate\u306e\u5408\u8a08\u304c\u540c\u4e00\u306e\u3082\u306e\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u6ce8\u610f\u70b9\u3068\u3057\u3066\u3001\u5b9f\u969b\u306b\u306f1000Mbits\/s\u3088\u308a\u3082\u901f\u5ea6\u304c\u3067\u306a\u3044\u56de\u7dda\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u30011:10\u30681:20\u304c2\u5bfe8\u306e\u5272\u5408\u3067\u56de\u7dda\u3092\u5206\u3051\u5408\u3048\u308b\u8a33\u300c\u3067\u306f\u306a\u3044\u300d\u3067\u3059\u3002\u756a\u53f7\u304c\u5c0f\u3055\u30441:10\u306e\u30d1\u30b1\u30c3\u30c8\u304c\u512a\u5148\u7684\u306b\u9001\u4fe1\u3055\u308c\u3001quantum(\u5f8c\u8ff0)\u3067\u6307\u5b9a\u3057\u305fByte\u6570\u9001\u4fe1\u3059\u308b\u3068\u6b21\u306e1:20\u306b\u5207\u308a\u66ff\u308f\u308a\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u9001\u4fe1\u3059\u308b\u30d1\u30b1\u30c3\u30c8\u306eByte\u6570\u304c\u5927\u304d\u3044\u3068\u304d\u306f1\u5bfe1\u306b\u8fd1\u3044\u6bd4\u7387\u3068\u306a\u308a\u307e\u3059\u3002<br \/>\nrate\u306f\u89aa\u306erate\u304c\u4fdd\u8a3c\u3055\u308c\u3066\u3044\u308b\u3068\u3044\u3046\u524d\u63d0\u3067\u5b50\u306b\u5206\u3051\u4e0e\u3048\u3089\u308c\u3066\u3044\u307e\u3059\u3002\u6307\u5b9a\u3057\u305frate\u306e\u4e2d\u3067\u6700\u3082\u89aa\u3068\u306a\u308b\u3082\u306e\u306e\u5b50\u4f9b\u306e\u5408\u8a08\u3001\u3053\u306e\u4f8b\u3067\u3059\u30681:10\u30681:20\u306e\u5408\u8a08\u306e1000Mbit\/s\u306f\u3053\u306e\u8a2d\u5b9a\u3092\u884c\u3046\u8005\u81ea\u4fe1\u304c\u306a\u3093\u3089\u304b\u306e\u65b9\u6cd5\u3067\u4fdd\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h4>\u5e2f\u57df(rate)\u306e\u5206\u3051\u3042\u3044<\/h4>\n<p>\u3042\u308b\u7a0b\u5ea6\u306e\u5e2f\u57df\u3092\u4fdd\u8a3c\u3057\u305f\u3044\u304c\u3001\u4fdd\u8a3c\u3057\u305f\u5e2f\u57df\u3092\u5e38\u306b\u4f7f\u7528\u3057\u3064\u3065\u3051\u308b\u8a33\u3067\u306f\u306a\u3044\u3068\u3044\u3046\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306f\u5f80\u3005\u306b\u3057\u3066\u5b58\u5728\u3057\u307e\u3059\u3002HTB\u3067\u306f\u305d\u306e\u3088\u3046\u306b\u3057\u3066\u78ba\u4fdd\u3057\u305f\u3082\u306e\u306e\u4f7f\u7528\u3057\u3066\u3044\u306a\u3044\u5e2f\u57df\u3092\u3001\u5225\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u304c\u5fc5\u8981\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u305d\u3061\u3089\u306b\u5206\u3051\u3042\u305f\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306fHTB\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3084\u5b9f\u88c5\u3067\u306fborrow\u3084lend\u3068\u3044\u3046\u8868\u73fe\u3092\u7528\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u501f\u308a\u305f\u3082\u306e\u3092\u8fd4\u3057\u305f\u308a\u3059\u308b\u308f\u3051\u3067\u306f\u306a\u3044\u306e\u3067\u3001\u5206\u3051\u3042\u3044\u3084\u5206\u3051\u4e0e\u3048\u3068\u3044\u3046\u8868\u73fe\u304c\u9069\u5207\u3067\u3057\u3087\u3046\u3002<br \/>\n\u5177\u4f53\u7684\u306b\u306f\u30d1\u30b1\u30c3\u30c8\u3092dequeue\u3059\u308b\u969b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30ed\u30b8\u30c3\u30af\u3067\u5206\u3051\u3042\u3044\u304c\u767a\u751f\u3057\u307e\u3059\u3002<\/p>\n<ol>\n<li>mainorid\u306e\u5c0f\u3055\u3044leaf class\u304b\u3089rate token bucket\u3092\u78ba\u8a8d\u3057\u3001token\u304c\u6b8b\u3063\u3066\u3044\u308c\u3070\u305d\u308c\u3092\u4f7f\u7528\u3059\u308b\u3002\u89aa\u3001\u305d\u306e\u89aa\uff08\u3044\u308c\u3070\uff09\u3001...\u3001root\u306erate token bucket\u304b\u3089\u3082\u540c\u3058\u91cf\u306etoken\u3092\u6e1b\u3089\u3059\u3002<\/li>\n<li>leaf class\u306erate token bucket\u304c\u7a7a\u306e\u5834\u5408\u3001\u5225\u306eleaf class\u306e\u30d1\u30b1\u30c3\u30c8\u9001\u4fe1\u306b\u51e6\u7406\u3092\u79fb\u3059\u3002<\/li>\n<li>\u3059\u3079\u3066\u306eleaf class\u3067\u30d1\u30b1\u30c3\u30c8dequeue\u304c\u3067\u304d\u306a\u3044\u304c\u3001\u3044\u305a\u308c\u304b\u306eleaf\u306eqdisc\u306b\u30d1\u30b1\u30c3\u30c8\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u3001leaf\u306e1\u3064\u4e0a\u306e\u968e\u5c64\u306e\u89aa\u306eclass\u9054\u3092\u8abf\u3079\u59cb\u3081\u308b\u3002<\/li>\n<li>\u89aa\u3092\u305f\u3069\u3063\u3066\u3044\u304dtoken\u304c\u6b8b\u3063\u3066\u3044\u308bclass\u304c\u5b58\u5728\u3057\u306a\u3044\u304b\u8abf\u3079\u308b\u3002\u307f\u3064\u304b\u3063\u305f\u5834\u5408\u306b\u306f\u305d\u306e\u89aa\u3068\u305d\u3053\u3088\u308a\u3082\u4e0a\u306eclass\u304b\u3089token\u3092\u6e1b\u3089\u3059\u3002\u5b50\u306etoken\u306f\u6e1b\u3089\u3055\u306a\u3044\u3002<\/li>\n<\/ol>\n<p><\/p>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u69cb\u6210\u304b\u3089dequeue\u3059\u308b\u30b7\u30ca\u30ea\u30aa\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u30021token\u306f1byte\u3068\u7d50\u3073\u3064\u3051\u3089\u308c\u308b\u3053\u3068\u306b\u3057\u307e\u3059\u3002<\/p>\n<pre><code>class 1:1  has 300 tokens\nclass 1:10 has 200 tokens\nclass 1:20 has 100 tokens\nqdisc B    has 100bytes * 1 packet\nqdisc C    has 100bytes * 2 packets \n\n   root(1:)\n      |\n     1:1\n      |\n  ---------\n  |        |\n1:10     1:20\n  |        |\nB(100:)  C(200:)<\/code><\/pre>\n<p>\u6700\u521d\u306bleaf class\u304b\u3089dequeue\u304c\u8a66\u307f\u3089\u308c\u307e\u3059\u3002\u756a\u53f7\u304c\u82e5\u30441:10\u304b\u3089dequeue\u304c\u884c\u308f\u308c\u307e\u3059\u3002<\/p>\n<pre><code>class 1:1  has 300 -> 200 tokens\nclass 1:10 has 200 -> 100 tokens\nclass 1:20 has 100 tokens\nqdisc B    has 100bytes * 1 -> 0 packet\nqdisc C    has 100bytes * 2 packets <\/code><\/pre>\n<p>\u6b21\u306edequeue\u3067\u306f1:10\u304b\u3089dequeue\u3067\u304d\u308bpacket\u306f\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u30011:20\u304b\u3089dequeue\u304c\u884c\u308f\u308c\u307e\u3059\u3002<\/p>\n<pre><code>class 1:1  has 200 -> 100 tokens\nclass 1:10 has 100        tokens\nclass 1:20 has 100 ->   0 tokens\nqdisc B    has 0 packet\nqdisc C    has 100bytes * 2 -> 1 packets <\/code><\/pre>\n<p>\u3053\u308c\u30671:20\u306etoken\u306f0\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u6b21\u306edequeue\u3067\u518d\u30731:20\u304b\u3089dequeue\u3092\u884c\u304a\u3046\u3068\u8a66\u307f\u308b\u306e\u3067\u3059\u304ctoken\u304c\u8db3\u308a\u307e\u305b\u3093\u3002<br \/>\n\u305d\u3053\u3067leaf\u306e1\u3064\u4e0a\u306e\u968e\u5c64(1:1)\u304b\u3089\u306edequeue\u304c\u8a66\u307f\u3089\u308c\u307e\u3059\u30021:1\u306b\u306f\u307e\u3060token\u304c\u3042\u308a\u307e\u3059\u306d\u3002<\/p>\n<pre><code>class 1:1  has 100 ->   0 tokens\nclass 1:10 has 100        tokens\nclass 1:20 has   0        tokens\nqdisc B    has 0 packet\nqdisc C    has 100bytes * 1 -> 0 packets <\/code><\/pre>\n<p>1:20\u306b\u4e0e\u3048\u3089\u308c\u305ftoken\u306f\u4f7f\u3044\u679c\u305f\u3057\u3066\u3044\u305f\u3082\u306e\u306e1:1\u306btoken\u304c\u6b8b\u3063\u3066\u3044\u305f\u305f\u3081\u7121\u4e8b\u306bdequeue\u304c\u884c\u3048\u307e\u3057\u305f\u3002\u3053\u308c\u304c\u5206\u3051\u3042\u3044\u3067\u3059\u3002<\/p>\n<p>\u306a\u304a\u3001\u5f53\u7136\u3067\u3059\u304c1:10\u306a\u3069\u304ctoken\u3092\u4f7f\u3044\u5207\u3063\u3066\u3044\u305f\u5834\u5408\u306b\u306f\u305d\u306e\u89aa\u306e1:1\u306etoken\u3082\u6e1b\u3063\u3066\u3057\u307e\u3046\u305f\u3081\u3001\u5206\u3051\u3042\u3044\u306f\u3067\u304d\u306a\u3044\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u3061\u306a\u307f\u306b\u3001\u6700\u5f8c\u306e\u72b6\u614b\u3067B\u306b\u30d1\u30b1\u30c3\u30c8\u304cenqueue\u3055\u308c\u3001dequeue\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3069\u3046\u306a\u308b\u306e\u3067\u3057\u3087\u3046\u304b\u3002<\/p>\n<pre><code>class 1:1  has   0 tokens\nclass 1:10 has 100 tokens\nclass 1:20 has   0 tokens\nqdisc B    has 100bytes * 0 -> 1 packet\nqdisc C    has 0 packets <\/code><\/pre>\n<p>\u3053\u3046\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre><code>class 1:1  has   0 -> -100 tokens\nclass 1:10 has 100 ->    0 tokens\nclass 1:20 has   0         tokens\nqdisc B    has 100bytes * 1 -> 0 packet\nqdisc C    has 0 packets<\/code><\/pre>\n<p>\u306a\u3093\u30681:1\u306etokens\u304c-100\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002\u3053\u306e\u3088\u3046\u306btoken bucket\u306f\u30de\u30a4\u30ca\u30b9\u306e\u5024\u3092\u3068\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<h4>quantum<\/h4>\n<p>quantum\u3068\u306fdequeue\u5bfe\u8c61\u306eclass\u3092\u5f37\u5236\u7684\u306b\u5207\u308a\u66ff\u3048\u308b\u6a5f\u80fd\u306e\u3057\u304d\u3044\u5024[Byte]\u3067\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u4ee5\u4e0b\u306e\u64ec\u4f3c\u30b3\u30fc\u30c9\u306e\u3088\u3046\u306b\u7b97\u51fa\u3055\u308c\u307e\u3059\u3002r2q\u306fRate To Quantum\u306e\u7565\u3067rate[Byte\/Sec]\u304b\u3089quantum\u3078\u5909\u63db\u3059\u308b\u4fc2\u6570\u3067\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f10\u3067\u3059\u3002<\/p>\n<pre><code>quantum' = rate[Byte\/Sec] \/ r2q\nif quantum' < 1000\n  quantum = 1000\nelse if quantum' > 200000\n  quantum = 200000\nelse\n  quantum = quantum'<\/code><\/pre>\n<p>quantum\u306f\u5c0f\u3055\u3059\u304e\u308b\u3068\u5185\u90e8\u7684\u306aclass\u306elookup\u51e6\u7406\u304c\u5897\u3048\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5f71\u97ff\u3057\u3001\u5927\u304d\u3059\u304e\u308b\u3068\u7279\u5b9a\u306eclass\u306e\u307f\u304cdequeue\u3057\u7d9a\u3051\u308b\u3053\u3068\u3068\u306a\u308a\u307e\u3059\u3002\u901a\u5e38\u306fr2q=10\u306e\u307e\u307e\u3067\u554f\u984c\u306a\u3044\u3067\u3057\u3087\u3046\u3002<br \/>\nr2q\u304b\u3089\u306e\u8a08\u7b97\u3067quantum\u304c1000\u672a\u6e80\u3084200000\u3092\u8d85\u3048\u308b\u6642\u3001kernel\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8b66\u544a\u304c\u3067\u307e\u3059\u3002\u7121\u8996\u3057\u3066\u3082\u69cb\u3044\u307e\u305b\u3093\u304cquantum\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\u8b66\u544a\u3092\u907f\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre><code>HTB: quantum of class %X is small. Consider r2q change.\nHTB: quantum of class %X is big. Consider r2q change.<\/code><\/pre>\n<h1>bitrate\u3068token bucket\u3068timer\u89e3\u50cf\u5ea6<\/h1>\n<p>token bucket\u306e\u8aac\u660e\u3067bucket size\/buffer\/burst\u306a\u3069\u306e\u540d\u524d\u3067\u547c\u3070\u308c\u3066\u3044\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u306a\u305c\u3053\u306e\u3088\u3046\u306a\u3082\u306e\u304c\u5fc5\u8981\u306a\u306e\u3067\u3057\u3087\u3046\u304b\u3002\u4e00\u5b9a\u91cf\u307e\u3067\u306f\u901f\u5ea6\u5236\u9650\u3092\u304b\u3051\u305f\u304f\u306a\u3044\u5834\u5408\u306bburst\u3068\u3044\u3046\u6982\u5ff5\u306f\u4fbf\u5229\u305d\u3046\u3067\u3059\u304c\u3001\u3080\u3057\u308d\u4e00\u77ac\u3067\u3082bitrate\u3092\u8d85\u3048\u308b\u3053\u3068\u306f\u907f\u3051\u305f\u3044\u3068\u601d\u3046\u3053\u3068\u304c\u307b\u3068\u3093\u3069\u306a\u306e\u3067\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002<\/p>\n<h2>token bucket\u306e\u5b9f\u88c5<\/h2>\n<p>\u3053\u308c\u307e\u3067\u306e\u8aac\u660e\u3067\u306ftoken bucket\u306f\u3053\u306e\u3088\u3046\u306a\u4ed5\u7d44\u307f\u3060\u3068\u8aac\u660e\u3057\u307e\u3057\u305f<\/p>\n<pre><code>+\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067token\u5897\u52a0\u91cf\u304c1packet\u5206\u306b\u306a\u308b\n\n         |dequeue  |dequeue  |dequeue  |dequeue  |dequeue  |dequeue\n<ol>\n<li>> (time)<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>\u3057\u304b\u3057\u5b9f\u969b\u306b\u306f\u4e0a\u56f3\u306e\u3088\u3046\u306btoken\u304cpacket\u3092\u9001\u4fe1\u3067\u304d\u308b\u91cf\u305f\u307e\u3063\u305f\u77ac\u9593\u306bdequeue\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u300cTraffic Control\u306e\u30b3\u30f3\u30bb\u30d7\u30c8\u300d\u3067\u66f8\u3044\u305f\u3088\u3046\u306b\u3001\u5916\u90e8\u304b\u3089dequeue\u8981\u6c42\u304c\u6765\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u3057\u304bdequeue\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u8a73\u3057\u304f\u306f\u6b21\u306e\u300cbitrate\u3068dequeue\u6a5f\u4f1a\u300d\u3067\u8aac\u660e\u3057\u307e\u3059\u304c\u3001dequeue\u6a5f\u4f1a\u306f\u5236\u5fa1\u3067\u304d\u306a\u3044\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u767a\u751f\u3057\u3001\u305d\u306e\u9593\u9694\u306f10ms\u4ee5\u4e0a\u306b\u306a\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e10ms\u3068\u3044\u3046\u6570\u5b57\u306fLinux\u306eHigh Resolution Timer(hrtimer)\u3067\u306e\u30a4\u30d9\u30f3\u30c8\u767a\u751f\u306e\u6700\u5c0f\u9593\u9694\u3067\u3059\u3002token bucket\u306e\u5b9f\u88c5\u306b\u306f\u3053\u306ehrtimer\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u3057\u3066\u3053\u306etimer\u306e\u89e3\u50cf\u5ea6\u306fkernel\u306e\u30d3\u30eb\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u304c10ms(1000HZ)\u30844ms(250HZ)\u3067\u3042\u308b\u3053\u3068\u304c\u591a\u3044\u3067\u3059\u3002<\/p>\n<p>\u624b\u5143\u306eUbuntu\u3067\u306f\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d250HZ=4ms\u3067\u3057\u305f\u3002RedHat\u7cfb\u3067\u306f1000HZ=1ms\u3067\u3042\u308b\u3053\u3068\u304c\u591a\u3044\u305d\u3046\u3067\u3059\u3002<\/p>\n<pre><code>$ cat \/boot\/config-`uname -r` | grep HZ\nCONFIG_NO_HZ_COMMON=y\n# CONFIG_HZ_PERIODIC is not set\nCONFIG_NO_HZ_IDLE=y\n# CONFIG_NO_HZ_FULL is not set\nCONFIG_NO_HZ=y\nCONFIG_RCU_FAST_NO_HZ=y\n# CONFIG_HZ_100 is not set\nCONFIG_HZ_250=y\n# CONFIG_HZ_300 is not set\n# CONFIG_HZ_1000 is not set\nCONFIG_HZ=250\nCONFIG_MACHZ_WDT=m\n<\/code><\/pre>\n<p>\u3053\u306e\u3088\u3046\u306atimer\u306e\u4e8b\u60c5\u3092\u53cd\u6620\u3055\u305b\u308b\u3068\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u56f3\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre><code>action:                                   |dequeue*5          |dequeue*5\ntimer callback:                           +                   +\ntokens in the bucket: 0 1   2   3   4   5 | 0   1   2   3   4 | 0   1   2\ntoken increase:         +   +   +   +   + | +   +   +   +   + | +   +   +\ntime:                  -------------------|10ms---------------|20ms---------><\/code><\/pre>\n<p>\u3053\u3053\u3067bucket size\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u3002bucket size\u30922\u3068\u3057\u3066\u307f\u307e\u3057\u3087\u3046<\/p>\n<pre><code>action:                                   |dequeue*2          |dequeue*2\ntimer callback:                           +                   +\ntokens in the bucket: 0 1   2   2   2   2 | 0   1   2   2   2 | 0   1   2\ntoken increase:         +   +   +   +   + | +   +   +   +   + | +   +   +\ntime:                  -------------------|10ms---------------|20ms---------><\/code><\/pre>\n<p>dequeue\u3067\u304d\u308b\u91cf\u304c\u6e1b\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002\u3053\u306e\u3088\u3046\u306bbucket\u304c\u5c0f\u3055\u3059\u304e\u308b\u3068dequeue\u9593\u9694\u3088\u308a\u3082\u5c0f\u3055\u306a\u9593\u9694\u3067\u6ea2\u308c\u3066\u3057\u307e\u3046\u306e\u3067\u3059\u3002\u5236\u9650\u3057\u305fbitrate\u3092\u8d85\u3048\u3066\u3057\u307e\u3046\u306e\u3082\u554f\u984c\u3067\u3059\u304c\u3001\u5236\u9650\u3057\u305fbitrate\u306b\u9054\u3057\u306a\u3044\u306e\u3082\u307e\u305f\u554f\u984c\u3067\u3059\u306d\u3002<\/p>\n<h2>burst, cburst\u306e\u7406\u8ad6\u5024\u306e\u7b97\u51fa<\/h2>\n<p>\u3053\u306e\u3088\u3046\u306bbitrate\u304c\u5c0f\u3055\u3059\u304e\u308b\u73fe\u8c61\u3092\u907f\u3051\u308b\u305f\u3081\u306ebucket size(buffer, burst)\u306e\u6700\u5c0f\u5024\u306e\u8a08\u7b97\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>burst[Bytes] = bitrate[bits\/s] \/ 8 * timer_resolution[sec]<\/p>\n<p>\u5e0c\u671b\u3059\u308bbitrate\u304c100Mbits\/s\u3001\u30bf\u30a4\u30de\u89e3\u50cf\u5ea6\u304c10ms\u306e\u5834\u5408\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>100Mbits\/s \/ 8 * 10ms<br \/>\n= 100 * 10^6 \/ 8 * 10 * 10^-3<br \/>\n= 100 \/ 8 * 10 * 10^3<br \/>\n= 125kBytes<\/p>\n<p>\u306a\u304aHTB\u306b\u304a\u3044\u3066burst, cburst\u5024\u3092\u660e\u793a\u3057\u306a\u3044\u5834\u5408\u3001\u81ea\u52d5\u8a08\u7b97\u304c\u884c\u308f\u308c\u308b\u306e\u3067\u3059\u304c\u3001\u305d\u306e\u5024\u306frate\u304c1000Mbits\/s\u306e\u5834\u5408\u306b1600Bytes\u3068\u8a00\u3063\u305f\u6975\u3081\u3066\u4f4e\u304f\u4f7f\u3044\u7269\u306b\u306a\u3089\u306a\u3044\u5024\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u5024\u306f\u304b\u306a\u3089\u305a\u660e\u793a\u7684\u306b\u6307\u5b9a\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h1>dequeue\u6a5f\u4f1a\u306e\u767a\u751f\u3059\u308b\u983b\u5ea6<\/h1>\n<p>\u524d\u7ae0\u3067timer\u306e\u89e3\u50cf\u5ea6\u304cdequeue\u6a5f\u4f1a\u306e\u767a\u751f\u3059\u308b\u983b\u5ea6\u3068\u95a2\u4fc2\u3059\u308b\u3068\u3044\u3046\u8a71\u3092\u3057\u307e\u3057\u305f\u304c\u3001\u6b8b\u5ff5\u306a\u304c\u3089dequeue\u6a5f\u4f1a\u306ftimer\u306e\u89e3\u50cf\u5ea6\u3068\u5b8c\u5168\u306b\u4e00\u81f4\u3059\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002HTB\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u306b\u304a\u3051\u308b\u3001dequeue\u6a5f\u4f1a\u306f\u3053\u308c\u3060\u3051\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u30d7\u30ed\u30c8\u30b3\u30eb\u5c64\u304b\u3089packet\u3092qdisc\u306benqueue\u3059\u308b\u3053\u3068\u306b\u6210\u529f\u3057\u305f\u3068\u304d<\/li>\n<li>device driver\u304b\u3089\u306e\u30d1\u30b1\u30c3\u30c8\u9001\u4fe1\u5b8c\u4e86\u306e\u5831\u544a\uff08\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u5272\u308a\u8fbc\u307f\uff09\u304c\u767a\u751f\u3057\u305f\u3068\u304d<\/li>\n<li>HTB\u304c\u8a2d\u5b9a\u3057\u305ftimer\u306ecallback\u304c\u767a\u751f\u3057\u305f\u3068\u304d\uff08\u6ce8: \u983b\u5ea6\u306ftimer\u306e\u6700\u5c0f\u9593\u9694\u306e10ms\u306a\u3069\u3067\u3042\u308b\u3068\u306f\u9650\u3089\u306a\u3044\u3001\u3082\u3063\u3068\u304a\u304a\u304d\u306a\u9593\u9694\u306etimer\u304c\u8a2d\u5b9a\u3055\u308c\u308b\u5834\u5408\u3082\u3042\u308b\uff09<\/li>\n<li>\u305d\u306e\u4ed6\u3044\u308d\u3044\u308d<\/li>\n<\/ul>\n<p><\/p>\n<p>timer\u89e3\u50cf\u5ea6\u306fburst\u5024\u3092\u8a2d\u8a08\u3059\u308b\u4e0a\u3067\u3001\u91cd\u8981\u306a\u6307\u91dd\u3068\u306a\u308a\u307e\u3059\u304c\u5b9f\u969b\u306edequeue\u6a5f\u4f1a\u306f\u305d\u308c\u3088\u308a\u3082\u77ed\u3044\u9593\u9694\u3067\u3082\u9577\u3044\u9593\u9694\u3067\u3082\u767a\u751f\u3059\u308b\u306e\u3067\u3059\u3002<\/p>\n<p>\u305d\u306e\u305f\u3081\u3001\u5b9f\u904b\u7528\u3067\u306eburst\u5024\u306f\u304b\u306a\u3089\u305a\u5b9f\u969b\u306bbitrate\u3092\u6e2c\u5b9a\u3057\u306a\u304c\u3089\u8abf\u6574\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u79c1\u304c\u8abf\u6574\u3092\u884c\u3063\u305f\u6642\u306f\u524d\u7ae0\u3067\u306e\u7406\u8ad6\u5024\u306e4\u500d\u301c10\u500d\u7a0b\u5ea6\u3067\u5b9f\u6e2c\u5024\u304c\u5b89\u5b9a\u3057\u307e\u3057\u305f\u3002<\/p>\n<h1>\u5b9f\u904b\u7528\u3067\u306e\u6ce8\u610f\u70b9<\/h1>\n<p>\u30d1\u30b1\u30c3\u30c8\u9001\u53d7\u4fe1\u306f\u591a\u304f\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3084\u6a5f\u80fd\u304c\u95a2\u308f\u308b\u6975\u3081\u3066\u8907\u96d1\u306a\u6a5f\u69cb\u3067\u3059\u3002\u5b89\u5b9a\u3057\u305f\u904b\u7528\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306b\u306f\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u6319\u3052\u305f\u9805\u76ee\u4ee5\u5916\u306b\u3082\u95a2\u4fc2\u3059\u308b\u8a2d\u5b9a\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6d17\u3044\u51fa\u3057\u3001\u9069\u5207\u306a\u5024\u3092\u8a2d\u5b9a\u3057\u305f\u4e0a\u3067\u3001\u5ff5\u5165\u308a\u306b\u691c\u8a3c\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3088\u304f\u8abf\u6574\u3055\u308c\u308b\u5024\u3068\u3057\u3066\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li>\/proc\/sys\/net\/core<\/li>\n<li>rmem_default, rmem_max, wmem_default, wmem_max<\/li>\n<li>\/proc\/sys\/net\/ipv4<\/li>\n<li>tcp_mem, tcp_rmem, tcp_wmem<\/li>\n<\/ul>\n<p><\/p>\n<p>\u307e\u305f\u3001\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u8aa4\u3063\u305f\u8a2d\u5b9a\u3067\u3082\u4e00\u6642\u7684\u306b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u3067\u3066\u3057\u307e\u3046\u30b1\u30fc\u30b9\u304c\u3042\u308b\u3053\u3068\u306b\u3082\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p>\u4f8b\u3048\u3070HTB\u306b\u304a\u3044\u3066burst\u5024\u304c\u4f4e\u3059\u304e\u308b\u5834\u5408\u3067\u3082\u5185\u90e8qdisc\u304cPFIFO\u3067limit\u304c1000\u306a\u3069\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3068\u3001\u305d\u306e\u5206\u3060\u3051\u306fenqueue\u3092\u7d9a\u3051\u3089\u308c\u3001\u524d\u7ae0\u306edequeue\u6a5f\u4f1a\u306e\u300c\u30d7\u30ed\u30c8\u30b3\u30eb\u5c64\u304b\u3089packet\u3092qdisc\u306benqueue\u3059\u308b\u3053\u3068\u306b\u6210\u529f\u3057\u305f\u3068\u304d\u300d\u3092\u5f97\u3089\u308c\u308b\u305f\u3081\u3001PFIFO\u306elimit\u306b\u9054\u3059\u308b\u307e\u3067\u306f\u305d\u308c\u306a\u308a\u306ebitrate\u304c\u51fa\u3066\u3057\u307e\u3044\u3001\u9014\u4e2d\u304b\u3089\u5931\u901f\u3059\u308b\u3068\u3044\u3046\u4e0d\u53ef\u89e3\u306a\u6319\u52d5\u3092\u751f\u307f\u51fa\u3057\u307e\u3059\u3002\u3053\u306e\u6319\u52d5\u306f\u5185\u90e8qdisc\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u305b\u305a\u3001txqueuelen(=PFIFO limit)\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3068\u3057\u30661000\u306a\u3069\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u305f\u5834\u5408\u3082\u767a\u751f\u3057\u3001\u3088\u308a\u539f\u56e0\u306e\u7279\u5b9a\u3092\u56f0\u96e3\u306b\u3057\u307e\u3059\u3002<br \/>\n\u307e\u305f\u540c\u69d8\u306b\u5185\u90e8qdisc\u306bSFQ\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\u3082\u3001\u5de8\u5927\u306a\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u767a\u751f\u3055\u305b\u3066\u3044\u308b\u30bb\u30c3\u30b7\u30e7\u30f3\u4ee5\u5916\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3067\u306e\u30d1\u30b1\u30c3\u30c8\u9001\u4fe1\u306fenqueue\u304c\u6210\u529f\u3059\u308b\u4ed5\u7d44\u307f\u306b\u306a\u3063\u3066\u3044\u308b\u305f\u3081\u3001\u300c\u30d7\u30ed\u30c8\u30b3\u30eb\u5c64\u304b\u3089packet\u3092qdisc\u306benqueue\u3059\u308b\u3053\u3068\u306b\u6210\u529f\u3057\u305f\u3068\u304d\u300d\u306edequeue\u6a5f\u4f1a\u3092\u5f97\u3089\u308c\u3001\u4e0d\u5b89\u5b9a\u306a\u304c\u3089\u30bf\u30a4\u30de\u89e3\u50cf\u5ea6\u306b\u3088\u308b\u5236\u7d04\u306b\u3088\u308a\u51fa\u306a\u3044\u3068\u8003\u3048\u3089\u308c\u308b\u9ad8\u3044bitrate\u3068\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h1>\u7528\u8a9e\u96c6<\/h1>\n<p>device: Linux\u3067\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3068\u3057\u3066\u8a8d\u8b58\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3067\u3059\u3001eth0\u3068\u3044\u3063\u305f\u540d\u524d\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u304c\u591a\u3044Ethernet\u30dd\u30fc\u30c8\u306a\u3069\u7269\u7406\u7684\u306a\u5b9f\u614b\u304c\u3042\u308b\u3082\u306e\u3082\u3001lo(local loopback)\u306e\u3088\u3046\u306b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u7684\u306b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3082\u3042\u308a\u307e\u3059\u3002<br \/>\ndevice driver: device\u306e\u30b3\u30a2\u90e8\u5206\u3067\u3059\u3002\u9001\u4fe1\u306b\u304a\u3044\u3066\u306fqdisc\u3092\u629c\u3051\u305f\u30d1\u30b1\u30c3\u30c8\u3092\u5b9f\u969b\u306b\u9001\u4fe1\u3057\u305f\u308a\u3001\u9001\u4fe1\u304c\u5b8c\u4e86\u3057\u305f\u969b\u306b\u305d\u308c\u3092\u901a\u77e5\u3059\u308b\u5272\u308a\u8fbc\u307f\u3092\u767a\u751f\u3055\u305b\u305f\u308a\u3057\u307e\u3059\u3002<\/p>\n<h1>\u305d\u306e\u4ed6<\/h1>\n<p>\u672c\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306ftc\u306e\u8a2d\u5b9a\u306biproute2\u306etc\u30b3\u30de\u30f3\u30c9\u3092\u7528\u3044\u3066\u307e\u3059\u304ctcng(Traffic Control Next Generation)\u3068\u3044\u3046\u30c4\u30fc\u30eb\u304c\u5b58\u5728\u3057\u3001\u3088\u308a\u4eba\u9593\u7684\u306a\u6587\u6cd5\u3067tc\u306e\u8a2d\u5b9a\u3092\u884c\u3048\u308b\u3088\u3046\u3067\u3059\u3002<br \/>\n\u79c1\u306f\u8a66\u3057\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u3053\u308c\u304b\u3089tc\u3092\u5c0e\u5165\u3059\u308b\u65b9\u306f\u3053\u3061\u3089\u306e\u5229\u7528\u3092\u691c\u8a0e\u3057\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002<\/p>\n<h1>\u307e\u3068\u3081<\/h1>\n<p>\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306fHTB\u3092\u4e2d\u5fc3\u306bPFIFO, PFIFO_FAST, SFQ\u306a\u3069\u5e2f\u57df\u5236\u9650\u30fb\u5e2f\u57df\u4fdd\u8a3c\u306e\u8a2d\u5b9a\u306b\u95a2\u4fc2\u3059\u308b\u3053\u3068\u306e\u3042\u308btc\u306eqdisc\u3084\u305d\u306e\u8a2d\u5b9a\u9805\u76ee\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3057\u305f\u3002\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u5225\u306b\u8a18\u8f09\u3057\u305f\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u3042\u308f\u305b\u308b\u3053\u3068\u3067\u5b89\u5b9a\u3057\u305ftc\u904b\u7528\u306e\u4e00\u52a9\u3068\u306a\u308c\u3070\u5e78\u3044\u3067\u3059\u3002<\/p>\n<h1>\u53c2\u8003\u6587\u732e<\/h1>\n<p><a href=\"https:\/\/github.com\/torvalds\/linux\">https:\/\/github.com\/torvalds\/linux<\/a><br \/>\n\u3082\u3063\u3068\u3082\u53c2\u8003\u306b\u306a\u308a\u3068\u3066\u3082\u6b63\u3057\u3044\u3067\u3059\u3002qdisc\u306e\u5b9f\u88c5\u306fnet\/sched\u3042\u305f\u308a\u306b\u7f6e\u304b\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/tldp.org\/HOWTO\/Traffic-Control-HOWTO\/index.html\">Traffic Control HOWTO<\/a><br \/>\n\u6bd4\u8f03\u7684\u65b0\u3057\u304f\u8aad\u307f\u3084\u3059\u3044\u3067\u3059\u3002(2006\u5e74)<\/p>\n<p><a href=\"http:\/\/lartc.org\/howto\/index.html\">Linux Advanced Routing &amp; Traffic Control HOWTO<\/a><br \/>\n\u53e4\u3044\u304c\u4e00\u90e8\u3053\u3061\u3089\u306b\u3057\u304b\u4e57\u3063\u3066\u3044\u306a\u3044\u60c5\u5831\u3082\u5b58\u5728\u3057\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/linuxjf.sourceforge.jp\/JFdocs\/Adv-Routing-HOWTO\/index.html\">Linux Advanced Routing &amp; Traffic Control HOWTO<\/a><br \/>\n\u4e0a\u8a18\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u65e5\u672c\u8a9e\u8a33<\/p>\n<p><a href=\"http:\/\/web.opalsoft.net\/qos\/default.php?p=linux101-ds\">Differentiated Service on Linux HOWTO<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u77e2\u53e3\u3067\u3059\u3002 \u307f\u306a\u3055\u3093\u306fLinux\u306etc\u3068\u3044\u3046\u6a5f\u80fd\u3092\u3054\u5b58\u77e5\u3067\u3057\u3087\u3046\u304b\u3002\u9001\u4fe1\u3059\u308b\u30d1\u30b1\u30c3\u30c8\u306e\u5e2f\u57df\u5236\u5fa1\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u5927\u5909\u5f37\u529b\u306a\u6a5f\u80fd\u3067\u3001\u30b0\u30ea\u30fc\u3067\u3082\u3044\u304f\u3064\u304b\u306e\u7528\u9014\u3067\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u5177\u4f53\u7684\u306a\u4e8b\u4f8b\u306e\u4e00\u3064\u306fRedis\u3067\u3059\u3002Redi [&hellip;]<\/p>\n","protected":false},"author":128,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[9],"tags":[74,171,71,75,72,73,76,78,77],"class_list":["post-11266","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-info","tag-htb","tag-info","tag-linux","tag-qdisc","tag-qos","tag-sfq","tag-tc","tag-78","tag-77"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/posts\/11266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/users\/128"}],"replies":[{"embeddable":true,"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/comments?post=11266"}],"version-history":[{"count":3,"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/posts\/11266\/revisions"}],"predecessor-version":[{"id":11351,"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/posts\/11266\/revisions\/11351"}],"wp:attachment":[{"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/media?parent=11266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/categories?post=11266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/labs.gree.jp\/blog\/wp-json\/wp\/v2\/tags?post=11266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}