টিসি কিডিস্ক এবং আইপিআরপি বোঝা


15

আমি ব্যান্ডউইথকে সীমাবদ্ধ করার চেষ্টা করছি tcএবং এর সাথে ফলাফলগুলি চেক করব iperf। আমি এই মত শুরু:

# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.7 port 35213 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   830 MBytes   696 Mbits/sec

দুটি উদাহরণ ইথারনেটের মাধ্যমে সরাসরি সংযুক্ত।

আমি htb qdiscব্যান্ডউইথকে 1 এমবিট / সেকেন্ডে সীমাবদ্ধ করতে একটি ডিফল্ট ক্লাস সহ একটি সেট আপ করেছি :

# tc qdisc add dev bond0 root handle 1: htb default 12
# tc class add dev bond0 parent 1: classid 1:12 htb rate 1mbit

তবে আমি যা প্রত্যাশা করি তা পাই না:

# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.7 port 35217 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-12.8 sec   768 KBytes   491 Kbits/sec

আমি যদি হার দ্বিগুণ করি তবে পরিমাপ করা ব্যান্ডউইথ পরিবর্তন হয় না। আমি কী মিস করছি? কেন পরিমাপ করা ব্যান্ডউইদথটি 1 মিম্বরের সাথে মিল করে নাrate প্যারামিটার ? ব্যান্ডউইথকে একটি নির্দিষ্ট প্রদত্ত হারের মধ্যে সীমাবদ্ধ করতে আমার কী পরামিতিগুলি সেট করতে হবে?

তবে manপৃষ্ঠাটি বলছে যে এই কাজের জন্য পছন্দ tbfহওয়া উচিত qdisc:

টোকেন বালতি ফিল্টারটি নির্দিষ্টভাবে কনফিগার করা হারে ট্র্যাফিক কমিয়ে দেওয়ার জন্য উপযুক্ত। বড় ব্যান্ডউইথগুলিতে ভাল স্কেল।

tbfপ্যারামিটারগুলির প্রয়োজন rate, burstএবং ( limit| latency)। সুতরাং উপলব্ধ ব্যান্ডউইথকে কীভাবে burstএবং ( limit| latency) প্রভাবিত করে তা না বুঝে আমি নিম্নলিখিতগুলি চেষ্টা করেছিলাম :

# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k

এটি আমাকে 113 কিবিট / সেকেন্ডের একটি পরিমাপযোগ্য ব্যান্ডউইথ পেয়েছে। এই পরামিতিগুলির সাথে ঘুরে বেড়ানো যতক্ষণ না আমি লক্ষ্য করেছি যে mtuপরিবর্তিত জিনিসের জন্য একটি মান যুক্ত করে দেওয়া হয়েছে ততটা পরিবর্তন হয়নি :

# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k mtu 5000

1.00 এমবিটস / সেকেন্ডের একটি পরিমাপ ব্যান্ডউইথের ফলে

ব্যান্ডউইথকে একটি নির্দিষ্ট প্রদত্ত হারের মধ্যে সীমাবদ্ধ করতে আমার কী পরামিতিগুলি সেট করতে হবে?

আমি কি এর জন্য htbবা tbfসারিবদ্ধ অনুশাসনটি ব্যবহার করব ?

সম্পাদনা :

এই সংস্থানগুলির উপর ভিত্তি করে, আমি কিছু পরীক্ষা করেছি:

আমি নিম্নলিখিত সেটআপ চেষ্টা করেছি।

একটি শারীরিক মেশিনে

/etc/network/interfaces:

auto lo
iface lo inet loopback

auto br0
iface br0 inet dhcp
bridge_ports eth0

এর সাথে পরিমাপ iperf:

# tc qdisc add dev eth0 root handle 1: htb default 12
# tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.4 port 51804 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-11.9 sec  1.62 MBytes  1.14 Mbits/sec

যেখানে iperfসার্ভারটি আলাদা ব্যান্ডউইথের গণনা করেছে:

[  4] local 192.168.2.1 port 5001 connected with 192.168.2.4 port 51804
[  4]  0.0-13.7 sec  1.62 MBytes   993 Kbits/sec

