যদিও ডিএমএ সিপিইউকে মুক্তি দেয় এবং এভাবে একই কোরে চলমান অন্যান্য বাধা-চালিত অ্যাপ্লিকেশনগুলির বিলম্বতা কমিয়ে আনতে পারে, এর সাথে সম্পর্কিত বিভিন্ন ব্যয় রয়েছে:
কেবলমাত্র ডিএমএ চ্যানেলের সীমিত পরিমাণ রয়েছে এবং সেই চ্যানেলগুলি কীভাবে বিভিন্ন পেরিফেরিয়ালের সাথে যোগাযোগ করতে পারে তার সীমাবদ্ধতা রয়েছে। একই চ্যানেলে আর একটি পেরিফেরাল ডিএমএ ব্যবহারের জন্য আরও উপযুক্ত হতে পারে।
উদাহরণস্বরূপ, যদি আপনার প্রতি 5 মিনিটে বাল্ক আই 2 সি স্থানান্তর হয় তবে এটি ইউআরটি 2-তে আগত একটি ডিবাগ কমান্ডের চেয়ে ডিএমএর পক্ষে আরও ভাল প্রার্থী বলে মনে হয়।
ডিএমএ স্থাপন এবং বজায় রাখা নিজেই একটি ব্যয় । (সাধারণত, ডিএমএ সেটআপ করা সাধারণ প্রতি-চরিত্রের বিপরীত চালিত স্থানান্তর স্থাপনের চেয়ে জটিল হিসাবে বিবেচিত হয়, মেমরি পরিচালনার কারণে, আরও পেরিফেরিয়াল জড়িত থাকে, ডিএমএ নিজেই বাধা ব্যবহার করে এবং আপনাকে ডিএমএর বাইরে প্রথম কয়েকটি অক্ষর বিশ্লেষণ করার সম্ভাবনা থাকে) যাইহোক, নীচে দেখুন।)
ডিএমএ অতিরিক্ত শক্তি ব্যবহার করতে পারে , যেহেতু এটি এখনও-কোর-এর অন্য একটি ডোমেন যা আটকে রাখা দরকার। অন্যদিকে, ডিএমএ ট্রান্সফার চলাকালীন আপনি সিপিইউ স্থগিত করতে পারেন, যদি কোর এটি সমর্থন করে।
ডিএমএর সাথে কাজ করার জন্য মেমরি বাফারগুলি প্রয়োজন (যদি আপনি পেরিফেরিয়াল থেকে পেরিফেরিয়াল ডিএমএ না করেন) তবে এর সাথে কিছু মেমরি ব্যয় যুক্ত রয়েছে।
( প্রতি-চরিত্রের বিঘ্ন ব্যবহার করার সময় মেমোরির ব্যয়ও সেখানে থাকতে পারে, তবে বার্তাটি ইন্টারপটের অভ্যন্তরে যদি তাত্ক্ষণিকভাবে ব্যাখ্যা করা হয় তবে এটি আমার থেকে অনেক ছোট বা অদৃশ্য হয়ে যেতে পারে))
ডিএমএ একটি বিলম্ব ঘটায় কারণ স্থানান্তর সম্পূর্ণ / অর্ধেক সম্পূর্ণ হলে সিপিইউ কেবলমাত্র বিজ্ঞপ্তি হয় (অন্যান্য উত্তরগুলি দেখুন)।
কোনও রিং বাফারটিতে / থেকে ডেটা স্ট্রিম করার সময় বাদ দিয়ে, আপনি কতটা ডেটা গ্রহণ / প্রেরণ করবেন তা আগে থেকেই আপনার জানতে হবে।
এর অর্থ এই হতে পারে যে প্রতি-চরিত্রের বিঘ্ন ব্যবহার করে কোনও বার্তার প্রথম অক্ষরগুলি প্রক্রিয়া করা প্রয়োজন: উদাহরণস্বরূপ, এক্সবিয়ের সাথে ইন্টারফেস করার সময়, আপনি প্রথমে প্যাকেট টাইপ এবং আকার পড়তেন এবং তারপরে একটি ডিএমএ স্থানান্তরকে বরাদ্দকৃত বাফারে ট্রিগার করতে পারেন।
অন্যান্য প্রোটোকলগুলির জন্য, এটি মোটেও সম্ভব নয়, যদি তারা কেবলমাত্র মেসেজের শেষ প্রান্তে ব্যবহার করে: উদাহরণস্বরূপ, পাঠ্য-ভিত্তিক প্রোটোকল যা '\n'
ডিলিমিটার হিসাবে ব্যবহার করে । (যদি না ডিএমএ পেরিফেরাল কোনও চরিত্রের সাথে মেলানো সমর্থন করে))
আপনি দেখতে পাচ্ছেন, এখানে বিবেচনা করার মতো প্রচুর বাণিজ্য-অফ রয়েছে। কিছু হার্ডওয়্যার সীমাবদ্ধতার সাথে সম্পর্কিত (চ্যানেলের সংখ্যা, অন্যান্য পেরিফেরিয়ালগুলির সাথে দ্বন্দ্ব, চরিত্রের সাথে মিল), কিছু ব্যবহৃত প্রোটোকলের উপর ভিত্তি করে (ডিলিমিটার, পরিচিত দৈর্ঘ্য, মেমরি বাফার)।
কিছু কৌতুকপূর্ণ প্রমাণ যোগ করতে, আমি একটি শখের প্রকল্পে এই সমস্ত বাণিজ্য-অফগুলির মুখোমুখি হয়েছি যা খুব আলাদা প্রোটোকলের সাহায্যে অনেকগুলি পৃথক পেরিফেরিয়াল ব্যবহার করে। বেশিরভাগ ট্রেড-অফ করা হয়েছিল, বেশিরভাগ ক্ষেত্রে "আমি কতটা ডেটা স্থানান্তর করছি এবং কতবার আমি তা করতে যাচ্ছি?" এই প্রশ্নের উপর ভিত্তি করে। এটি আপনাকে সিপিইউতে সাধারণ বিঘ্নিত-চালিত স্থানান্তরের প্রভাব সম্পর্কে মোটামুটি অনুমান দেয়। আমি এইভাবে একই ডিএমএ চ্যানেল ব্যবহারকারী প্রতি কয়েক সেকেন্ডে ইউআরটি স্থানান্তরের উপরে প্রতি 5 মিমি উপরে উল্লিখিত আই 2 সি স্থানান্তরকে অগ্রাধিকার দিয়েছিলাম। অন্য একটি ইউআরটি স্থানান্তর প্রায়শই ঘটে এবং অন্যদিকে আরও ডেটা সহ অন্য আই 2 সি স্থানান্তরের চেয়ে অগ্রাধিকার পেল যা খুব কমই ঘটে। এটি সব বাণিজ্য বন্ধ।
অবশ্যই, ডিএমএ ব্যবহারেরও সুবিধাগুলি রয়েছে তবে এটি আপনি যা চেয়েছিলেন তা নয়।