কীভাবে লিনাক্স কার্নেলকে কয়েকশ মিলি সেকেন্ডের জন্য "স্থির" (বা প্রায় জমাট) করতে বাধ্য করা যায়


17

আমরা একটি রিয়েল-টাইম কার্নেল (CentOS 6) এ রিয়েল-টাইম প্রক্রিয়া চালাচ্ছি এবং সম্ভবত এটি পরিবর্তন হতে পারে না।

আমাদের কাছে একটি স্ট্রিমিং ভিডিও অ্যাপ্লিকেশন রয়েছে যা একবারে 1.5 ঘন্টা অবিরত কাস্টম এফপিজিএ থেকে প্রায় 500 এমবি / এসি পিসিআই ট্র্যাফিকের প্রয়োজন requires অ্যাপ্লিকেশনটি বেশ ভালভাবে কাজ করে - বেশিরভাগ সময়। যাইহোক, আমাদের এমন পরিস্থিতি হয়েছিল যেখানে দেখা যাচ্ছে যে কার্নেল কেবল একবারে 500 মিলিসেকেন্ড পর্যন্ত পিসিআই বা মেমরির অনুরোধগুলির পরিষেবা দেওয়া বন্ধ করে দেয়। এটি অন্য থ্রেড থেকে বিস্ফোরিত ফাইল IO চলাকালীন ঘটেছিল। মূল অ্যাপ্লিকেশন চলাকালীন ব্যবহারকারীর স্থান থেকে প্রচুর ডামি ফাইল আইও করে এই সমস্যাটির প্রতিলিপি তৈরি করার চেষ্টা করা আমার পক্ষে অসম্ভব হয়ে পড়েছে।

লিনাক্স কার্নেলের (বিশেষত, পিসিআই বা সমস্ত ডিডিআর 3 মেমরি অ্যাক্সেসগুলি বা সে জাতীয় কিছু থামানো) একটি বিশ্বব্যাপী "হিমায়িত" বল প্রয়োগ করার (অনুকরণ) করার কোন উপায় রয়েছে যাতে আমরা এই সমস্যাটি পুনরুত্পাদন করতে পারি?

আমরা এখনই অভ্যন্তরীণ এফপিজিএ মেমরিতে 10 মিলিসেকেন্ড পর্যন্ত প্রয়োগ করা হয়েছে, তবে এটি পর্যাপ্ত নয়। আমরা এফপিজিএ ডিডিআর 3 এ বাফার করতে পারি এবং তারপরে হোস্টের কাছে ফেলে দিতে পারি, তবে আমাদের এই নতুন বৈশিষ্ট্যটি স্থায়ীত্বের অধীনে পরীক্ষা করার জন্য একটি পদ্ধতি প্রয়োজন।

আমরা চাই না যে কার্নেল স্থায়ীভাবে স্থির হোক বা লকআপ হোক। আমরা সময় ব্যবধান নির্ধারণ করার ক্ষমতা চাই।

