ডিস্কে ডেটা লিখতে দেরি করার পিছনে দর্শন কি?


72

লিনাক্সে, কোনও কমান্ডের সমাপ্ত কার্যকারিতা যেমন cpবা এর ddঅর্থ এই নয় যে ডিভাইসে ডেটা লেখা হয়েছে। উদাহরণস্বরূপ, একটিতে কল syncকরতে হবে বা ড্রাইভে "নিরাপদে অপসারণ" বা "বের করুন" ফাংশনটি আহ্বান করতে হবে।

এই ধরনের পদ্ধতির পিছনে দর্শন কি? কেন ডেটা একবারে লেখা হয় না? আই / ও ত্রুটির কারণে লেখার ব্যর্থতা হওয়ার কোন আশঙ্কা নেই?


16
মনে রাখবেন যে রিড ও রাইটিং কল কলগুলি একবারে এক বাইট দিয়ে কাজ করতে পারে তবে ডিস্ক ড্রাইভগুলি কেবল স্থির আকারের ব্লকগুলি পড়তে বা লিখতে পারে। একসময় বাইটের জন্য ওভারহেড বাফার না করেই অসহনীয় হবে। বাফারিংয়ের সাথে এটি সহনীয়।
জোনাথন লেফলার

উত্তর:


47

এই ধরনের পদ্ধতির পিছনে দর্শন কি?

দক্ষতা (ডিস্কের বৈশিষ্ট্যগুলির আরও ভাল ব্যবহার) এবং কার্য সম্পাদন (কোনও লেখার সাথে সাথে অ্যাপ্লিকেশনটি চালিয়ে যাওয়ার অনুমতি দেয়)।

কেন ডেটা একবারে লেখা হয় না?

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

এই অ্যাসিঙ্ক্রোনাস লেখাগুলি সিস্টেম কল ফিরে আসার পরে করা হয় write। এটি দ্বিতীয় এবং সর্বাধিক ব্যবহারকারীর দৃশ্যমান সুবিধা। অ্যাসিঙ্ক্রোনাস অ্যাপ্লিকেশনগুলির গতি বাড়ায় কারণ এগুলি আসলে ডিস্কে থাকা ডেটার জন্য অপেক্ষা না করেই তারা তাদের কাজ চালিয়ে যেতে মুক্ত। একই ধরণের বাফারিং / ক্যাশিং পড়ার ক্রিয়াকলাপগুলির জন্যও প্রয়োগ করা হয় যেখানে সম্প্রতি বা প্রায়শই পঠিত ব্লকগুলি ডিস্ক থেকে পুনরায় পড়ার পরিবর্তে মেমরিতে রাখা হয়।

আইও ত্রুটির কারণে লেখার ব্যর্থতা হওয়ার কোন আশঙ্কা নেই?

অগত্যা। এটি ব্যবহৃত ফাইল সিস্টেম এবং অপ্রয়োজনীয় স্থানের উপর নির্ভর করে। ডেটা অন্য কোথাও সংরক্ষণ করা গেলে আই / ও ত্রুটিটি ক্ষতিহীন হতে পারে। জেডএফএসের মতো আধুনিক ফাইল সিস্টেমগুলি ব্যাড ডিস্ক ব্লকগুলিকে স্ব-নিরাময় করে। I / O ত্রুটিগুলি আধুনিক ওএস ক্র্যাশ করে না। যদি ডেটা অ্যাক্সেসের সময় এগুলি ঘটে থাকে, তবে তারা কেবল প্রভাবিত অ্যাপ্লিকেশনটিতে রিপোর্ট করা হয়। যদি তারা কাঠামোগত মেটাডেটা অ্যাক্সেসের সময় ঘটে থাকে এবং ফাইল সিস্টেমটিকে ঝুঁকিতে ফেলে দেয় তবে এটি কেবল পঠনযোগ্য পুনরায় তৈরি করা যেতে পারে বা অ্যাক্সেসযোগ্য হতে পারে।

