স্থানীয় ডিস্ক রিডের সাথে একই সাথে লিনাক্সকে নেটওয়ার্ক ফাইল সিস্টেমে লেখার ব্যবস্থা করুন


17

সারসংক্ষেপ

আপনি কীভাবে স্থানীয় ডিস্ক / ফাইল সিস্টেম থেকে লিনাক্স উভয়কে কনফিগার করতে পারেন এবং একই সাথে কোনও নেটওয়ার্ক শেয়ারে লিখতে পারেন, কোনও তথ্য নেটওয়ার্কের উপরে না যাওয়ার সময় পড়ার বিপরীতে, তারপরে লোকাল ডিস্ক থাকা অবস্থায় নেটওয়ার্কের মাধ্যমে সেই ডেটা প্রেরণ করা যায় অলস?

কেবলমাত্র একটি অপারেশন এবং তারপরে অন্যটি বিকল্প পদ্ধতিতে সঞ্চালনের পরিবর্তে একই সাথে পড়া এবং লেখা আরও দ্রুত।

বিস্তারিত

আমি একটি লিনাক্স মেশিনে স্থানীয় ডিস্ক থেকে প্রচুর পরিমাণে ডেটা নাস ডিভাইসে স্থানান্তরিত করছি।

আমি ব্যবহার করছি rsyncমূলত কপি করতে /srv/dataবা /mnt/nas, যা CIFS mount- র।

এটি শুরু হয়েছিল 100MB / সেকেন্ডে পড়া এবং 100MB / সেকেন্ডে নাসকে লেখা (গিগাবিট নেটওয়ার্কের সীমা), একই সাথে পড়া এবং লেখা উভয়ই শুরু হয়েছিল।

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

বলা বাহুল্য, 200MB পড়ার পরে 200MB লেখা পড়া এবং একই সাথে 200MB লেখার চেয়ে অনেক বেশি সময় নেয়।

আমি কীভাবে কার্নেলটি এমনভাবে কনফিগার করতে পারি যে এটি একই সাথে পড়া এবং লেখার পূর্বের আচরণের সাথে লেগে যায়, একসাথে কেবলমাত্র একটি ক্রিয়াকলাপ সম্পাদন করার পরে পরিবর্তনের পরিবর্তে?

কিছু পর্যবেক্ষণ: যখন স্থানীয় ডিস্কটি 100 + এমবি / সেকেন্ডে সমস্ত কিছু সমান্তরালভাবে ঘটেছিল ঠিক তখনই মনে হয়, তবে একবারে ডিস্কটি ধীর হয়ে যায় (কোনও কারণে এখন কেবলমাত্র 20MB / সেকেন্ডে যাচ্ছে বলে মনে হচ্ছে) তখনই এই পড়ুন / লেখেন স্যুইচিং হ'ল মনে হচ্ছে।

আমি syncপ্রতি কয়েক সেকেন্ডে ম্যানুয়ালি দৌড়াতে পারি যে লেখাগুলি পঠনের সমান্তরালভাবে ঘটতে পারে (যদিও স্পষ্টতই হ্রাসের গতিতে) তবে syncএকটি whileলুপ রেখে যাতে এটি প্রতি পাঁচ সেকেন্ডে চলে তবে সঠিক সমাধানটির মতো মনে হয় না ...

কার্নেলটি প্রায় 1 গিগাবাইট ডেটা ক্যাশে করছে এবং তারপরে এটি যত তাড়াতাড়ি সম্ভব নেটওয়ার্কে লিখে ফেলতে পারে - যা ভাল - আমি কেবল বুঝতে পারছি না যে ডেটা পাঠানোর সময় স্লো ডিস্কটি পড়া বন্ধ করা দরকার কেন? অন্তর্জাল.


1
বেশিরভাগ ইউনিক্স সরঞ্জামগুলি এই অর্থে ব্যান্ডউইথের জন্য একেবারে অনুকূল নয়, আরএসসিএন নয়, একটি সাধারণ সিপিও নয়। তারা ব্লকিং আইও ব্যবহার করে একক থ্রেডযুক্ত অ্যাপ্লিকেশন।
পিটারহ - মনিকা

1
প্রায় কোথাও প্রায় 100 এমবি / সেগুলি আপনি খাঁটি অনুক্রমিক কাজের চাপে আধুনিক সাধারণ 7200 আরপিএম ঘূর্ণমান এইচডিডি দেখতে আশা করতে পারেন। আপনি অনুসন্ধান শুরু করার পরে এটি নেমে যায়, যেমন মেটাডেটা আপডেট করার জন্য বা যদি ফাইল সিস্টেমটি খণ্ডিত হয়, কারণ আপনি তখন আইওপিএস-আবদ্ধ হয়ে যান।
একটি সিভিএন

আপনি এনএএস এ আরএসএনসি ইনস্টল করতে পারবেন?
জেসেন

উত্তর:


27

আরও কিছু তদন্তের পরে, দেখে মনে হচ্ছে এই সমস্যাটি কম কার্নেল সম্পর্কিত এবং কীভাবে rsyncএবং সিআইএফএসের ইন্টারঅ্যাক্ট হয় সে সম্পর্কে আরও বেশি ।

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

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

