পসিক্স অ্যাসিঙ্ক্রোনাস আই / ও (এআইআই) এর অবস্থান কী?


94

ওয়েবে চারপাশে ছড়িয়ে ছিটিয়ে থাকা পজাগুলি রয়েছে যা বিভিন্ন পরিমাণে বিশদে পসিক্স এআইও সুবিধা সরবরাহ করে describe এগুলির কোনওটিই ভয়ঙ্করভাবে সাম্প্রতিক নয়। তারা ঠিক কী বর্ণনা করছে তা পরিষ্কার নয়। উদাহরণস্বরূপ, লিনাক্স কার্নেল অ্যাসিনক্রোনাস আই / ও সমর্থন জন্য "অফিসিয়াল" (?) ওয়েবসাইটটি এখানে বলেছে যে সকেটগুলি কাজ করে না, তবে আমার উবুন্টু 8.04.1 ওয়ার্কস্টেশনের "aio.h" ম্যানুয়াল পৃষ্ঠাগুলিতে সমস্ত বোঝায় যে এটি স্বেচ্ছাসেবী ফাইল বর্ণনাকারীদের জন্য কাজ করে। তারপরে আরও একটি প্রকল্প রয়েছে যা মনে হয় লাইব্রেরির স্তরে এমনকি আরও কম ডকুমেন্টেশন সহ কাজ করবে।

আমি জানতে চাই:

  • পসিক্স এআইওর উদ্দেশ্য কী? প্রদত্ত যে বাস্তবায়নের সর্বাধিক সুস্পষ্ট উদাহরণটি আমি জানতে পারি এটি সকেটকে সমর্থন করে না, পুরো বিষয়টি আমার কাছে অদ্ভুত বলে মনে হয়। এটি কি কেবল অ্যাসিঙ্ক ডিস্ক আই / ও-র জন্য? যদি তাই হয় তবে হাইপার-জেনারেল এপিআই কেন? যদি তা না হয় তবে ডিস্ক আই / ও প্রথম জিনিস যা আক্রমণ করেছে?
  • যেখানে আমি দেখতে পাচ্ছি এমন সম্পূর্ণ পসিক্স এআইও প্রোগ্রামের উদাহরণ নেই ?
  • আসলেই কি কেউ এটি ব্যবহার করে?
  • কোন প্ল্যাটফর্মগুলি পসিক্স এআইও সমর্থন করে? তারা এর কোন অংশকে সমর্থন করে? <aio.h>প্রতিশ্রুতি বলে মনে হয় এমন কেউ "যে কোনও এফডি তে I / O" অন্তর্ভুক্ত সত্যই সমর্থন করে ?

আমার কাছে উপলভ্য অন্যান্য মাল্টিপ্লেক্সিং মেকানিজমগুলি পুরোপুরি ভাল, তবে চারপাশে ভাসমান তথ্যের এলোমেলো টুকরোগুলি আমাকে কৌতূহলী করে তুলেছে।

উত্তর:


28

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

ডিস্ক রাইটিং I / O ইতিমধ্যে বাফার হয়েছে এবং ডিস্ক রিড আই / ও পোস্টিক_ফ্যাডভিসের মতো ফাংশন ব্যবহার করে বাফারে প্রিফেট করা যেতে পারে। এটি এআইওর জন্য একমাত্র কার্যকর উদ্দেশ্য হিসাবে সরাসরি, অসারযুক্ত ডিস্ক আই / ওকে ছেড়ে দেয়।

ডাইরেক্ট, আনফারড I / O কেবলমাত্র লেনদেনের ডাটাবেসের জন্য কার্যকর এবং যারা তাদের ডিস্ক I / O পরিচালনা করতে নিজস্ব থ্রেড বা প্রক্রিয়াগুলি লেখেন।

সুতরাং, শেষে যা পসিক্স এআইওকে কোনও কার্যকর উদ্দেশ্য উপস্থাপন না করার অবস্থানে ফেলে দেয় । এটি ব্যবহার করবেন না।


8
নেটওয়ার্ক (এনএফএস, সাম্বা) ফাইল সিস্টেমগুলি থেকে পড়া / লেখার বিষয়ে কী?
অ্যালেক্স বি