ওএস ক্র্যাশ, বিদ্যুৎ বিভ্রাট বা একটি হার্ডওয়্যার ব্যর্থতার ক্ষেত্রে হালকা ডেটা হ্রাস হওয়ার ঝুঁকিও রয়েছে। এই কারণেই অ্যাপ্লিকেশনগুলির যে অবশ্যই 100% নিশ্চিত হওয়া উচিত যে ডেটা ডিস্কে রয়েছে (যেমন ডাটাবেসগুলি / আর্থিক অ্যাপ্লিকেশনগুলি) কম দক্ষ তবে আরও সুরক্ষিত সিঙ্ক্রোনাস রাইটিং করছে। কর্মক্ষমতা প্রভাব হ্রাস করতে, অনেক অ্যাপ্লিকেশন এখনও অ্যাসিনক্রোনাস রাইটিং ব্যবহার করে তবে শেষ পর্যন্ত সেগুলি সিঙ্ক করে যখন ব্যবহারকারী স্পষ্টভাবে একটি ফাইল সংরক্ষণ করে (যেমন, ভিআইএম, ওয়ার্ড প্রসেসর।)

অন্যদিকে, ব্যবহারকারী এবং অ্যাপ্লিকেশনগুলির একটি বিশাল সংখ্যাগুরু সিঙ্ক্রোনাস রাইটগুলি সরবরাহ করে এমন সুরক্ষার প্রয়োজন হয় না বা যত্ন নেয় না। যদি কোনও ক্রাশ বা বিদ্যুৎ বিভ্রাট থাকে তবে একমাত্র ঝুঁকিটি প্রায়শই শেষ 30 সেকেন্ডের ডেটাতে সবচেয়ে খারাপ হয়ে যায়। যদি কোনও আর্থিক লেনদেন জড়িত না থাকে বা এর অনুরূপ অন্য কিছু যা তাদের সময়ের ৩০ সেকেন্ডের চেয়ে অনেক বেশি ব্যয় বোঝায়, পারফরম্যান্সে বিশাল লাভ (যা একটি মায়া নয় তবে খুব বাস্তব) অ্যাসিঙ্ক্রোনাস রাইটিং মূলত ঝুঁকিকে ছাড়িয়ে যায়।

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


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

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

1
@ স্টেভ জেসোপ আমি আপনার উদাহরণের সাথে একমত, তবে আমি আশা করি না যে কোনও নৈমিত্তিক ব্যবহারকারী ম্যানুয়ালি সিঙ্ক করবেন। ডকুমেন্টটি সংরক্ষণ করার সময় সম্পাদক যদি মূল্যবান উপন্যাসটি লেখেন তবে fsync বা অনুরূপ কল না করে, এটি একটি বাগ ঠিক করা হবে, যেমন: bugs.launchpad.net/ubuntu/+source/libreoffice/+bug/817326 । আমি আমার লেখার জন্য vi (vim) ব্যবহার করব, vim ডিফল্টরূপে সেভ করার সময় fsync কল করে।
jlliagre

59

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

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

আইও ত্রুটির কারণে লেখার ব্যর্থতা হওয়ার কোন আশঙ্কা নেই?

ওহ, একেবারে এই জাতীয় ক্ষেত্রে, সাধারণত পুরো ফাইল সিস্টেমটি কেবল পঠনযোগ্য মোডে চলে যায় এবং সমস্ত কিছুই ভয়ঙ্কর। তবে এটি খুব কমই ঘটে, সাধারণভাবে পারফরম্যান্সের সুবিধাগুলি হারাতে কোনও লাভ হয় না।


কিছু এইচডিডি কন্ট্রোলারের ব্যাটারি ব্যাকআপ থাকে তাই বিদ্যুৎ ব্যর্থতার ঘটনায় বিদ্যুতের পুনরুদ্ধার না হওয়া অবধি নিয়ামকটিতে অননুমোদিত ডেটা সংরক্ষণ করা হয়। এটি ডাটাবেস অ্যাপ্লিকেশনগুলিতে ব্যবহারের অনুমতি দেয় যেখানে ডেটা হারানো কোনও বিকল্প নয়।
স্ট্রেটটন

লিনাক্স এখনও র‌্যামে লেখা নেই, এইচডিডি নয় data এইচডিডি এর নিজস্ব ক্যাশেও রয়েছে।
বড়ফু আলবিনো

