কার্নেল সকেট কাঠামো এবং TCP_DIAG


18

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

এই সরঞ্জামটি প্রতিটি সকেটের অবস্থা দেখতে দেয় - কমান্ডের আউটপুটটির উদাহরণ লাইন এখানে ss -inm 'src *:50000'

ESTAB      0      0             184.7.60.2:50000       184.92.35.104:1105
  mem:(r0,w0,f0,t0) sack rto:204 rtt:1.875/0.75 ato:40

আমার প্রশ্ন: মেমরি অংশটির অর্থ কী? সরঞ্জামটির উত্স কোডটি দেখে আমি দেখতে পেলাম যে ডেটা কার্নেল স্ট্রাকচার ( sockইন sock.h) থেকে আসছে । আরও স্পষ্টভাবে, এটি ক্ষেত্রগুলি থেকে আসে:

r = sk->sk_rmem_alloc
w = sk->sk_wmem_queued;
f = sk->sk_forward_alloc;
t = sk->sk_wmem_alloc;

কেউ কি জানেন যার অর্থ? আমার অনুমানগুলি হ'ল:

  • rmem_alloc : ইনবাউন্ড বাফারের আকার
  • wmem_alloc : বহির্মুখী বাফার আকার
  • sk_forward_alloc : ???
  • sk->sk_wmem_queued : ???

আমার বাফার আকার এখানে:

net.ipv4.tcp_rmem = 4096        87380   174760
net.ipv4.tcp_wmem = 4096        16384   131072
net.ipv4.tcp_mem = 786432       1048576 1572864
net.core.rmem_default = 110592
net.core.wmem_default = 110592
net.core.rmem_max = 1048576
net.core.wmem_max = 131071

আপনার বাফার আকারের কনফিগারেশন কী? আপনি কি সকেট সংযোগে বাফারকে স্যাচুরেটেড হতে দেখছেন? আপনার পার্টি কি EWODDBK এ সংযোগ ছাড়বে?
কার্লসন

আমার সকেটের আকারগুলি খুব ছোট আমার মনে হয়, আমি তাদের সাথে পোস্টটি আপডেট করেছি। ইওলডব্লকের জন্য আমি বলতে পারি না। আমার ক্লায়েন্ট জাভাতে রয়েছে এবং কেবল এটি বলুন যে এটি সার্ভার দ্বারা সংযোগ বিচ্ছিন্ন হয়েছে। সার্ভারটি সি ++ এ রয়েছে এবং এটি কেবলমাত্র বলে যে কোনও তথ্য ছাড়াই তিনি সংযোগটি বাদ দিয়েছেন। আমার কাছে সার্ভারের উত্স কোড নেই তাই আমি এর আচরণ পরিবর্তন করতে পারি না। দেখে মনে হচ্ছে ক্লায়েন্টরা কিছুটা ওভারলোড হয়ে গেলে সংযোগ বিচ্ছিন্ন হয়ে যায়, এমনকি এটি কেবল কয়েক সেকেন্ড স্থায়ী হয়।
টুইস্টার

সার্ভারে বাফার আকারগুলির কনফিগারেশনটি কি সামঞ্জস্যযোগ্য? আপনি ক্লায়েন্ট উপর বাফার আকার দেখতে পারেন? আপনার কি ক্লায়েন্টের উত্স অ্যাক্সেস আছে? আপনি বাফার আকারগুলি দেখতে নেটস্পট-অ্যাপসি চালিয়েছেন? কী ঘটেছিল তা দেখার জন্য আপনি কার্নেলে বাফার আকারগুলি বাড়ানোর চেষ্টা করেছিলেন?
কার্লসন

হ্যাঁ তারা, এবং ইতিমধ্যে সার্ভারের সর্বাধিক মানতে সেট করা আছে (আমি বিশ্বাস করি যে তারা নেট.ipv4.tcp_ * বৈশিষ্ট্যের চেয়ে বড় হতে পারে না, তাই না?) নেটস্যাট-অ্যাপ্লিকেশনটির জন্য এটি আমাকে বাফার আকার দেয় না, আমি এসএস এর দিকে তাকিয়েছিলাম কেন। কার্নেলের জন্য আমি সার্ভারে রুট নই, এবং এখানে আইটি দলগুলি বেশ জেদী। আমি তাদের মানগুলি পরিবর্তন করতে বলার আগে আমার কী হবে তা নিশ্চিত হওয়া দরকার ... এবং হ্যাঁ আমার ক্লায়েন্ট উত্সে অ্যাক্সেস রয়েছে এবং ক্লায়েন্ট সম্পর্কে আমার তদন্তে নিশ্চিত হওয়া যায় যে সার্ভার থেকে সংযোগ বিচ্ছিন্ন হয়ে গেছে।
টুইস্টার