বন্ডিং ছাড়াই ভার্চুয়াল মেশিনে

/etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

এর সাথে পরিমাপ iperf:

# tc qdisc add dev eth0 root handle 1: htb default 12
# tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.7 port 34347 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-11.3 sec  1.62 MBytes  1.21 Mbits/sec

যেখানে iperfসার্ভারটি আলাদা ব্যান্ডউইথের গণনা করেছে:

[  4] local 192.168.2.1 port 5001 connected with 192.168.2.7 port 34347
[  4]  0.0-14.0 sec  1.62 MBytes   972 Kbits/sec

বন্ডিং সহ ভার্চুয়াল মেশিনে (eth0 এ টিসি কনফিগার করা হয়েছে)

/etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
allow-bond0 eth0
iface eth0 inet manual
    bond-master bond0
    bond-primary eth0 eth1

auto eth1
allow-bond0 eth1
iface eth1 inet manual
    bond-master bond0
    bond-primary eth0 eth1

auto bond0
iface bond0 inet dhcp
    bond-slaves none
    bond-mode 1
#    bond-arp-interval 250
#    bond-arp-ip-target 192.168.2.1
#    bond-arp-validate 3

এর সাথে পরিমাপ iperf:

# tc qdisc add dev eth0 root handle 1: htb default 12
# tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.9 port 49054 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-11.9 sec  1.62 MBytes  1.14 Mbits/sec

যেখানে iperfসার্ভারটি আলাদা ব্যান্ডউইথের গণনা করেছে:

[  4] local 192.168.2.1 port 5001 connected with 192.168.2.9 port 49054
[  4]  0.0-14.0 sec  1.62 MBytes   972 Kbits/sec

বন্ডিং সহ ভার্চুয়াল মেশিনে (বন্ধনীতে টিসি কনফিগার করা আছে)

/etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
allow-bond0 eth0
iface eth0 inet manual
    bond-master bond0
    bond-primary eth0 eth1

auto eth1
allow-bond0 eth1
iface eth1 inet manual
    bond-master bond0
    bond-primary eth0 eth1

auto bond0
iface bond0 inet dhcp
    bond-slaves none
    bond-mode 1
#    bond-arp-interval 250
#    bond-arp-ip-target 192.168.2.1
#    bond-arp-validate 3

এর সাথে পরিমাপ iperf:

# tc qdisc add dev bond0 root handle 1: htb default 12
# tc class add dev bond0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.9 port 49055 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-13.3 sec   768 KBytes   475 Kbits/sec

যেখানে iperfসার্ভারটি আলাদা ব্যান্ডউইথের গণনা করেছে:

[  4] local 192.168.2.1 port 5001 connected with 192.168.2.9 port 49055
[  4]  0.0-14.1 sec   768 KBytes   446 Kbits/sec

আমি eth1বন্ড থেকে (প্যাসিভ ইন্টারফেস) অপসারণ করলে ফলাফল পরিবর্তন হয় না ।

উপসংহার

বন্ড ইন্টারফেসে ট্র্যাফিক নিয়ন্ত্রণ কাজ করে না, বা কমপক্ষে প্রত্যাশার মতো হয় না। আমাকে আরও তদন্ত করতে হবে।

কর্মক্ষেত্র হিসাবে কেউ বন্ডের সাথে সম্পর্কিত ইন্টারফেসগুলিতে সারি শৃঙ্খলা যুক্ত করতে পারে ।


আশ্চর্যজনকভাবে যথেষ্ট, এটি এই লোকটির পক্ষে কাজ করেছে বলে মনে হচ্ছে: blog.tinola.com/?e=22
ই। ফার্নান্দেজ

1
আমার মনে হয় এইচটিবি দিয়ে tc filterআপনার প্যাকেটগুলি ক্লাসে লাগাতে হবে। আপনার এইচটিবি প্যারামিটারগুলিরও কিছু পরিবর্তন করতে হবে (এটি টিবিএফের মতো টিউন করুন)। আমি সন্ধানের পরামর্শ দিচ্ছি tcng, এটি টিসি-র একটি প্রান্ত-প্রান্ত। (এগুলি দ্রুত পয়েন্টার ...)
ডারোবার্ট

