প্রচুর সংযোগ এবং ছোট প্যাকেটের উচ্চ ট্র্যাফিক সহ একটি গিগাবিট নেটওয়ার্কের উপর টিসিপির কার্যকারিতা উন্নতি করা


37

আমি একটি "প্রচুর সংযোগ এবং ছোট প্যাকেটের উচ্চ ট্র্যাফিক সহ গিগাবিট নেটওয়ার্ক" এর মাধ্যমে আমার টিসিপি মাধ্যমে উন্নত করার চেষ্টা করছি। আমার সার্ভার ওএস হ'ল উবুন্টু ১১.১০ সার্ভার bit৪ বিট।

টিসিপি সকেট (সমস্ত একই পোর্টে) এর মাধ্যমে আমার সার্ভারের সাথে প্রায় 50.000 (এবং বর্ধমান) ক্লায়েন্ট সংযুক্ত রয়েছে।

আমার প্যাকেটের 95% এর আকার 1-150 বাইট (টিসিপি শিরোনাম এবং পে-লোড) রয়েছে। বাকি 5% 150 থেকে 4096+ বাইট পর্যন্ত পরিবর্তিত হয়।

আমার সার্ভারের নীচের কনফিগারেশনে 30 এমবিপিএস (পুরো দ্বৈত) পর্যন্ত ট্র্যাফিক পরিচালনা করতে পারবেন।

আমার দয়া করে ওএস টিউন করার জন্য আপনি কি সেরা অনুশীলনের পরামর্শ দিতে পারেন?

আমার /etc/sysctl.congচেহারাটি এরকম:

kernel.pid_max = 1000000
net.ipv4.ip_local_port_range = 2500 65000
fs.file-max = 1000000
#
net.core.netdev_max_backlog=3000
net.ipv4.tcp_sack=0
#
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.somaxconn = 2048
#
net.ipv4.tcp_rmem = 4096 87380 16777216 
net.ipv4.tcp_wmem = 4096 65536 16777216
#
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_mem = 50576   64768   98152
#
net.core.wmem_default = 65536
net.core.rmem_default = 65536
net.ipv4.tcp_window_scaling=1
#
net.ipv4.tcp_mem= 98304 131072 196608
#
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_rfc1337 = 1
net.ipv4.ip_forward = 0
net.ipv4.tcp_congestion_control=cubic
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
#
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192

এখানে আমার সীমা:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 193045
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1000000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1000000

[অতিরিক্তটাও]

আমার এনআইসিগুলি নিম্নলিখিত:

$ dmesg | grep Broad
[    2.473081] Broadcom NetXtreme II 5771x 10Gigabit Ethernet Driver bnx2x 1.62.12-0 (2011/03/20)
[    2.477808] bnx2x 0000:02:00.0: eth0: Broadcom NetXtreme II BCM57711E XGb (A0) PCI-E x4 5GHz (Gen2) found at mem fb000000, IRQ 28, node addr d8:d3:85:bd:23:08
[    2.482556] bnx2x 0000:02:00.1: eth1: Broadcom NetXtreme II BCM57711E XGb (A0) PCI-E x4 5GHz (Gen2) found at mem fa000000, IRQ 40, node addr d8:d3:85:bd:23:0c

[যোগ 2]

ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: on
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: off