4
আমরা হব. আমার কাছে বেশ কয়েকটি বড় বোবা লেখক রয়েছে, যদি আমি তাদের ক্যাশে যেতে দিই তবে শিখরে নোংরা_রাতিও মারবে, এবং অন্য সকলকে অবরুদ্ধ করে দেবে। আমি যদি কেবল তাদের উপর সরাসরি আইও ব্যবহার করি তবে এটি বেশ ধীর। আমার যদি মাত্র 1 টি থ্রেড থাকে তবে আমি নিজে থেকে পরিচালনা করতে পারি তবে 1 টি পদক্ষেপে বিভিন্ন আইও অগ্রাধিকারগুলি সমর্থন করা শক্ত হবে। এআইও + সিএফকিউ ওয়ালগুলি সত্যিই খুব ভাল সংমিশ্রণ বলে মনে হচ্ছে, যদি এআইও কাজ করে
এন-আলেকজান্ডার

37
আমি একমত নই ডিস্ক I / O বাফার হতে থাকে তবে এটি ব্লক হতে পারে। পোল () কোনও ফাইল এফডি আনার সময় সর্বদা প্রতিবেদন করে যে এফডিটি পঠনযোগ্য, এমনকি এটি ব্লক হয়ে যাবে। এটি কোনও থ্রেড বা এআইও ব্যবহার না করে সন্নিবিহীনভাবে ডিস্ক ফাইলগুলিতে অ-ব্লকিং অপারেশন করা অসম্ভব করে তোলে।
হংলি

4
@ ম্যাট: ডেটাগ্রামের সকেটের জন্য অর্ডারটি গুরুত্বপূর্ণ নয়। @ জ্যান: রিয়েল-টাইম স্ট্রিমিং ডেটা, যেমন মিডিয়া প্লেয়ারগুলি পূর্বনির্ধারিত করার জন্য অ্যাসিঙ্ক আই / ও খুব সুন্দর।
বেন ভয়েগট

13
এটি সত্য নয় যে এআইও ইভেন্ট ভিত্তিক সিস্টেমে অকেজো। আপনি যথাযথ এআইওর সাথে জিরো-কপি নেটওয়ার্কিংয়ে যেতে পারেন, যা আপনি ইভেন্ট-ভিত্তিক বিজ্ঞপ্তি পুনরায় () পুনর্বিবেচনা করতে পারবেন না। অন্যান্য জিনিসগুলি এটিকে বেশিরভাগ তাত্ত্বিক সীমাবদ্ধতা তৈরি করার ষড়যন্ত্র করতে পারে, তবে আমি মনে করি যে লিনাক্সের যথাযথ এআইও (উইন্ডোজে একটি লা ওভারল্যাপেড) এর অভাব অন্যতম একটি বড় গর্ত।
জন ওয়াট

70

I / O দক্ষতার সাথে সকেট করা কিউইউ, এপল, আইও সমাপ্তি বন্দর এবং পছন্দগুলি দিয়ে সমাধান করা হয়েছে। অ্যাসিঙ্ক্রোনাস ফাইল আই / ও করা একটি দেরী আগত লোকের ধরণ (উইন্ডোজগুলি ওভারল্যাপ করা I / O এবং পলিক্স এআইওর জন্য সোলারিস প্রাথমিক সমর্থন) বাদ দিয়ে।

আপনি যদি সকেট আই / ও করার সন্ধান করছেন তবে উপরের যেকোন একটি পদ্ধতি ব্যবহার করে আপনি সম্ভবত ভাল।

এআইওর মূল উদ্দেশ্য হ'ল অ্যাসিনক্রোনাস ডিস্ক আই / ও এর সমস্যা সমাধান করা। সম্ভবত ম্যাক ওএস এক্স কেবলমাত্র নিয়মিত ফাইলগুলির জন্য এআইও সমর্থন করে, এবং সকেট নয় (যেহেতু কোকুই যেভাবে এত ভাল করে)।

লেখার ক্রিয়াকলাপগুলি সাধারণত কার্নেল দ্বারা ক্যাশে হয় এবং পরবর্তী সময়ে তা বেরিয়ে আসে। উদাহরণস্বরূপ, যখন ড্রাইভের পঠন প্রধানটি যেখানে ব্লকটি লিখতে হবে সেখান দিয়ে চলে যায়।

