"ডিভাইসে উইন্ডোজ রাইটিং-ক্যাশে বাফার ফ্লাশিং বন্ধ করুন" এর পুরো ফাংশন এবং প্রভাবটি কী?


11

উইন্ডোজ In-এ, ডিভাইস ম্যানেজারটি ব্যবহার করে কোনও ডিস্কের বৈশিষ্ট্য উপস্থিত করা এবং পলিসি ট্যাবে যেতে 2 টি স্যুইচ আইটেম রয়েছে। লেখার ক্যাশে, যা এটি নিয়ে প্রশ্ন নয়।

এবং

[এক্স] ডিভাইসে উইন্ডোজ রাইটিং-ক্যাশে বাফার ফ্লাশিং বন্ধ করুন <--- এটি কেবলমাত্র!

মাইক্রোসফ্ট সেই আইটেমটির জন্য ট্যাবে একটি দাবি অস্বীকার করে। "ডেটা ক্ষতি রোধ করতে, ডিভাইসের একটি পৃথক পাওয়ার সাপ্লাই না থাকলে এই চেকবক্সটি নির্বাচন করবেন না যা পাওয়ার ক্ষতির ক্ষেত্রে ডিভাইসটিকে তার বাফারটি ফ্লাশ করতে দেয়।"

সরল কথায়, ফাইল রাইটিং, ফাইল সেভিং, ফাইল অনুলিপি করার জন্য এই কী পরিবর্তন হয়?

1. অদ্ভুত প্রোগ্রামগুলির জন্য লেখার ক্রিয়াগুলি পরিবর্তন করা: (ঘটনা বা কথাসাহিত্য)
এটি কী এমন প্রোগ্রামের জন্য ফ্লাশ লেখার কাজকে বদলে দেয় যা ক্যাশে ফ্লাশ হতে বাধ্য করে? কিছু প্রোগ্রাম লিখিত সমাপ্তির বিষয়ে খুব অনুপ্রেরণা করে, অনুমান করেই না, এই প্রোগ্রামগুলি কি তাদের প্রতিরক্ষামূলক লেখা চালিয়ে যেতে সক্ষম হয়, বা এই প্রোগ্রামগুলির জন্যও এই পরিবর্তন হয়?

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

৩. আপনি কি কিছু দেখেন, বা এমনকি একটি মানদণ্ডও:
সেটিংটি চালু থাকলে, লেখায় পর্যবেক্ষণযোগ্য পরিবর্তনগুলি কী কী? আচরণে পর্যবেক্ষিত পরিবর্তনের কোনও আলগা উদাহরণ। বা আচরণে কোন পরিবর্তন লক্ষ্য করা যায়?

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

আমার প্রশ্নের উদ্দেশ্যগুলির জন্য, যে ঝুঁকিটি বিদ্যমান তা প্রশ্নগুলির মধ্যে একটি নয়, আপনি যদি এটি আবরণ করতে চান তবে এটি উপায় হিসাবে পাবেন না।

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



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

উত্তর:


9
  1. প্রথম প্রশ্নে আপনার দাবী কথাসাহিত্য is উইন্ডোজ এপিআই কল যেমন এখনও লিখিত বাফার ফ্লাশিং অক্ষম করেও দৈহিক মিডিয়ায় ডেটা পৌঁছে দেয় তা নিশ্চিত করবে gets সুতরাং, যে প্রোগ্রামগুলি "নিরাপদ" এবং তারা কী করছে তা জেনে রাখা ঠিক আছে। .NET ইত্যাদির মতো কলগুলি শেষ পর্যন্ত এই API এ কল করে।FlushFileBuffers() FileStream.Flush()

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

  3. কোনও মানদণ্ড খুঁজে পাওয়া যায় না, তবে উপরের দ্বিতীয় আইটেমের বর্ণনার সাথে মানানসই প্রোগ্রামগুলির সাথে আপনি এটি আরও লক্ষ্য করবেন।

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

নিম্নলিখিত সিউডোকোড বিবেচনা করুন:

1: seek to a certain block (1)
2: write a couple megabytes of data into blocks starting at (1)
3: wait 2 seconds
4: seek to another block (2)
5: write some more megabytes of data into blocks starting at (2)
6: seek back to block (1)
7: write some more megabytes of data into blocks starting at (1)
8: wait 10 minutes
9: seek to block (1)
10: write some megabytes of data into blocks starting at (1)
11: wait 5 seconds
12: seek to block (2)
13: write some megabytes of data into blocks starting at (2)
14: explicit call to FlushFileBuffers()

সঙ্গে অনিদ্রা বাফার স্বয়ংক্রিয় 5 দ্বিতীয় উপর :

  • লিখেছেন লাইন 2, 5 ঘটছে এবং 7 ঘটতে RAM- র মধ্যে এবং ডিস্কে সরানো না, যে পর্যন্ত 5 সেকেন্ড প্রথম লেখার থেকে অতিবাহিত করেছি এবং তারপর (লাইন 7 থেকে) সর্বশেষ তথ্য ব্লক (1) মধ্যে লিখিত পরার এবং শুধুমাত্র ব্লক (2) এ লিখিত তথ্য লিখিত হয়।
  • 10 এবং 13 লাইনগুলিতে লেখা লেখাগুলি, যা ব্লক (1) এবং (2) এর ডেটা ওভাররাইট করে, আবার ডিস্কে লিখিত লিখতে হয়
  • সুতরাং যে ব্লক (1) র‍্যামে রচনাটি লিখিত হয়েছে তার মোট সংখ্যা 3, এবং ডিস্কে , 2। যে ব্লকটি (2) র‍্যামে লিখিত হয়েছে তার মোট সংখ্যা 2, এবং ডিস্কে , 2।