[যোগ 3]

 sudo ethtool -S eth0|grep -vw 0
 NIC statistics:
      [1]: rx_bytes: 17521104292
      [1]: rx_ucast_packets: 118326392
      [1]: tx_bytes: 35351475694
      [1]: tx_ucast_packets: 191723897
      [2]: rx_bytes: 16569945203
      [2]: rx_ucast_packets: 114055437
      [2]: tx_bytes: 36748975961
      [2]: tx_ucast_packets: 194800859
      [3]: rx_bytes: 16222309010
      [3]: rx_ucast_packets: 109397802
      [3]: tx_bytes: 36034786682
      [3]: tx_ucast_packets: 198238209
      [4]: rx_bytes: 14884911384
      [4]: rx_ucast_packets: 104081414
      [4]: rx_discards: 5828
      [4]: rx_csum_offload_errors: 1
      [4]: tx_bytes: 35663361789
      [4]: tx_ucast_packets: 194024824
      [5]: rx_bytes: 16465075461
      [5]: rx_ucast_packets: 110637200
      [5]: tx_bytes: 43720432434
      [5]: tx_ucast_packets: 202041894
      [6]: rx_bytes: 16788706505
      [6]: rx_ucast_packets: 113123182
      [6]: tx_bytes: 38443961940
      [6]: tx_ucast_packets: 202415075
      [7]: rx_bytes: 16287423304
      [7]: rx_ucast_packets: 110369475
      [7]: rx_csum_offload_errors: 1
      [7]: tx_bytes: 35104168638
      [7]: tx_ucast_packets: 184905201
      [8]: rx_bytes: 12689721791
      [8]: rx_ucast_packets: 87616037
      [8]: rx_discards: 2638
      [8]: tx_bytes: 36133395431
      [8]: tx_ucast_packets: 196547264
      [9]: rx_bytes: 15007548011
      [9]: rx_ucast_packets: 98183525
      [9]: rx_csum_offload_errors: 1
      [9]: tx_bytes: 34871314517
      [9]: tx_ucast_packets: 188532637
      [9]: tx_mcast_packets: 12
      [10]: rx_bytes: 12112044826
      [10]: rx_ucast_packets: 84335465
      [10]: rx_discards: 2494
      [10]: tx_bytes: 36562151913
      [10]: tx_ucast_packets: 195658548
      [11]: rx_bytes: 12873153712
      [11]: rx_ucast_packets: 89305791
      [11]: rx_discards: 2990
      [11]: tx_bytes: 36348541675
      [11]: tx_ucast_packets: 194155226
      [12]: rx_bytes: 12768100958
      [12]: rx_ucast_packets: 89350917
      [12]: rx_discards: 2667
      [12]: tx_bytes: 35730240389
      [12]: tx_ucast_packets: 192254480
      [13]: rx_bytes: 14533227468
      [13]: rx_ucast_packets: 98139795
      [13]: tx_bytes: 35954232494
      [13]: tx_ucast_packets: 194573612
      [13]: tx_bcast_packets: 2
      [14]: rx_bytes: 13258647069
      [14]: rx_ucast_packets: 92856762
      [14]: rx_discards: 3509
      [14]: rx_csum_offload_errors: 1
      [14]: tx_bytes: 35663586641
      [14]: tx_ucast_packets: 189661305
      rx_bytes: 226125043936
      rx_ucast_packets: 1536428109
      rx_bcast_packets: 351
      rx_discards: 20126
      rx_filtered_packets: 8694
      rx_csum_offload_errors: 11
      tx_bytes: 548442367057
      tx_ucast_packets: 2915571846
      tx_mcast_packets: 12
      tx_bcast_packets: 2
      tx_64_byte_packets: 35417154
      tx_65_to_127_byte_packets: 2006984660
      tx_128_to_255_byte_packets: 373733514
      tx_256_to_511_byte_packets: 378121090
      tx_512_to_1023_byte_packets: 77643490
      tx_1024_to_1522_byte_packets: 43669214
      tx_pause_frames: 228

SACK সম্পর্কে কিছু তথ্য: টিসিপি SACK কখন বন্ধ করবেন?


1
এটি সহায়তা করতে পারে: datatag.web.cern.ch/datatag/howto/tcp.html
yrk

সীমাবদ্ধকরণের কারণ কী? আপনার সিপিইউ কি সর্বোচ্চ আউট? যদি তা হয় তবে আপনি ভুল গাছটি ছাঁটাই করছেন। আপনার সিপিইউ কী করছে তা দেখতে হবে।
ডেভিড শোয়ার্জ

আপনার কী এনআইসি আছে?
SaveTheRbtz

1
বিটিডাব্লু: আপনি কেন স্যাক বন্ধ করেন?
নীল

1
আপনার ব্রডকম এনআইসি ব্যবহার করে পুনর্বিবেচনা করা উচিত ...
হুবার্ট কারিও

উত্তর:


21