প্রক্রিয়াটি বন্ধ হয়ে গেলে কোনও প্রক্রিয়া দ্বারা খোলা কোনও ফাইল সিঙ্ক করা হবে এটি বেশ সুবিধাজনক হবে। এটি প্রক্রিয়াটি নিজেই প্রভাব ফেলবে না, তবে এটি শেল স্ক্রিপ্টগুলি এবং এর মতো (যা এখন একটি সম্পূর্ণ ফাইল
সিস্টেমকে

14
এটি একটি মায়া চেয়ে বেশি। অ্যাসিনক্রোনাস রাইটিংগুলি অ্যাপ্লিকেশনগুলির সামগ্রিক কর্মক্ষমতা উন্নত করে।
jlliagre

4
@ ফ্রস্টসচুটজ: কেবলমাত্র অস্থায়ীভাবে বিদ্যমান ফাইলগুলির বাইরে, এমন কিছু বিষয়ও রয়েছে যে ফাইলগুলির কিছু ক্ষেত্র পুনরায় লিখিত হয়ে যায়।
ম্যাথিউ এম।

26

লিনাক্সের আগে এবং ইউনিক্সের আগেও অ্যাসিঙ্ক্রোনাস, বাফারযুক্ত আই / ও ব্যবহার ছিল। ইউনিক্সের এটি ছিল এবং এর সমস্ত অফশুট রয়েছে।

রিচি এবং থম্পসন তাদের সিএসিএম পেপার দ্য ইউনিক্স সময়-ভাগ করে নেওয়ার পদ্ধতিতে যা লিখেছেন তা এখানে :

ব্যবহারকারীর কাছে ফাইলের পড়া এবং লেখা উভয়ই সমকালীন এবং উদ্বেগজনক বলে মনে হয়। এটি একটি রিড কল ​​থেকে ফিরিয়ে দেওয়ার সাথে সাথেই ডেটা পাওয়া যায় এবং বিপরীতভাবে কোনও লেখার পরে ব্যবহারকারীর কর্মক্ষেত্র পুনরায় ব্যবহার করা যেতে পারে। প্রকৃতপক্ষে সিস্টেমটি একটি জটিল জটিল বাফারিং ব্যবস্থা বজায় রাখে যা কোনও ফাইল অ্যাক্সেসের জন্য প্রয়োজনীয় I / O ক্রিয়াকলাপকে অনেক হ্রাস করে।


আপনার প্রশ্নে, আপনি আরও লিখেছেন:

আইও ত্রুটির কারণে লেখার ব্যর্থতা হওয়ার কোন আশঙ্কা নেই?

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

বিএসডি fsyncসিস্টেম কলটি যুক্ত করেছে যাতে একটি প্রোগ্রাম নিশ্চিত হতে পারে যে এর ফাইল ডেটা পুরোপুরি এগিয়ে যাওয়ার আগে ডিস্কে পুরোপুরি লেখা হয়েছিল এবং পরবর্তী ইউনিক্স সিস্টেমগুলি সিঙ্ক্রোনাস রাইটিং করার বিকল্প সরবরাহ করেছে। conv=fsyncকমান্ডটি প্রস্থান করার আগে সমস্ত তথ্য লিখিত আছে কিনা তা নিশ্চিত করার জন্য GNU dd এর বিকল্প রয়েছে। অপসারণযোগ্য ফ্ল্যাশ ড্রাইভগুলিতে ধীরগতিতে লেখার সময় এটি কার্যকর হয়, যেখানে বাফার ডেটা লিখতে কয়েক মিনিট সময় নিতে পারে।

ফাইল দুর্নীতির অন্য উত্স হ'ল হঠাৎ সিস্টেম বন্ধ, উদাহরণস্বরূপ শক্তি হ্রাস থেকে loss কার্যত সমস্ত বর্তমান সিস্টেমগুলি তাদের ফাইল সিস্টেমে একটি পরিষ্কার / ময়লা পতাকা সমর্থন করে । আর কোনও ডেটা লেখার দরকার নেই এবং ফাইল সিস্টেমটি আনমাউন্ট হতে চলেছে, সাধারণত সিস্টেম বন্ধ করার সময় বা ম্যানুয়ালি কল করে পতাকাটি পরিষ্কার করতে সেট করা হয় umount। সিস্টেমগুলি সাধারণত fsckপুনরায় বুট হবে যখন তারা সনাক্ত করে যে ফাইল সিস্টেমগুলি পরিষ্কারভাবে বন্ধ করা হয়নি।


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

ভাল যুক্তি. আমি আমার উত্তরটি পরিবর্তন করব।
প্লটনিক 18

15

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

পরিবর্তে, লেখার জন্য অপেক্ষা করা ফাইলগুলি কিছুক্ষণের জন্য মেমোরিতে রাখা হয়েছিল এবং ডিস্কের যেখানে শেষ হওয়া উচিত তার পরে বাছাই করা হয়েছিল ... এবং যখন বাফারটি পূর্ণ ছিল - বা ডিস্ক-সিঙ্ক ডিমনটির জন্য অপেক্ষা করেছিল সেকেন্ডের প্রয়োজনীয় সংখ্যা (আমার মনে হয় এটি প্রায় 30 সেকেন্ডের ছিল) - পুরো বাফারটি ডিস্কে "ক্রম" দিয়ে লেখা হয়েছিল, লেখার মাথাটি কেবল একটি ক্রমাগত ঝুলন্ত গতি করতে হত, ডিস্কে ফাইলগুলি লিখেছিল এটি গিয়েছিল ... পুরো জায়গা জুড়ে লাফানোর পরিবর্তে।

আজকের দ্রুত ডিস্কগুলির সাথে উত্সের - সলিড-স্টেট ডিভাইসগুলির উল্লেখ না করা - লাভটি অনেক কম ... বিশেষত একটি হোম লিনাক্স-সিস্টেমে, যেখানে কেবলমাত্র একমাত্র ব্যবহারকারী কেবলমাত্র কয়েকটি প্রোগ্রামের সাথে কাজ করে।

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


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

13

এটি লিনাক্সের সাথে সুনির্দিষ্ট নয় এবং একে পৃষ্ঠা ক্যাশে বলা হয় (যা লিনাক্স বেশ ভালভাবে কাজ করে)। Http://linuxatemyram.com/ এও দেখুন ; সুতরাং যদি কোনও ফাইল লিখিত হয়, তবে কয়েক সেকেন্ড পরে আবার পড়ুন, খুব প্রায়ই কোনও ডিস্ক আই / ও প্রয়োজন হয় না।

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

অ্যাপ্লিকেশন কোড এই ক্যাচিং সম্পর্কিত ইঙ্গিত দিতে পারে: উদাহরণস্বরূপ পিক্সিক্স_ফ্যাডভিস (2) এবং ম্যাডভিজ (2) দেখুন


8

স্পিনিং প্ল্যাটারগুলি রামের চেয়ে ধীর। আমরা এই সত্যটি 'লুকিয়ে রাখতে' পাঠকদের / লেখার ক্যাশে ব্যবহার করি।

আইও লেখার বিষয়ে দরকারী জিনিসটি হ'ল এটির সাথে সাথে ডিস্ক আইও হওয়া দরকার না - একটি পঠনের বিপরীতে, যেখানে আপনি ডিস্কে রিড সম্পূর্ণ না হওয়া পর্যন্ত আপনি ব্যবহারকারীকে ডেটা ফিরিয়ে দিতে পারবেন না।

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

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

একটি RAID 6 উদাহরণস্বরূপ, একটি লেখার সম্পূর্ণ করতে IO অবশ্যই:

  • আপডেট ব্লক পড়ুন
  • সমতা 1 পড়ুন
  • সমতা 2 পড়ুন
  • নতুন ব্লক লিখুন
  • সমতা লিখুন 1
  • সমতা লিখুন 2

সুতরাং প্রতিটি লেখাই আসলে 6 আইও অপারেশন হয় - এবং বিশেষত যখন আপনি বড় SATA ড্রাইভের মতো ধীর ডিস্ক পেয়ে থাকেন, এটি অত্যন্ত ব্যয়বহুল হয়।

তবে একটি দুর্দান্ত সহজ সমাধান রয়েছে - কোয়েলেসিং লিখুন। আপনি যদি একটি বাফারে একটি 'সম্পূর্ণ স্ট্রিপ' রচনা তৈরি করতে পারেন তবে আপনার ডিস্ক থেকে সমতা পড়ার দরকার নেই - আপনি যা স্মৃতিতে রেখেছেন তার উপর ভিত্তি করে আপনি এটি গুণতে পারেন।

এটি করা খুব আকাঙ্ক্ষিত, কারণ এরপরে আপনার আর লেখার প্রবন্ধ নেই। আসলে, আপনি RAID 1 + 0 এর চেয়ে কম লেখার জরিমানা দিয়ে শেষ করতে পারেন।

বিবেচনা:

RAID 6, 8 + 2 - 10 স্পিন্ডল।

লিখতে টানা 8 ডেটা ব্লক - ক্যাশে সামান্য গণনা করুন এবং প্রতিটি ডিস্কে একটি করে ব্লক লিখুন। প্রতি 8 প্রতি 10 লেখেন, তার অর্থ 1.25 এর লিখিত জরিমানা। RAID 1 + 0 এর 10 ডিস্কের এখনও 2 টির রাইটিং পেনাল্টি রয়েছে (কারণ আপনাকে প্রতিটি সাবমেরির কাছে লিখতে হবে)। সুতরাং এই পরিস্থিতিতে, আপনি আসলে RAID 6 RAID1 + 0 এর চেয়ে আরও ভাল পারফর্ম করতে পারেন। বাস্তব বিশ্বের ব্যবহারে আপনি যদিও মিশ্র আইও প্রোফাইলের কিছুটা বেশি পান।

সুতরাং লেখার ক্যাচিং RAID সেটগুলির উপলব্ধ পারফরম্যান্সে একটি বিশাল পার্থক্য তৈরি করে - আপনি র‍্যাম গতিতে লিখতে এবং কম লেখার শাস্তি পেতে পারেন - যদি আপনি এটি করেন তবে আপনার টেকসই থ্রুপুটটি উন্নত করে।

এবং যদি আপনি এটি না করেন তবে আপনি Sata এর অবিচ্ছিন্ন ধীর পারফরম্যান্সের শিকার হন, তবে এটি 6 দিয়ে গুণ করুন এবং সেখানে কিছু যুক্তি যুক্ত করুন। লেখার ক্যাচিং ছাড়াই আপনার 10 টি উপা সাটা রেড -6 RAID ছাড়া একটি ড্রাইভের চেয়ে কিছুটা দ্রুত হবে ... তবে খুব বেশি নয়।

আপনি যদিও ঝুঁকি নিচ্ছেন - যেমনটি আপনি নোট করেছেন - শক্তি হ্রাস মানে ডেটা হ্রাস। আপনি ক্যাশে ফ্লাশিং চক্র, ব্যাটারি আপনার ক্যাশে সমর্থন করে বা এসএসডি বা অন্যান্য অ-উদ্বায়ী ক্যাশে ব্যবহার করে এটিকে প্রশমিত করতে পারেন।


7

অন্যান্য উত্তরের কোনওটিই বিলম্ব বরাদ্দের উল্লেখ করেনি । এক্সএফএস, এক্সট 4, বিটিআরএফএস এবং জেডএফএস সকলেই এটি ব্যবহার করে। এক্সএফএস এক্সট 4 বিদ্যমান থাকার আগে থেকেই এটি ব্যবহার করে আসছে, তাই আমি এটি উদাহরণ হিসাবে ব্যবহার করব:

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


4

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


4
লিনাক্স ব্লক ডিভাইসগুলি ডিফল্টরূপে পৃষ্ঠা ক্যাশে পড়তে / লেখার জন্য। আপনি O_DIRECTক্যাশে বাইপাস করতে চাইলে আপনাকে ব্যবহার করতে হবে । dd oflag=direct। আইআইআরসি, ব্লক ডিভাইসগুলিতে আই / ওকে নির্দেশিত করতে কিছু ইউনিকস ডিফল্ট। (এবং প্রান্তিকীকৃত ব্লকগুলি পড়ার / লেখার প্রয়োজন যা লিনাক্সের জন্য নেই কারণ এটি কেবল পেজক্যাচ লেখার দরকার নেই))
পিটার কর্ডেস