আমি /proc/sys/vmসাময়িকভাবে যাদুবিদ্যার মান লেখার পদ্ধতিতে এমন কিছু সন্ধান করছি যা সিস্টেমকে কার্যত ক্রল করে দেয় এবং তারপরে কয়েকশ মিলি সেকেন্ডের পরে ফিরে আসে, তবে এটি ভাঙার সম্ভাব্য উপায়গুলির সন্ধান করা আমার মতো নবজাতকের পক্ষে নয় ( https://www.kernel.org/doc/Docamentation/sysctl/vm.txt )। কিছু numactlম্যাজিক হতে পারে ?


আমার কুণ্ডলীটি হ'ল এটির জন্য একটি কার্নেল মডিউল লেখার প্রয়োজন। আপনাকে কোনও কোনওভাবে সমস্ত সিপিইউতে সমস্ত থ্রেড জমাতে হবে এবং টাইমার বিঘ্নিত অবস্থায় পুনরায় চালু করার ব্যবস্থা করতে হবে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

আমি থ্রেডগুলি হিমায়িত করতে চাই না, আমি কার্নেলটি স্থির করতে চাই! মানে, আমি অল্প সময়ের জন্য হার্ডওয়্যার (মেমরি এবং / অথবা PCIe এবং / অথবা ডিস্ক) অ্যাক্সেস আটকাতে চাই। যদি এটি কাজ না করে তবে আমি খুব অযৌক্তিকভাবে জিনিস তৈরি করা, এল 1 ক্যাশে অক্ষম করা ইত্যাদিতে কিছু মনে করি না etc. আমি কীভাবে এটি করব তা জানি না।
Lakata

1
আহ, সুতরাং আপনি কার্নেল হিম করতে চান না, আপনি কেবল কার্নেলের অংশটি স্থির করতে চান যা কিছু হার্ডওয়্যারকে প্রতিক্রিয়া জানায়? এটির জন্য, কার্নেলের মধ্যে বেশ গভীরভাবে ডাইভিংয়ের প্রয়োজন হবে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

কার্নেলটি সম্পূর্ণরূপে হিম হ্রাস করতে আমার আপত্তি নেই, যতক্ষণ না তার অংশ হিসাবে হার্ডওয়্যার হিমায়িত হয়।
লাকাটা

1
দেখা যাচ্ছে যে হোস্ট সিপিইউ কিছু আইও বাফারকে ফ্লাশ করছে (আমরা ফাইলগুলি লেখার জন্য এইচডিএফ 5 ব্যবহার করছি), এবং এই টিএলবি থ্র্যাশিংয়ের ফলে কপিরোসেসরকেও আঘাত করা হচ্ছে, কারণ এটি একটি NUMA সিস্টেম। আমি অনুমান করি যে আমাদের এখন যা দরকার তা হ'ল প্রোগ্রামের মাধ্যমে টিএলবিকে নিয়ন্ত্রিত সময়ের জন্য হ্রাস করার একটি নির্ভরযোগ্য উপায়।
লকাতা

উত্তর:


9

দ্রুত পরীক্ষা করার একটি বিকল্প হ'ল কেজিডিবি সক্ষম কার্নেল ব্যবহার করা এবং কার্নেলটি নিজেই থামানো এবং পরীক্ষা করা, এই লিঙ্কটি দেখুন

অন্য একটি নোটে, আমি মনে করি এমন জিনিসগুলি যা আপনার বিরতি সৃষ্টি করতে পারে:

  • রঙ, cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_transition_latency, মান NS (4000 আমার এএমডির এফএক্স (TM) -8120 আট-কোর প্রসেসর) এ একটি সমস্যা হবে না উচিত, কিন্তু চেক
  • তাপীয় থ্রোটলিং হয় সিপিইউ নিজেই বা ভোল্টেজ নিয়ন্ত্রক মডিউল।
  • NAPI এবং / অথবা ভারী নেটওয়ার্ক ট্র্যাফিক
  • পিসিআই এএসপিএম ( cat /sys/module/pcie_aspm/parameters/policy)
  • আপনার গন্তব্য ডিভাইসের বাফারগুলিতে বিতর্ক (হার্ড ডিস্ক, নিক ...)
  • পিসিআই বাসে কিছু ডিভাইসের ফার্মওয়্যারের বাগ (আপনি এটি ব্যবহার না করেও), আপনি এগুলি দিয়ে বিদ্যুৎ ব্যবহারের চেষ্টা করতে পারেন /sys/bus/pci/devices/$DEVICE/power/control

আমি কি একই kdbপরিবর্তে ব্যবহার kgdbকরতে পারি? আমি কখনও ব্যবহার করিনি। এটি কি 'স্টপ-এ' কমান্ডের মতো সান ওয়ার্কস্টেশনগুলিতে পূর্ববর্তী? আমি যদি কেবল একটি দ্রুত সিএসআরকি-জি করি, তবে "গো" টাইপ করুন, আমার কি সিস্টেমটি না ভাঙার উচ্চ সম্ভাবনা থাকবে? (রেফ: কর্নেল.org / pub / linux / kernel / people / jwessel / kdb/… )
মার্ক Lakata

1
সম্ভবত আপনি কেডিবি ব্যবহার করতে সক্ষম হবেন। সচেতন থাকুন যে এটি ইউএসবি সংযুক্ত কীবোর্ডগুলির সাথে কাজ করা উচিত, তবে PS / 2 এক হাতের কাজ করার চেষ্টা করুন। এবং এটি খুব নিম্ন স্তরের ডিবাগার (কার্নেল ল্যান্ড), তাই বরাবরের মতো, ব্যাকআপ রাখুন এবং যদি এটি ভেঙে যায় তবে আপনি উভয় টুকরা রাখবেন :)।
জর্জি নেরেন

কার্নেলের সাথে টুইট করার আগে আমি প্রথমে পিসিআই ডিভাইসগুলির জন্য অব্যবহৃত কার্নেল মডিউলগুলি আনড করার চেষ্টা করব যা বাস ব্যবহার করতে পারে (গ্রাফিক্স ড্রাইভারগুলি সবচেয়ে উল্লেখযোগ্যভাবে), এবং হয় শারীরিকভাবে ডিভাইসগুলি সিস্টেম থেকে সরিয়ে ফেলা বা এটিকে বন্ধ করে দেওয়া। PCIe 1.0 x1 এর 250MB / s এর ব্যান্ডউইথ রয়েছে এবং PCIe 2.0 x1 500MB / s পর্যন্ত চলেছে, উভয়ই উত্স এবং গন্তব্য ডিভাইসটি কোনও বাধা ছাড়াই এই ধরণের টেকসই হারকে মেনে নিতে মুক্ত বা তাদের আরও শিরোনামের জন্য আরও লেন থাকতে পারে?
জর্জি নেরান

ল্যাগের আরেকটি সম্ভাব্য উত্স হতে পারে কোনও ডিভাইসের কিছু এসিপিআই পাওয়ার পরিচালনা হ্যান্ডলার বা কোনও এসএমএম সিপিইউ হ্যান্ডলার কোনও বাহ্যিক ইভেন্টের জন্য অপেক্ষা করতে পারে waiting
ফ্রানকি