সমস্যাটি হ'ল আপনি নিজের নেটওয়ার্ক কার্ডে খুব বেশি বাধা পেয়ে যাচ্ছেন। ব্যান্ডউইথ যদি সমস্যা না হয় তবে ফ্রিকোয়েন্সি হ'ল সমস্যা:

  • নেটওয়ার্ক কার্ডে প্রেরণ / গ্রহণ বাফারগুলি চালু করুন

    ethtool -g eth0
    

আপনাকে বর্তমান সেটিংস প্রদর্শন করবে (256 বা 512 এন্ট্রি)। আপনি সম্ভবত এগুলিকে 1024, 2048 বা 3172 এ উন্নীত করতে পারেন More এটি কেবল একটি রিং বাফার যা সার্ভারটি যদি ইনকামিং প্যাকেটগুলি দ্রুত পর্যাপ্তভাবে প্রক্রিয়া করতে সক্ষম না হয় তবে কেবল তা পূরণ করে।

যদি বাফারটি পূরণ করা শুরু করে, রাউটারকে বলতে বা প্রবাহকে ধীর করে দেওয়ার জন্য ফ্লো কন্ট্রোল হ'ল অতিরিক্ত উপায়:

  • সার্ভারে / আউটবাউন্ডে প্রবাহ নিয়ন্ত্রণ চালু করুন এবং এটি সংযুক্ত থাকা স্যুইচ / রাউটার-পোর্টগুলি।

    ethtool -a eth0
    

সম্ভবত প্রদর্শিত হবে:

Pause parameters for eth0:
Autonegotiate:  on
RX:             on
TX:             on

ETH0 এর বর্তমান সেটিংয়ের জন্য / var / লগ / বার্তাগুলি পরীক্ষা করুন। এর মতো কিছু পরীক্ষা করুন:

এথ0: লিঙ্কটি 1000 এমবিপিএস, পূর্ণ দ্বৈত, প্রবাহ নিয়ন্ত্রণ tx এবং rx এ রয়েছে

আপনি যদি টিএক্স এবং আরএক্স না দেখেন তবে আপনার নেটওয়ার্ক প্রশাসকদের স্যুইচ / রাউটারের মানগুলি সামঞ্জস্য করতে হবে। সিসকোতে যা প্রবাহ নিয়ন্ত্রণ প্রেরণ / প্রেরণ করা হয়।

সাবধানতা: এই মানগুলি পরিবর্তন করা আপনার লিঙ্কটিকে খুব অল্প সময়ের জন্য নীচে এবং উপরে আনবে (1s এরও কম)।

  • যদি এই সমস্ত কিছু সাহায্য না করে - আপনি নেটওয়ার্ক কার্ডের গতি 100 এমবিটকেও কমিয়ে আনতে পারেন (স্যুইচ / রাউটার-পোর্টগুলিতে একই করুন)

    ethtool -s eth0 autoneg off && ethtool -s eth0 speed 100
    

তবে আপনার ক্ষেত্রে আমি বলব - এনআইসির রিং বাফারে রিসিভ বাফারগুলি বাড়িয়ে দিন।


আপনার নম্বরগুলি থেকে ethtoolআমি বলব - আরএক্স ছাড়গুলি এড়াতে নেটওয়ার্ক কার্ডের প্রাপ্ত বাফারগুলি সর্বাধিকতে সেট করুন। আমি আশা করি আপনার ব্রডকমের এগুলি যথেষ্ট রয়েছে।
নীল

1
টিসিপি দিয়ে বাফারিং বাড়ানো প্রায়শই ভাল ধারণা নয়। আমাদের ইতিমধ্যে প্রচুর পরিমাণে বাফারিং রয়েছে: বাফার্লোএট.এন.
প্রকল্পগুলি

3
এই বাফারটি সরাসরি এনআইসিতে একটি হার্ডওয়্যার বাফার। আমি আরও বিশদ সহ আমার উত্তর আপডেট করব। যেহেতু আপনি আগত প্যাকেটগুলি হারাচ্ছেন আপনার সেই বাফারটি দরকার। আমার একটি অনুরূপ সার্ভার রয়েছে যেখানে এই বাফারগুলি বাড়ানোর জন্য আমাকে আলাদা এনআইসি (অনবোর্ড ব্রডকম থেকে পিসিআই ইন্টেল) এ যেতে হয়েছিল। এরপরে আর আর কখনও হারিয়ে যাওয়া আরএক্স-প্যাকেটের মুখোমুখি হই নি।
নীল