3

দর্শনটি ডিফল্ট অনিরাপদ।

দুটি যুক্তিসঙ্গত এবং সুস্পষ্ট কৌশল সম্ভব: ফ্লাশ ফ্লাইট ডিস্কে অবিলম্বে লিখতে বা লিখতে দেরি করে। ইউএনআইএক্স historতিহাসিকভাবে পরেরটি বেছে নিয়েছে। সুতরাং সুরক্ষা পান, আপনার fsyncপরে কল করা দরকার ।

যাইহোক, আপনি বিকল্প সহ কোনও ডিভাইস মাউন্ট করে syncবা প্রতি-ফাইল এগুলি দিয়ে খোলার মাধ্যমে সুরক্ষা শীর্ষে উল্লেখ করতে পারেন O_SYNC

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


6
অ্যাপ্লিকেশন এবং ব্যবহারকারীদের একটি খুব বড় সংখ্যাগরিষ্ঠ সিঙ্ক্রোনাস লেখক যে সুরক্ষা সরবরাহ করবে তা প্রয়োজন বা যত্নের প্রয়োজন নেই। যদি কোনও ক্রাশ বা বিদ্যুৎ বিভ্রাট ঘটে থাকে তবে আপনি শেষ 30 সেকেন্ডের ডেটা অবধি ঝুঁকিতে ফেলবেন। এটি বেশিরভাগ লোকের সাথে ঠিক আছে যদি না কোনও আর্থিক লেনদেন জড়িত থাকে বা এরকম কিছু হয় যার জন্য আমাদের সময়ের 30 সেকেন্ডেরও বেশি দাম পড়বে। সিঙ্ক্রোনাস আই / ওসে ডিফল্ট করা সমস্ত অ্যাপ্লিকেশনকে বোঝায় যেগুলি O_NOSYNC সংজ্ঞায়িত করার জন্য ব্যবহারযোগ্যতার লক্ষ্য করে।
jlliagre