2

আপনার অ্যাপ্লিকেশন কীভাবে এফপিজিএর সাথে যোগাযোগ করছে সে সম্পর্কে আমাদের আরও বিশদ থাকতে পারে? এটি কি অ্যাপ্লিকেশন যা এফপিজিএ থেকে বাফার পড়ে, বা এফপিজিএ যা কার্নেলটিতে বাধা প্রেরণ করে (নেটওয়ার্ক কার্ডগুলির মতো)?

আমি এটি / ডি ইন / তে একটি ব্লক / চর খুলতে এবং তার সাথে যোগাযোগ করার আশা করি। এর অর্থ এটি অ্যাপ্লিকেশন এবং / dev / XXX ফাইলের মধ্যে যোগাযোগ করতে ড্রাইভার ব্যবহার করে।

আমি আউটপুট আছে চাই: cat /proc/interrupts; lsmod;ls -al /dev/yourmod

এখানে ধারণাগুলি:

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

আপনি দরকারী হতে পারে সমস্ত তথ্য প্রদান করুন।


এফপিজিএ মেমোরি হোস্ট করার জন্য ডিএমএ লিখেছে, এবং এই আউটেজের সময়কালে, এফপিজিএ হোস্ট মেমোরিতে লিখতে সক্ষম হয় না, তাই এর অভ্যন্তরীণ ফিফো ব্যাক-আপ করে। হোস্ট প্রক্রিয়াটিতে একটি বার্তা-ভিত্তিক ইন্টারফেস রয়েছে (পিসিআইই দিয়ে ঘটে), তবে আমি নিশ্চিত যে এটি জড়িত নয়। বৈধতার উদ্দেশ্যে, আমার মূলত কয়েকশ মিলি সেকেন্ডের জন্য হোস্ট মেমোরিতে লিখতে FPGA হার্ডওয়্যার নিষিদ্ধ করার একটি উপায় প্রয়োজন। আমি মেমরির সমস্যাটি সমাধান করতে চাই না, তবে আমি নিশ্চিত করতে চাই যে এফপিজিএতে আমাদের প্রয়োগকরণ একটি মেমোরি আউটেজ (1000 এমএস পর্যন্ত) মোকাবেলা করতে সক্ষম হয়েছে।
20:34

ঠিক আছে, যদি এটি ডিএমএ ব্যবহার করে তবে আপনার নিজের দিকে নজর দিতে পারেন: kernel.org/doc/Docamentation/DMA-ISA-LPC.txt বিবরণটি দাবি_ডম_লক () এবং dma_disable () এর উপর রয়েছে। তবে, আপনার এফপিজিএ দ্বারা ব্যবহৃত ঠিকানাগুলি আপনার জানতে হবে।
অ্যাড্রিয়েন এম

1

নিশ্চিত না এটি সাহায্য করে কিনা। তবে আপনি যদি কোনও কার্নেল মডিউল লিখতে পারেন যা suspendঅন্য ডিভাইসের কার্নেল মডিউলটির ফাংশনটিকে কল করে , এটি করতে পারে।

প্রতিটি পিসিআই ডিভাইস শিরোনাম ফাইল http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/incolve/linux/pci.h#L479 অনুসারে স্থগিত করা যেতে পারে

উদাহরণস্বরূপ, এখানে ইন্টেল e1000 এনআইসির স্থগিত ফাংশন http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/drivers/net/e1000e/netdev.c#L4643

আমি যা স্মরণ করতে পারি তা থেকে, এই ফাংশনটি মূলত যখন সিস্টেম হাইবারনেশনে যায় তখন ডিভাইস ড্রাইভারদের বর্তমান চলমান স্থিতি সংরক্ষণ করতে হবে এবং নিজেকে বন্ধ করে দেওয়া উচিত।


ধন্যবাদ, তবে আমি মনে করি না এটি কার্যকর হবে। আমি আসলেই কোনও ডিভাইস স্থগিত করতে চাই না, এটি কার্নেল যা ডিভাইসকে হাইবারনেশনের জন্য প্রস্তুত করতে বলে; আমি কার্নেল চান নির্দিষ্ট ডিভাইস (এই ক্ষেত্রে FPGA কন্যা বোর্ড) উপেক্ষা করার এটা জেনে (দীর্ঘ ল্যাটেন্সি বা সময় সমাপ্ত ছাড়া) - অথবা আমি সব SDRAM মেমরি স্থানান্তর বন্ধ করতে চান।
মার্ক Lakata

0

আমি মনে করি আপনি ভুল লাইন ধরে চিন্তা করছেন। আপনার লক্ষ্য পরিষ্কার।

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

আরও জটিল সমস্যা হ'ল পিসিআইই বাধা হ্যান্ডলিং, যা কার্নেল-স্পেসে থাকে।

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

ইরক্বালেন্স এখানে সাধারণত একটি ভাল কাজ করে তবে আপনার প্রয়োজন অনুসারে আপনি এটি বাহাওয়ারকে কনফিগার করতে পারেন।

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