আমি এমন কোনও সমস্যার তদন্ত করছি যেখানে কোনও ব্লক ডিভাইস এনক্রিপ্ট করা যখন এটি লেখার সময় একটি বিশাল পারফরম্যান্স জরিমানা চাপায় । ইন্টারনেট পড়ার ঘন্টা এবং পরীক্ষাগুলি আমাকে যথাযথ বোঝাপড়া দেয়নি, এর সমাধান ছেড়ে দিন।
সংক্ষেপে প্রশ্ন: ব্লক ডিভাইসে (~ 170MB / s) বিআরটিএফ লাগানোর সময় আমি কেন পুরোপুরি দ্রুত লেখার গতি পাই, যখন লেখার গতিটি ডিএম-ক্রিপট / এলইউকেএসের মধ্যে রাখার সময় (M 20MB / s) ডুবে যায়? ফাইল সিস্টেম এবং ব্লক ডিভাইস, যদিও সিস্টেমটি যথেষ্ট উচ্চ এনক্রিপশন মাধ্যমে আউটপুট বজায় রাখতে সক্ষম?
দৃশ্যপট
/home/schlimmchen/random
/dev/urandom
পূর্ববর্তী থেকে ডেটা ভরা একটি 4.0 জিবি ফাইল ।
dd if=/dev/urandom of=/home/schlimmchen/Documents/random bs=1M count=4096
এটি পড়া অত্যন্ত দ্রুত:
$ dd if=/home/schlimmchen/Documents/random of=/dev/null bs=1M
4265841146 bytes (4.3 GB) copied, 6.58036 s, 648 MB/s
$ dd if=/home/schlimmchen/Documents/random of=/dev/null bs=1M
4265841146 bytes (4.3 GB) copied, 0.786102 s, 5.4 GB/s
(দ্বিতীয়বার, ফাইলটি অবশ্যই ক্যাশে থেকে পড়েছিল)।
এনক্রিপ্ট করা বিটিআরএফএস
ডিভাইসটি সরাসরি বিটিআরএফএস (ব্লক ডিভাইসে কোনও বিভাজন সারণী) দিয়ে ফর্ম্যাট করা হয়।
$ sudo mkfs.btrfs /dev/sdf
$ sudo mount /dev/sdf /mnt
$ sudo chmod 777 /mnt
লেখার গতি ~ 170MB / s এর চেয়ে বেশি হয়ে যায়:
$ dd if=/home/schlimmchen/Documents/random of=/mnt/dd-test1 bs=1M conv=fsync
4265841146 bytes (4.3 GB) copied, 27.1564 s, 157 MB/s
$ dd if=/home/schlimmchen/Documents/random of=/mnt/dd-test2 bs=1M conv=fsync
4265841146 bytes (4.3 GB) copied, 25.1882 s, 169 MB/s
$ dd if=/home/schlimmchen/Documents/random of=/mnt/dd-test3 bs=1M conv=fsync
4265841146 bytes (4.3 GB) copied, 29.8419 s, 143 MB/s
পড়ার গতি 200MB / s এর চেয়েও ভাল।
$ dd if=/mnt/dd-test1 of=/dev/null bs=1M
4265841146 bytes (4.3 GB) copied, 19.8265 s, 215 MB/s
$ dd if=/mnt/dd-test2 of=/dev/null bs=1M
4265841146 bytes (4.3 GB) copied, 19.9821 s, 213 MB/s
$ dd if=/mnt/dd-test3 of=/dev/null bs=1M
4265841146 bytes (4.3 GB) copied, 19.8561 s, 215 MB/s
ব্লক ডিভাইসে এনক্রিপ্ট করা বিটিআরএফস
ডিভাইসটি LUKS দিয়ে ফর্ম্যাট করা হয়েছে এবং ফলস্বরূপ ডিভাইসটি বিটিআরএফএস দিয়ে ফর্ম্যাট করা হয়েছে:
$ sudo cryptsetup luksFormat /dev/sdf
$ sudo cryptsetup luksOpen /dev/sdf crypt
$ sudo mkfs.btrfs /dev/mapper/crypt
$ sudo mount /dev/mapper/crypt /mnt
$ sudo chmod 777 /mnt
$ dd if=/home/schlimmchen/Documents/random of=/mnt/dd-test1 bs=1M conv=fsync
4265841146 bytes (4.3 GB) copied, 210.42 s, 20.3 MB/s
$ dd if=/home/schlimmchen/Documents/random of=/mnt/dd-test2 bs=1M
4265841146 bytes (4.3 GB) copied, 207.402 s, 20.6 MB/s
পড়ার গতি কেবলমাত্র প্রান্তিকভাবে ভোগে (কেন এটি সর্বদা হয়?):
$ dd if=/mnt/dd-test1 of=/dev/null bs=1M
4265841146 bytes (4.3 GB) copied, 22.2002 s, 192 MB/s
$ dd if=/mnt/dd-test2 of=/dev/null bs=1M
4265841146 bytes (4.3 GB) copied, 22.0794 s, 193 MB/s
লুক্সডাম্প: http://pastebin.com/i9VYRR0p
ব্লক ডিভাইসে বিটিআরএফএসে ফাইলটিতে এনক্রিপ্ট করা বিটিআরএফএস
এনক্রিপ্ট করা ফাইলটিতে লেখার সময় 150 এমবি / সেকেন্ডে লেখার গতি "স্কাইরোকেটস"। আমি ব্লক ডিভাইসে একটি বিটিআরএফস রেখেছি, একটি 16 জিবি ফাইল বরাদ্দ করেছি, যা আমি lukfsFormat
সম্পাদনা করেছি এবং মাউন্ট করেছি।
$ sudo mkfs.btrfs /dev/sdf -f
$ sudo mount /dev/sdf /mnt
$ sudo chmod 777 /mnt
$ dd if=/dev/zero of=/mnt/crypted-file bs=1M count=16384 conv=fsync
17179869184 bytes (17 GB) copied, 100.534 s, 171 MB/s
$ sudo cryptsetup luksFormat /mnt/crypted-file
$ sudo cryptsetup luksOpen /mnt/crypted-file crypt
$ sudo mkfs.btrfs /dev/mapper/crypt
$ sudo mount /dev/mapper/crypt /tmp/nested/
$ dd if=/home/schlimmchen/Documents/random of=/tmp/nested/dd-test1 bs=1M conv=fsync
4265841146 bytes (4.3 GB) copied, 26.4524 s, 161 MB/s
$ dd if=/home/schlimmchen/Documents/random of=/tmp/nested/dd-test2 bs=1M conv=fsync
4265841146 bytes (4.3 GB) copied, 27.5601 s, 155 MB/s
লেখার পারফরম্যান্স কেন এভাবে বাড়ছে? উচ্চতর লেখার গতিতে সহায়তা করতে ফাইল সিস্টেম এবং ব্লক ডিভাইসের এই বিশেষ বাসা কী অর্জন করে?
সেটআপ
একই ডিস্ট্রো এবং কার্নেল চালিত দুটি সিস্টেমে সমস্যা পুনরুত্পাদনযোগ্য। তবে, আমি সিস্টেম 2-তে কার্নেল 3.19.0 এর সাথে কম লেখার গতিও পর্যবেক্ষণ করেছি।
- ডিভাইস: সানডিস্ক এক্সট্রিম 64 জিবি ইউএসবি 3.0 ইউএসবি স্টিক
- সিস্টেম 1: ইন্টেল এনইউসি 5i5RYH, i5-5250U (ব্রডওয়েল), 8 জিবি র্যাম, স্যামসং 840 ইভিও 250 জিবি এসএসডি
- সিস্টেম 2: লেনোভো টি 440 পি, আই 5-4300 এম (হাসওয়েল), 16 জিবি র্যাম, স্যামসং 850 প্রো 256 জিবি এসএসডি
- ডিস্ট্রো / কার্নেল: দেবিয়ান জেসি, 3.16.7
- cryptsetup: 1.6.6
/proc/crypto
সিস্টেম 1 এর জন্য: http://pastebin.com/QUSGMfiScryptsetup benchmark
সিস্টেম 1 এর জন্য: http://pastebin.com/4RxzPFeT- বিটিআরএফএস (-টুলস) সংস্করণ 3.17
lsblk -t /dev/sdf
: http://pastebin.com/nv49tYWc
থটস
- প্রান্তিককরণ যতদূর আমি দেখতে পাচ্ছি কারণ নয় । এমনকি কাঠির পৃষ্ঠার আকার 16KiB হলেও, ক্রিপসেটআপ পেলোড শুরুটি যাইহোক 2MiB তে প্রান্তিক করা আছে।
--allow-discards
(ক্রিপ্টসেটআপের লুকস ওপেনের জন্য) সাহায্য করেনি, যেমনটি আমি প্রত্যাশা করছিলাম।- এটির সাথে অনেক কম পরীক্ষা-নিরীক্ষা করার সময়, আমি একটি ইউএসবি 3.0 অ্যাডাপ্টারের মাধ্যমে সংযুক্ত একটি বাহ্যিক হার্ড ড্রাইভের সাথে খুব অনুরূপ আচরণ লক্ষ্য করেছি।
- আমার কাছে মনে হচ্ছে সিস্টেমটি 64KiB ব্লক লিখছে। একটি সিস্টেমট্র্যাপ স্ক্রিপ্ট আমি চেষ্টা করেছি যা কমপক্ষে নির্দেশ করে।
/sys/block/sdf/stat
প্রচুর লেখাগুলি একত্রিত হওয়ার পরে এই অনুমানকে সমর্থন করে। সুতরাং আমার অনুমান যে খুব ছোট ব্লকে লেখার কারণ নয়। - ব্লক ডিভাইস কিউ শিডিয়ুলারটি NOOP এ পরিবর্তন করার জন্য ভাগ্য নেই।
- ক্রিপ্টটিকে একটি এলভিএম ভলিউমের মধ্যে রাখলে কোনও লাভ হয়নি।