নেটস্প্যাট-এপএনসিএন আপনাকে লিনাক্সে মোট পাঠানোর এবং প্রাপ্ত সারির আকার দেয়। সার্ভারটি যদি বাফারটিকে সর্বাধিক উপলব্ধ হিসাবে সেট করে এবং আপনি এখনও স্যাটারুটিং করছেন তবে আপনার ওএস স্তরে উচ্চতর বাফার সেটিংসের প্রয়োজন হবে
কার্লসন

উত্তর:


7

sk_forward_alloc ফরওয়ার্ড বরাদ্দ মেমরি যা সকেটের কোটায় বর্তমানে পাওয়া মোট স্মৃতি।

sk_wmem_queued সকেট দ্বারা প্রেরণকারী সারিতে বাফার কাতারে পাঠানো মেমরির পরিমাণটি যা এখনও প্রেরণ করা হয়নি বা এখনও স্বীকৃত নয়।

টিসিপি / আইপি আর্কিটেকচারের 9 অধ্যায়ে সমীর শেঠ, এম। অজাইকুমার ভেঙ্কটসুলু দ্বারা লিনাক্সের টিসিপি মেমরি ম্যানেজমেন্ট সম্পর্কে আরও শিখতে পারেন


আমি বুঝতে পারি না যে এই সংজ্ঞাটি sk_wmem_queuedথেকে কীভাবে আলাদা হয় sk_wmem_alloc, আপনি কি এই বিষয়ে কিছুটা প্রসারিত করতে পারেন? (যদি আপনি উত্তরটি জানেন তবে এই প্রশ্নের একটি উত্তর যুক্ত করতে নির্দ্বিধায় : unix.stackexchange.com/questions/551444/… )
ছোট-

1

এসএস এর ম্যান পেজ দেখুন।

<fwd_alloc>
   The  memory allocated by the socket as cache, but not used for receiving/sending packet yet. If need memory to send/receive packet, the memory in this cache will be used before allocate additional memory.

<wmem_queued>
   The memory allocated for sending packet (which has not been sent to layer 3)

0

সম্পর্কিত sk_wmem_queuedএবং sk_wmem_alloc, আমি একই প্রশ্ন জিজ্ঞাসা করেছি তাই আমি উত্তরটি এখানে অনুলিপি করব:

আমি এরিক দুমাজেটকে ইমেল করেছি, যিনি লিনাক্স নেটওয়ার্ক স্ট্যাকের জন্য অবদান রাখেন, এবং এর উত্তর এখানে দেওয়া হল:

sk_wmem_allocট্র্যাক ট্রান্সপোর্ট স্ট্যাকের পরে সিকিউবিউ সারিবদ্ধ জন্য বাইট সংখ্যা : কুইডিস্ক স্তর এবং এনআইসি টিএক্স রিং বাফারগুলি সনাক্ত করে।

আপনার কাছে যদি টিসিপি রাইট কাতারে বসে 1 এমবি ডেটা থাকে তবে এখনও পাঠানো হয়নি (সিডব্লিউড সীমা) sk_wmem_queueপ্রায় 1 এমবি sk_wmem_allocহবে তবে প্রায় 0 হবে

এই তিন প্রকারের সারি (সকেট বাফার, কিউডিস্ক কিউ এবং ডিভাইস সারি) কী তা বোঝার জন্য খুব ভাল নথিটি এই নিবন্ধটি (বরং দীর্ঘ) নিবন্ধ । সংক্ষেপে, সকেটটি প্যাকেটগুলি সরাসরি qdisc কিউয়ের দিকে ঠেলা দিয়ে শুরু হয়, যা সেগুলি ডিভাইস সারিতে ফরোয়ার্ড করে। যখন কুইডিস্কের সারিটি পূর্ণ হয়, সকেট তার নিজস্ব লেখার কাতারে ডেটা বাফার শুরু করে।

নেটওয়ার্ক স্ট্যাক প্যাকেটগুলি সরাসরি কুইউং শৃঙ্খলে রাখে বা অন্যথায় যদি সারিতে পূর্ণ থাকে তবে উপরের স্তরগুলিতে ফিরে যায় (যেমন সকেট বাফার) que

সুতরাং মূলত: sk_wmem_queuesসকেট বাফার ( sock.sk_write_queue) sk_wmem_allocদ্বারা ব্যবহৃত মেমরিটি যখন প্যাকেটগুলি qdisc এবং ডিভাইসের সারিগুলিতে ব্যবহৃত হয় is

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