2

এটি থ্রুপুটটিতে দুর্দান্ত বৃদ্ধির জন্য স্বল্প পরিমাণে নির্ভরযোগ্যতার বাণিজ্য করে।

ধরুন, উদাহরণস্বরূপ, একটি ভিডিও কমপ্রেসিং প্রোগ্রাম। বিলম্বিত লেখার সাথে ("ফিরে লিখুন"):

  1. 10 মিমি সংক্ষেপিত ফ্রেম ব্যয় করুন
  2. ডিস্কে লেখার ফ্রেম ইস্যু করুন
  3. সম্পূর্ণ ডিস্কের স্বীকৃতি জানাতে 10 মিমি অপেক্ষা করুন
  4. যান 1

বনাম

  1. 10 মিমি সংক্ষেপিত ফ্রেম ব্যয় করুন
  2. ডিস্কে রাইটিং ফ্রেম ইস্যু করুন (পটভূমিতে সম্পূর্ণ)
  3. যান 1

দ্বিতীয় সংস্করণটি দ্বিগুণ দ্রুত উপস্থিত হবে কারণ এটি একই সাথে সিপিইউ এবং ডিস্ক ব্যবহার করতে পারে, যখন প্রথম সংস্করণটি সর্বদা একটি বা অন্যটির জন্য অপেক্ষা করে।