যাইহোক, পাঠ্য ক্রিয়াকলাপগুলির জন্য, আপনি যদি কার্নেলটিকে নিজের পাঠকে অগ্রাধিকার এবং অর্ডার করতে চান তবে এআইও সত্যই একমাত্র বিকল্প। এখানে কার্নাল (তাত্ত্বিকভাবে) যে কোনও ব্যবহারকারীর স্তরের অ্যাপ্লিকেশনটির চেয়ে ভাল করতে পারে তা এখানে রয়েছে:

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

এটি বলেছিল, পিক্সস এআইওর একটি বেশ বিশ্রী ইন্টারফেস রয়েছে, উদাহরণস্বরূপ:

  • ইভেন্ট কলব্যাকগুলির একমাত্র দক্ষ এবং ভাল সমর্থিত মাধ্যমগুলি সিগন্যালের মাধ্যমে, যা একটি লাইব্রেরিতে ব্যবহার করা কঠিন করে তোলে, কারণ এর অর্থ প্রক্রিয়া-বৈশ্বিক সংকেত নেমস্পেস থেকে সংকেত সংখ্যা ব্যবহার করা। যদি আপনার ওএস রিয়েলটাইম সংকেতগুলি সমর্থন করে না, তবে এর অর্থ হ'ল কোনটি শেষ হয়েছে তা নির্ধারণ করার জন্য আপনার সমস্ত অসামান্য অনুরোধের মধ্য দিয়ে লুপ করতে হবে (এটি ম্যাক ওএস এক্সের ক্ষেত্রে, লিনাক্স নয়)। বহু-থ্রেডযুক্ত পরিবেশে সংকেতগুলি ধরা কিছু জটিল বাধাও দেয়। আপনি সাধারণত সিগন্যাল হ্যান্ডলারের ভিতরে থাকা ইভেন্টটিতে প্রতিক্রিয়া জানাতে পারেন না, তবে আপনাকে একটি সিগন্যাল বাড়াতে হবে, একটি পাইপে লিখতে হবে বা সিগন্যালফডি () (লিনাক্সে) ব্যবহার করতে হবে।
  • লিও_সপাসেন্ড () সিলেক্ট () এর মতো একই সমস্যা রয়েছে, এটি কাজের সংখ্যার সাথে খুব ভাল স্কেল করে না।
  • লিও_লিস্টিও () বাস্তবায়িত হওয়ার সাথে সাথে আপনি যে পরিমাণ কাজ সীমাবদ্ধ করতে পারবেন তা যথেষ্ট পরিমাণে সীমাবদ্ধ রয়েছে এবং পোর্টেবল উপায়ে এই সীমাটি খুঁজে পাওয়া তুচ্ছ নয়। আপনাকে সিসকনফকে কল করতে হবে (_SC_AIO_LISTIO_MAX), যা ব্যর্থ হতে পারে, আপনি যদি এআইআই_লিস্টিও_ম্যাক্স সংজ্ঞায়িত করতে পারেন, যা প্রয়োজনীয়ভাবে সংজ্ঞায়িত হয় না তবে আপনি 2 ব্যবহার করতে পারেন, যা সমর্থিত হওয়ার গ্যারান্টিযুক্ত হিসাবে সংজ্ঞায়িত হয়েছে।

সত্যিকারের বিশ্বের অ্যাপ্লিকেশন যেমন পিক্স এআইও ব্যবহার করে আপনি লাইটটিপিডি (হালকা) দেখে নিতে পারেন, যা সমর্থন প্রবর্তনের সময় একটি পারফরম্যান্স পরিমাপ পোস্ট করেছিল ।

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

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


উইন্ডোজের প্রথমবার উইন 32 আসার পর থেকে ওভারল্যাপড আই / ও সাপোর্টিং ডিস্ক ফাইল রয়েছে। এটি মোটেই নতুন নয়। এবং পসিক্সে, সিগন্যাল নেমস্পেস প্রক্রিয়া-বিশ্বব্যাপী নয়, এটি প্রতি থ্রেড। সিগন্যালগুলি নির্দিষ্ট থ্রেডে সরবরাহ করা হয় (বা এটিও ব্যতিক্রম, এটি নির্দিষ্টভাবে মনে করতে পারে না?)
বেন ভয়েগট