@ ম্লেটার: এটি স্তর ২ এর একটি রিং-বাফার my আমার আপডেট হওয়া উত্তরটি দেখুন।
নীল

1
সবশেষে আমাদের 1 জিবি রয়েছে। বিভিন্ন জায়গায় প্রচুর টিউনিং ছিল, তাই সত্যই এটি বলতে পারি না যে এখানে একক সমস্যা ছিল।
কর্মী

5

নিম্নলিখিতটি চূড়ান্ত উত্তর নাও হতে পারে তবে এটি অবশ্যই কিছু ধারণা রাখবে

এগুলি sysctl.conf এ যুক্ত করার চেষ্টা করুন

##  tcp selective acknowledgements. 
net.ipv4.tcp_sack = 1
##enable window scaling
net.ipv4.tcp_window_scaling = 1
##
net.ipv4.tcp_no_metrics_save = 1

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

পরিক্ষা কর

ethtool -k ethX

অফলোডিং সক্ষম আছে কিনা তা দেখতে। টিসিপি চেকসাম অফলোড এবং বৃহত সেগমেন্ট অফলোডকে আজকের বেশিরভাগ ইথারনেট এনআইসি সমর্থন করে এবং স্পষ্টতই ব্রডকম এটি সমর্থন করে।

সরঞ্জাম ব্যবহার করার চেষ্টা করুন

powertop

যখন নেটওয়ার্ক অলস থাকে এবং যখন নেটওয়ার্ক স্যাচুরেশন পৌঁছে যায়। এটি অবশ্যই এনআইসির বাধা দোষী কিনা তা দেখাবে। ডিভাইস ভোটদান এমন পরিস্থিতিতে একটি উত্তর answer ফ্রিবিএসডি সরাসরি আইফোনফিগের ভিতরে পোলিং সুইচ সমর্থন করে তবে লিনাক্সের এমন কোনও বিকল্প নেই। পরামর্শ এই পোলিং সক্রিয়। এটি বলছে যে ব্রডকম পোলিংকে সমর্থন করে যা আপনার জন্য সুসংবাদ।

আপনি আপনার ট্র্যাফিক বেশিরভাগ ছোট প্যাকেটের সমন্বয়ে উল্লেখ করেছেন বলে জাম্বো প্যাকেট টুইটটি আপনার জন্য এটি কেটে নাও যেতে পারে। তবে আরে যাইহোক, চেষ্টা করে দেখুন!


2kaji, আমি আগামীকাল আপনার পরামর্শ চেষ্টা করব। পাওয়ারটপ সম্পর্কে - আমার লক্ষ্যটি যদি পারফরম্যান্স হয় তবে আমার কি পাওয়ার সাশ্রয়ের সুর করা উচিত?
কর্মী

হ্যাঁ অবশ্যই এটি সাহায্য করতে পারে। আমি পাওয়ারপটকে কেবল বাধা বিপত্তি কিনা তা নিশ্চিত করার জন্য উল্লেখ করেছি। বাধা ফ্রিকোয়েন্সি অন্যান্য সরঞ্জাম থেকেও কাটা যেতে পারে
কাজী

আমি উচ্চ "পুনঃনির্ধারিত বিঘ্ন" দেখছি - এটির কোনও কারণ হতে পারে? "পুনরায় নির্ধারিত বাধা" কী?
কর্মী

এটি অনুসরণ করার চেষ্টা করুন ---> help.ubuntu.com
কাজি

হ্যাঁ .. আমি টিউটোরিয়ালটি দেখেছি, তবে এটি ল্যাপটপের জন্য যখন আমি সার্ভারে উচ্চ বাধা দেখি। এটি সার্ভারে প্রয়োগ করার চেষ্টা করবে।
কর্মী

2