সাধারণত আপনি স্ট্রিমিং অপারেশন এবং বাল্ক ফাইল অপারেশনগুলির জন্য লিখন-ব্যাক এবং ডেটাবেস এবং ডাটাবেস-এর মতো অ্যাপ্লিকেশনগুলির জন্য লেখার মাধ্যমে যেতে চান।


1

অনেক অ্যাপ্লিকেশনগুলিতে স্টোরেজ ডিভাইসগুলি মাঝেমধ্যে ডেটা পড়তে ব্যস্ত থাকবে। স্টোরেজ ডিভাইস ডেটা পড়তে ব্যস্ত না হওয়া পর্যন্ত কোনও সিস্টেম যদি সর্বদা লেখার পিছনে পিছনে রাখতে সক্ষম হয়, তবে কোনও অ্যাপ্লিকেশনের দৃষ্টিকোণ থেকে লেখাগুলি সম্পূর্ণ করতে শূন্য সময় নেয়। একমাত্র পরিস্থিতি যেখানে লেখাগুলি তাত্ক্ষণিক হবে না যখন হতে পারে:

  1. লেখার বাফারগুলি এমন বিন্দুতে পূরণ করুন যে লেখাগুলি আসলে সম্পূর্ণ না হওয়া পর্যন্ত আর কোনও পিছনে-লিখিত অনুরোধ গ্রহণ করা যাবে না।

  2. যে ডিভাইসের জন্য লেখাগুলি মুলতুবি রয়েছে সেই ডিভাইসটি বন্ধ বা মুছে ফেলা প্রয়োজন necessary

  3. একটি অ্যাপ্লিকেশন বিশেষত নিশ্চিতভাবে অনুরোধ করে যে কোনও লেখা আসলেই শেষ হয়েছে requests

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


0

এটিও রয়েছে:

"হাই, জো মো" লিখুন এর
চেয়ে দ্রুত:
"হাই
লিখুন ," লিখুন "জো"
লিখুন "মো"

এবং আরো:

"হাই, কেমন আছেন?" লিখুন
এর থেকে দ্রুত:
"হাই, কী হয়েছে?" লিখুন
এই
লেখাটি মুছুন "কেমন আছেন, কেমন আছেন?"
এই লেখাটি মুছুন
"হাই, কেমন আছেন?"

ডিস্কের চেয়ে র‌্যামে পরিবর্তন এবং সংহতকরণের জন্য এটি ভাল। ব্যাচিং ডিস্ক অ্যাপ্লিকেশন বিকাশকারীদের এই জাতীয় উদ্বেগ থেকে মুক্তি দেয়।

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