4
কোন থ্রেড এআইও এর সংকেত সরবরাহ করে তা নির্দিষ্ট করার কোনও উপায় নেই। লিনাক্সে এটি বেশিরভাগ ক্ষেত্রে থ্রেডে পৌঁছে দেবে বলে মনে হয় যা অায়ো _ * ​​() কমান্ড জারি করেছিল তবে সবসময় নয় (একমাত্র সমাধানটি আমি এর মধ্যে পেয়েছি একাধিক সিগন্যালফিড তৈরি করা)। কয়েক বছর আগে কার্নেল মেলিং তালিকায় একটি লিনাক্স প্যাচ আপ ছিল যা এটি যুক্ত করবে তবে এটি এটিকে কখনই তৈরি করতে পারেনি এবং এটি পসিক্সে একটি এক্সটেনশন হতে পারে। ম্যাক ওএস এক্স-তে, সংকেতগুলি বেশিরভাগই মূল থ্রেডে সরবরাহ করা হবে বলে মনে হয় (আমার অভিজ্ঞতাতে)। আমি মনে করি না পসিক্সের একটি নির্দিষ্ট আচরণের প্রয়োজন, যদি এটি হয় তবে আমি অনুষঙ্গটির অংশটি দেখতে পছন্দ করব।
অরভিদ

5
glibc এর aio_read / Writing এর প্রয়োগকরণটি ইউজারল্যান্ডে থ্রেড ব্যবহার করে, তাই এখানে কার্নেল থ্রেড ব্যবহার করা হয় না।
মেরেঞ্জ

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

আপনি এআইও ব্যবহার করতে পারেন এমন আরও একটি জীবন্ত উদাহরণ হ'ল এনজিনেক্স। সমস্ত মোড সমর্থিত। আপনি যদি ইউজারল্যান্ড থ্রেডগুলিতে অফলোডিং পছন্দ করেন তবে আপনি সাধারণত এটি সরাসরি আইওর চেয়ে অনেক খারাপ দেখতে পাবেন তবে লিনাক্স নেটিভ এআইও সরাসরি আইওর সাথে সমান নয়। পরিস্থিতি যখন এআইও যথেষ্ট পরিমাণে উপকারী হতে পারে তা হ'ল পৃষ্ঠার ক্যাশে চাপ। অ্যাসিঙ্ক এবং ডাইরেক্ট আইও-র মধ্যে ধারণাগত পার্থক্য এখানে দেখা যেতে পারে ftp.dei.uc.pt/pub/linux/kernel/people/suparna/aio-linux.pdf
wick

11

একটি লিবার্টরেন্ট বিকাশকারী এটি সম্পর্কে একটি প্রতিবেদন সরবরাহ করে: http://blog.libtorrent.org/2012/10/asynchronous-disk-io/


5
এটাই হবে
অরবিদ

দুর্দান্ত প্রতিবেদন। খুব শিক্ষামূলক। ভাগ করার জন্য আপনাকে ধন্যবাদ।
chmike

2

আছে aio_writ - glibc এ প্রয়োগ; aio_read বা aio_writ ফাংশনটির প্রথম কলটি বেশ কয়েকটি ব্যবহারকারী মোড থ্রেডকে প্রসারিত করে, aio_writ বা aio_read পোস্টের জন্য অনুরোধ জানায়, থ্রেডটি প্রিড / পাইরেট করে এবং এটি শেষ হয়ে গেলে উত্তরটি ব্লকড কলিং থ্রেডে ফিরে পোস্ট করা হয়।

থারটি 'রিয়েল' এওও - কার্নেল স্তরের দ্বারা সমর্থিত (এর জন্য লাইবাইও প্রয়োজন, io_submit কলটি দেখুন http://linux.die.net/man/2/io_submit ); এর জন্য ও_ডিআরইসিটিরও প্রয়োজন (সমস্ত ফাইল সিস্টেমের দ্বারা এটি সমর্থিত নাও হতে পারে তবে বড়গুলি এটি সমর্থন করে)

এখানে দেখো:

http://lse.sourceforge.net/io/aio.html

http://linux.die.net/man/2/io_submit

লিনাক্সে পসিক্স এআইও এবং লাইবাইওর মধ্যে পার্থক্য?


এর অনেকগুলি ঘাটতি aio_writeউপরে বর্ণিত, স্ট্যাকওভারফ্লো
5307557/
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.