এই প্রয়োজনীয়তার অর্থ হ'ল প্রতিবার rsyncকোনও ফাইল অনুলিপি করা শেষ করার rsyncপরে, পরবর্তী ফাইলটি পড়া চালিয়ে যাওয়ার অনুমতি দেওয়ার আগে পুরো ডিস্ক বাফারটি অবশ্যই নেটওয়ার্কের বাইরে খালি হয়ে যেতে হবে।

একটি কার্যপ্রণালী হ'ল cache=noneএই বৈশিষ্ট্যটি অক্ষম করে এমন বিকল্পের সাথে সিআইএফএস ভাগ করে নেওয়া , এবং সমস্ত আই / ও সার্ভারে সরাসরি যেতে দেয়। এটি সমস্যাটি দূর করে এবং সমান্তরালভাবে সম্পাদন করতে পঠন এবং লেখার অনুমতি দেয়, তবে এই সমাধানের একটি অসুবিধা হল পারফরম্যান্স কিছুটা কম। আমার ক্ষেত্রে, নেটওয়ার্ক ট্রান্সফার গতি 110MB / সেকেন্ড থেকে 80MB / সেকেন্ডে নেমে যায়।

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

এটির rsyncঅন্য থ্রেডে ফাইল হ্যান্ডলগুলি বন্ধ করার জন্য একটি বিকল্পের প্রয়োজন বলে মনে হচ্ছে , যাতে এটি শেষ ফাইলটি ফ্লাশ করার সময় পরবর্তী ফাইলটি পড়া শুরু করতে পারে।

সম্পাদনা: আমি নিশ্চিত করেছি যে cache=noneপ্রচুর ছোট ফাইল স্থানান্তরিত করার সময় অবশ্যই এটি সহায়তা করে (এটি 10MB / সেকেন্ড থেকে 80MB / সেকেন্ড পর্যন্ত নিয়ে আসে) তবে বড় ফাইলগুলি (1GB +) cache=noneস্থানান্তর করার সময় 110MB / সেকেন্ড থেকে একই 80MB / সেকেন্ডে স্থানান্তর হ্রাস করে। এটি সুপারিশ করে যে অনেকগুলি ছোট ফাইল থেকে ধীরে ধীরে স্থানান্তরটি উত্স ডিস্ক অনুসন্ধানের বিষয়ে কম, এবং সমস্ত ছোট ফাইল থেকে এতগুলি ক্যাশে ফ্লাশ হয় more


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

1
আমি কল্পনা করব যে আর একটি সমাধান আপনি rsyncএনএএস এ চালাতে পারবেন না এটি হ'ল rsyncনেটওয়ার্কের মাধ্যমে ব্যবহার করা (যেমন rsync -a files localhost:/dest/path) কোনওভাবে কৃত্রিমভাবে নেটওয়ার্ক সংযোগগুলির মধ্যে একটি বিশাল বাফার (যেমন, মাল্টিপল মেগাবাইট অন্তত) প্রবর্তন করার সময়। এটি করার জন্য সেরা হ্যাকটি দেখতে কেমন তা নিশ্চিত।
সেলেডা

@ কেলাডা: ধন্যবাদ! হ্যাঁ আমি কল্পনা করি যে rsyncএনএএস বক্সে চালানো নিজেই বিষয়টি নিয়ে কাজ করবে। বিট আরও জটিল হলেও (অদ্ভুত এনএএস অনুমতি, সিমলিংকগুলি বাদ দিতে হবে ইত্যাদি) তবে আমার যদি অনুলিপি করার জন্য আরও কিছু ডেটা থাকে তবে এটি আমার মনে হয় এমন সময় বিনিয়োগের পক্ষে মূল্যবান হবে।
মালভাইনাস

2
সম্ভবত আপনার ক্ষেত্রে সম্পর্কিত নয়: কয়েক বছর আগে dump(8)এনএফএসের উপরে আরোপিত একটি এনএএস- এর আউটপুট লিখতে আমারও একই সমস্যা হয়েছিল। এনএফএস সার্ভারের সম্মিলিত প্রভাব এবং এনএএস-এ চলমান ফায়ারওয়ালের কারণে (বাকীটি মূলোড়িত ছিল না এবং ফায়ারওয়ালটি সম্পূর্ণরূপে অক্ষম করা যায়নি) এই সময়ে আমি সমস্যাটি এনএএস-তে সিপিইউ বাড়িয়ে দেওয়ার হিসাবে চিহ্নিত করেছি the ওয়েব ইন্টারফেস)। আমরা যখন পুরানো পিসি দিয়ে এনএএস প্রতিস্থাপন করেছি তখন সমস্যাটি চলে গেল। FWIW।
স্যাট কাটসুরা

@ স্যাটোক্যাটসুরা: পুরানো এনএএস ডিভাইসগুলির জন্য অবশ্যই একটি সম্ভাবনা, যদিও আমি ধারণা করি যে আপনি এই ধরণের ফেটে যাওয়ার চেয়ে ধীরে ধীরে সামগ্রিক স্থানান্তর দেখতে পাবেন? আমার এনএএস হ'ল একটি দ্বৈত-কোর পরমাণু (G 2GHz) যা প্রায় 30% সিপিইউ ব্যবহার করে যখন একটি গিগাবিট এনআইসিকে জাম্বো ফ্রেম ছাড়াই সর্বাধিক সীমাবদ্ধ করা হয় তাই ঠিক আছে।
মালভাইনাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.