স্বয়ংক্রিয়ভাবে 5 সেকেন্ড বাফার ফ্লাশিং বন্ধ (আপনার প্রশ্নের চেকবক্সটির প্রভাব):

  • 2, 5, 7, 10 এবং 13 লাইনগুলিতে রাইটগুলি র‍্যামে ঘটে এবং ডিস্কটি সরে না, যতক্ষণ না লাইন 14 সম্পাদিত হয়, এবং তারপরে সর্বশেষ তথ্য (10 এবং 13 লাইন থেকে) ব্লকে লেখা হয় (1) এবং (2)। 2, 5 এবং 7 লাইন থেকে পুরানো ডেটা কখনও হার্ডডিস্কে আঘাত করে না!

একটি ব্যস্ত সিস্টেম প্রতি সেকেন্ডে কয়েক হাজার থেকে কয়েক হাজার লেখার জন্য ফাইলগুলিতে অভিজ্ঞতা নিতে পারে তা বিবেচনা করে, এটি পারফরম্যান্সের জন্য দুর্দান্ত, বিশেষত traditionalতিহ্যবাহী স্পিনিং হার্ড ড্রাইভে (এটি এসএসডিগুলিতে কম প্রভাবশালী)। সাধারণ পরিমাপ হিসাবে হার্ড ড্রাইভের চেয়ে র‌্যাম 20 গুণ বেশি গতিযুক্ত, যদিও এসএসডি সহ এই ব্যবধানটি কম।

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


0

চ্যাটবট জন ক্যাভিলের উত্তরের সমর্থনে , আমি একটি ছোট্ট পরীক্ষা প্রোগ্রাম লিখেছি:

// ...
byteEx btTest;
btTest.resize(1024*1024, 0xff); // 1MB data

CSysFile sfTest(byT("test.bin"));

swTest.Start(); // Begin timing by call `QueryPerformanceCounter` API
for (UINT i=0; i<10000; ++i) // Write 1MB data for 10000 times
{
    sfTest.SeekBegin();
    sfTest.Write(btTest); // Call `WriteFile` API 
//  sfTest.Flush();       // Call `FlushFileBuffers` API
}
swTest.Stop(); // Calculate the time-consuming start from `swTest.Start() `
// ...

এবং "ডিভাইসে উইন্ডোজ রাইটিং-ক্যাশে বাফার ফ্লাশিং বন্ধ করুন" বিকল্পটি সক্ষম করে একটি স্যামসাং 950pro NVMe ডিস্কে এটি চালান।

ফলাফল হলো:

D:\tmp> test        // without sfTest.Flush();
00:00:00.729766     // use 0.73 seconds without FlushFileBuffers()

D:\tmp> test        // with sfTest.Flush();
00:00:06.736167     // use 6.74 seconds with FlushFileBuffers()

সুতরাং আপনি দেখতে পাচ্ছেন যে FlushFileBuffersঅনুরোধটি সিস্টেমে বাদ দেওয়া হয়নি (উইন্ডোজ FlushFileBuffersকলগুলি উপেক্ষা করে না বিকল্পগুলি সক্ষম করা সত্ত্বেও)।


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

@ এএসবাই: (১) আমি সি ++ জানি (আমি মনে করি এটি আপনার প্রোগ্রামে লেখা আছে) তবে আমি উইন্ডোজ এপিআই জানি না। আপনি কি আপনার কোডটি কিছুটা ব্যাখ্যা করতে পারবেন? (বিয়ার মনে রাখবেন যে কিছু ব্যবহারকারীদের সুপার ইউজার এ সব প্রোগ্রামারদের হয় না, কোনটাই ।) বিশেষ করে, কি হয় swTest(এবং কেন এটা ঘোষণা করা হয়)? (২) আপনি কি বলছেন যে আপনি আপনার প্রোগ্রামের দুটি অনুলিপি করেছেন, একটি sfTest.Flush()কল সহ একটি এবং একটি নয় (অর্থাত্, এটির সাথে মন্তব্য করা হয়নি), এবং তাদের তুলনা করলেন? দয়া করে ব্যাখ্যা করুন. (3) আমি ইংরাজী জানি তবে আপনার শেষ বাক্যটি আমি বুঝতে পারি না।
স্কট

@ র‌্যামাউন্ড তবে আমার পক্ষে ভোট দেওয়ার বা মন্তব্য করার মতো যথেষ্ট খ্যাতি নেই, কীভাবে এটি সমাধান করবেন?
এএসবাই

@ স্কট (1), সোয়েস্টেস্ট একটি উচ্চ রেজোলিউশনের টাইমার, এটি টাইমিংয়ের জন্য উইন্ডোজ প্ল্যাটফর্মে কোয়েরি পারফরম্যান্স কাউন্টার এপিআই ব্যবহার করে (আমার মনে হয় এটি কোনও সমালোচনামূলক বিষয় নয় :-)। (২) হ্যাঁ, ঠিক আছে। (3) আমার খারাপ ইংরেজির জন্য দুঃখিত, আমি কেবল এটিই বলতে চাই: চ্যাটবট জন ক্যাভিল ঠিক বলেছেন, উইন্ডোজ FlushFileBuffersঅপশনগুলি সক্ষম করা সত্ত্বেও কলটিকে উপেক্ষা করে না (এই অপশনটি সক্ষম করার পরে কলটি উপেক্ষা করা হবে বলে আমি কিছু অন্যান্য উত্সকে দেখলাম) )। আমি উত্তরে আরও কিছু মন্তব্য যুক্ত করব, ধন্যবাদ :-)
এএসবাই

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