নেটওয়ার্ক ইন্টারফেস কেন প্যাকেট বাদ দিচ্ছে তার কারণ (গুলি) কীভাবে খুঁজে পাবেন?


18

প্যাকেট বাদ দেওয়া বিভিন্ন কারণে লিনাক্সের কোনও পরিসংখ্যান পাওয়ার উপায় আছে কি?

বেশ কয়েকটি সার্ভারে সমস্ত নেটওয়ার্ক ইন্টারফেসে (ওপেনসুএসই 12.3), ifconfigএবং netstat -iসংবর্ধনায় ড্রপ প্যাকেটগুলির প্রতিবেদন করছে। যখন আমি একটি করি tcpdump, ফেলে দেওয়া প্যাকেটের সংখ্যা বৃদ্ধি বন্ধ করে দেয় যার অর্থ ইন্টারফেসের সারি পূর্ণ নয় এবং ডেটা ফেলে দেওয়া drop সুতরাং এটি হওয়ার অন্যান্য কারণগুলি অবশ্যই থাকতে হবে (উদাহরণস্বরূপ মাল্টিকাস্ট পিকেটস প্রাপ্ত হয়েছে যদিও ইন্টারফেসটি এই মাল্টিকাস্ট গ্রুপের অংশ নয়)।

আমি কোথায় এই জাতীয় তথ্য পেতে পারি? (/ প্রোক? / সিস? কিছু লগ?)

পরিসংখ্যানগুলির উদাহরণ (/ সিস / শ্রেণি / নেট / <দেব>> / পরিসংখ্যান এবং ইথোল আউটপুট একীভূত):

alloc_rx_buff_failed: 0
collisions: 0
dropped_smbus: 0
multicast: 1644
rx_align_errors: 0
rx_broadcast: 23626
rx_bytes: 1897203
rx_compressed: 0
rx_crc_errors: 0
rx_csum_offload_errors: 0
rx_csum_offload_good: 0
rx_dropped: 4738
rx_errors: 0
rx_fifo_errors: 0
rx_flow_control_xoff: 0
rx_flow_control_xon: 0
rx_frame_errors: 0
rx_length_errors: 0
rx_long_byte_count: 1998731
rx_long_length_errors: 0
rx_missed_errors: 0
rx_multicast: 1644
rx_no_buffer_count: 0
rx_over_errors: 0
rx_packets: 25382
rx_short_length_errors: 0
rx_smbus: 0
tx_aborted_errors: 0
tx_abort_late_coll: 0
tx_broadcast: 7
tx_bytes: 11300
tx_carrier_errors: 0
tx_compressed: 0
tx_deferred_ok: 0
tx_dropped: 0
tx_errors: 0
tx_fifo_errors: 0
tx_flow_control_xoff: 0
tx_flow_control_xon: 0
tx_heartbeat_errors: 0
tx_multicast: 43
tx_multi_coll_ok: 0
tx_packets: 63
tx_restart_queue: 0
tx_single_coll_ok: 0
tx_smbus: 0
tx_tcp_seg_failed: 0
tx_tcp_seg_good: 0
tx_timeout_count: 0
tx_window_errors: 0

উত্তর:


23

চেষ্টা করুন /sys/class/net/eth0/statistics/ (যেমন eth0) এটি নিখুঁত নয় তবে এটি সংক্রমণ / গ্রহণের মাধ্যমে এবং ক্যারিয়ার, উইন্ডো, ফিফো, সিআরসি, ফ্রেম, দৈর্ঘ্য (এবং আরও কয়েকটি) ধরণের ত্রুটিগুলি ভেঙে দেয়।

ড্রপগুলি "উপেক্ষা করা" হিসাবে একই নয়, netstatইন্টারফেস স্তরের পরিসংখ্যান দেখান, একটি উচ্চ স্তরের দ্বারা উপেক্ষা করা একটি মাল্টিকাস্ট প্যাকেট (স্তর 3, আইপি স্ট্যাক) কোনও ড্রপ হিসাবে প্রদর্শিত হবে না (যদিও এটি কিছুতে "ফিল্টারড" হিসাবে প্রদর্শিত হতে পারে) এনআইসি পরিসংখ্যান)। বিভিন্ন অফলোড বৈশিষ্ট্য দ্বারা পরিসংখ্যান কিছুটা জটিল হতে পারে।

আপনার কাছে থাকলে আরও পরিসংখ্যান পেতে পারেন ethtool:

# ethtool -S eth0
 rx_packets: 60666755
 tx_packets: 2206194
 rx_bytes: 6630349870
 tx_bytes: 815877983
 rx_broadcast: 58230114
 tx_broadcast: 9307
 rx_multicast: 8406
 tx_multicast: 17
 rx_errors: 0
 tx_errors: 0
 tx_dropped: 0
 multicast: 8406
 collisions: 0
 rx_length_errors: 0
 rx_over_errors: 0
 rx_crc_errors: 0
 rx_frame_errors: 0
 rx_no_buffer_count: 0
 rx_missed_errors: 0
 tx_aborted_errors: 0
 tx_carrier_errors: 0
 tx_fifo_errors: 0
 tx_heartbeat_errors: 0
 [...]

কিছু পরিসংখ্যান NIC ড্রাইভারের উপর নির্ভর করে, সঠিক অর্থটিও। উপরেরটি একটি ইন্টেল থেকে প্রাপ্ত e1000। মুষ্টিমেয় ড্রাইভারের দিকে নজর রেখে কেউ কেউ অন্যের তুলনায় অনেক বেশি পরিসংখ্যান সংগ্রহ করে (এথোলের জন্য উপলব্ধ পরিসংখ্যানগুলি পৃথক উত্স ফাইলে রাখার ঝোঁক থাকে, যেমন drivers/net/ethernet/intel/e1000/e1000_ethtool.c, যদি আপনাকে র‌্যাভ করার দরকার হয়)।

ethtool -i eth0ড্রাইভারের বিবরণ প্রদর্শন করবে, আউটপুটটি lspci -vআরও বিশদভাবে হওয়া উচিত, যদিও কিছুটা বিশৃঙ্খলাও রয়েছে।


আপডেট সালে tg3.cফাংশন tg3_rx()শুধুমাত্র একটি জায়গা করে একটি সঙ্গে সম্ভবত সৌন্দর্য tp->rx_dropped++, কিন্তু কোড সঙ্গে littered হয় gotoগুলি, তাই সঙ্গে সুস্পষ্ট, অর্থাত্ যেকোনো কিছুর চেয়ে বেশ কয়েকটি কারণ আছে goto drop_it বা goto drop_it_no_recycle। (দ্রষ্টব্য যে ড্রপ কাউন্টারটি ড্রাইভার দ্বারা রক্ষণাবেক্ষণ করা কয়েকটিগুলির মধ্যে একটি, বাকীগুলি নিজেই ডিভাইস দ্বারা রক্ষণাবেক্ষণ করা হয়))

আমার কাছে চালকের উত্সটি হ'ল 3.123। আমার সেরা অনুমানটি এই কোড:

           if (len > (tp->dev->mtu + ETH_HLEN) &&
                skb->protocol != htons(ETH_P_8021Q)) {
                    dev_kfree_skb(skb);
                    goto drop_it_no_recycle;
            }

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


আপনার প্রস্তাবিত উত্তরের জন্য ধন্যবাদ। Sysfs পরিসংখ্যান dir বা দ্বারা ethtool -Sপ্রদত্ত তথ্য অনুরূপ (কমপক্ষে আমার সিস্টেমে) এবং আমি বাদ প্যাকেটের সংখ্যা সম্পর্কে কেবলমাত্র তথ্য পাই। আমি আউটপুট দিয়ে আমার পোস্ট আপডেট করব।
Huygens

আমি ড্রাইভার উত্স কোড (tg3.c) পরীক্ষা করে দেখেছি এবং শুধুমাত্র ভিএলএএন ত্রুটি এবং ভুল সকেট বাফার দৈর্ঘ্যের জন্য ড্রপগুলির উল্লেখ পেয়েছি। আমি এখনও এ থেকে কী উপসংহার করব তা জানি না ...
হিউজেনস

আপডেটের জন্য ধন্যবাদ, দুর্ভাগ্যক্রমে আমি দ্বিতীয়বার +1 করতে পারছি না ;-) tcpdump আমার এমটিইউ (1500) এর চেয়ে বড় জাম্বো ফ্রেম বা ফ্রেমগুলি রিপোর্ট করছে কিনা তা আমি দেখতে পাব।
হিউজেন্স

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

2
যদি tg3একটি মডিউল এবং আপনি সত্যিই এটা নীচে আপনি ব্যবহার করতে পারেন পেতে চান printk()-একটি netdev_info()কিছু ইভেন্টগুলি রেকর্ড করার জন্য, সেখানে দৃষ্টান্ত ইতিমধ্যে কোডে আপনি কপি করতে হয়। কাঠামোর include/linux/skbuff.hজন্য দেখুন sk_buff(হৃদয়ের মূর্ছা জন্য নয়)। tg3_rx()মডিউলটির পুনঃনির্মাণ এবং পুনরায় লোড করার জন্য প্রাসঙ্গিক জায়গায় কয়েকটি কল ছিটিয়ে দিন , এবং অপেক্ষা করুন ...
মিঃ স্পুর্যাটিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.