আপনাকে সমস্ত সিপিইউ কোরে লোড বিতরণ করতে হবে। 'ইরকবালেন্স' শুরু করুন।


1
যদি কোনও একক আইআরকিউর খুব উচ্চ ফ্রিকোয়েন্সি থাকে এটি সাহায্য করবে না। আইআরকিউ ব্যালেন্স লজিকাল প্রসেসরের স্যুটিংয়ে একক আইআরকিউ বিতরণ করার চেষ্টা করে - তবে কোনও একক আইআরকিউ পরিবেশনকারী একাধিক প্রসেসর আর কখনও হবে না।
নীল

2

আমি টুইটগুলির তালিকায় লক্ষ্য করেছি যে টাইমস্ট্যাম্পগুলি বন্ধ রয়েছে, দয়া করে এটি করবেন না। ব্যান্ডউইথ সত্যিই ব্যয়বহুল ছিল এবং লোকেরা কয়েক বাইট / প্যাকেট সংরক্ষণ করতে চেয়েছিল যখন ইহা কয়েক বছরের পুরানো থ্রোব্যাক। উদাহরণস্বরূপ, এই দিনগুলিতে টিসিপি স্ট্যাক দ্বারা এটি ব্যবহৃত হয় যে "CLOSE_WAIT" -র কোনও সকেটের জন্য কোনও প্যাকেট সংযোগের জন্য কোনও পুরানো প্যাকেট কিনা বা এটি যদি কোনও নতুন সংযোগের জন্য একটি নতুন প্যাকেট হয় এবং আরটিটি গণনায় সহায়তা করে। আর টাইমস্ট্যাম্পের জন্য কয়েকটি বাইট সংরক্ষণ করা আইপিভি 6 অ্যাড্রেসগুলি কী যুক্ত করতে চলেছে তার তুলনায় কিছুই নয়। টাইমস্ট্যাম্পগুলি বন্ধ করা ভালর চেয়ে বেশি ক্ষতি করে।

টাইমস্ট্যাম্পগুলি বন্ধ করার জন্য এই সুপারিশটি কেবল একটি থ্রোব্যাক যা সিসাদমিনের একটি প্রজন্ম থেকে পরবর্তী প্রজন্মের কাছে পাস করে চলে। একটি "শহুরে কিংবদন্তি" সাজানোর জিনিস।


2

আমি এটি প্রস্তাব:

kernel.sem = 350 358400 64 1024
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 4194304
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_adv_win_scale = 2
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_rmem = 4096 262144 4194304
net.ipv4.tcp_wmem = 4096 262144 4194304
net.ipv4.tcp_keepalive_time = 900
net.ipv4.tcp_keepalive_intvl = 900
net.ipv4.tcp_keepalive_probes = 9

আরএইচইএল এবং ব্যাকআপ সফ্টওয়্যারটিতে ওরাকল ডিবি সার্ভারে পরীক্ষিত।


5
এই সংখ্যাগুলি কনফিগারযোগ্য কারণ কোনও আকার-ফিট-সবই নেই। তার মানে সংখ্যাগুলি নিজেরাই মূল্যবান নয়। কোন সংখ্যাটি ব্যবহার করবেন তা সিদ্ধান্ত নেওয়ার জন্য আপনি যে পদ্ধতিটি ব্যবহার করেছেন সেটি হ'ল মূল্যবান হতে পারে।
ক্যাস্পার্ড

2

আমার ক্ষেত্রে কেবল একটি একক সুর:

net.ipv4.tcp_timestamps = 0

সাইট লোডিংয়ের সময়টি 50% হ্রাস করে একটি খুব বড় এবং দরকারী পরিবর্তন করেছে।


কিছু হওয়ার জন্য আপনার সেটআপটিতে অবশ্যই মারাত্মকভাবে কিছু ভেঙে যেতে হবে। টাইমস্ট্যাম্পগুলি সাধারণ পরিস্থিতিতে ব্যান্ডউইথের 1% এরও কম ব্যবহার করে এবং অন্যথায় তুলনায় টিসিপিকে আরও দৃ tight়ভাবে পুনঃনির্দেশের অনুমতি দেবে।
ক্যাস্পার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.