আমি আপনার পোস্টে কোনও ফিল্টার দেখিনি। আপনি ট্র্যাফিকের সাথে মেলে কী কী আদেশ ব্যবহার করছেন যাতে এটি হার সীমাবদ্ধ হতে পারে?

উত্তর:


2

আপনি যখন টিসি কীভাবে কাজ করেন সে সম্পর্কে আপনি অনিশ্চিত থাকেন আপনি তখনও টিসি পর্যবেক্ষণ করতে পারেন এবং প্যাকেটগুলি কীভাবে প্রবাহিত হবে তা দেখতে পারেন? আপনি আমার স্ক্রিপ্টটি টিসি মনিটরিং করতে ব্যবহার করতে পারেন এবং উত্তোলিত সুবিধাসহ এটি টার্মিনালে চালানো দরকার to আপনি wlan0 কে অন্য ইন্টারফেসে পরিবর্তন করতে পারেন এবং আপনার গ্রেপ এবং অ্যাডক প্রয়োজন:

      #!/bin/sh
      INTERVAL=15
      while sleep $INTERVAL
      do
             /usr/sbin/tc -s -d class show dev wlan0

             uptime
             more /proc/meminfo | grep MemFree | grep -v grep
             echo cache-name num-active-objs total-objs obj-size
             SKBUFF=`more /proc/slabinfo | grep skbuff | grep -v grep | awk 
             '{print $2} {print $3} {print $4}'`

             echo skbuff_head_cache: $SKBUFF
      done

0

burst/ limitমানগুলি বাড়ানোর চেষ্টা করুন । টোকেন বালতি আলগোরিদিম ভাল স্কেল, কিন্তু একটি সীমিত সঠিকতা / গতি অনুপাত আছে।

টোকেনের আকার বাড়িয়ে একটি ছোট বালতি, গতি ব্যবহার করে নির্ভুলতা অর্জন করা যায়। বড় টোকেন মানে যে হারে সেগুলি পুনরায় পূরণ করা হয় তা হ্রাস পেয়েছে (টোকেন প্রতি সেকেন্ড = প্রতি সেকেন্ডে বাইট / প্রতি টোকেন বাইট)।

rateপরামিতি দেয় গড় হার যে ছাড়িয়ে করা হবে না, burstবা limitপরামিতি গড় উইন্ডোর আকার দিতে। লাইন গতিতে প্যাকেটটি প্রেরণ করার সময় প্যাকেট স্থানান্তরিত হওয়ার সময়ের জন্য সেট হারের চেয়ে বেশি হয়ে যায়, গড় উইন্ডোটি কমপক্ষে এত বড় হওয়া দরকার যে একটি প্যাকেট প্রেরণ পুরো উইন্ডোটিকে সীমা ছাড়িয়ে যায় না; যদি আরও প্যাকেটগুলি উইন্ডোতে ফিট হয়, তবে অ্যালগরিদমের লক্ষ্যটি হিট করার জন্য আরও ভাল সম্ভাবনা থাকবে।


0

বন্ডিং ইন্টারফেসে সারি শৃঙ্খলা যুক্ত করার আগে এটি চালান (এই ক্ষেত্রে বন্ড0)

ipconfig bond0 txqueuelen 1000

এটি কাজ করে না কারণ বন্ধন ইন্টারফেসের মতো সফ্টওয়্যার ভার্চুয়াল ডিভাইসের কোনও ডিফল্ট সারি নেই।


0

থেকে bond ডিভাইসগুলিতে নির্ধারিত সারি নেই, সেটিংস সেট করেqdisc আকার আমার জন্য সমস্যাটি সুস্পষ্টভাবে সমাধান করে।

কাঠামোর qdiscঅধীনে পাতাগুলি ব্যবহার করার জন্য এখানে একটি উদাহরণ রয়েছে HTB: tc qdisc add dev $dev parent $parent handle $handle pfifo limit 1000

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.