لینوکس و من

بهبود کارایی لینوکس با I/O scheduler جدید کرنل 4.12

نویسنده : محمدرضا عبداله‌زاده | تاریخ: 1396/05/7

یکی از وظایف اصلی هسته سیستم عامل، مدیریت دستگاه‌های ورودی و خروجی سیستم یا به اصطلاح I/O می‌باشد. برنامه‌های مختلفی که نیاز به دسترسی به دستگاه‌ها ورودی و خروجی دارند درخواست‌های خود را به هسته سیستم عامل ارسال می‌کنند و هسته سیستم عامل با توجه به تعداد درخواست‌هایی که برای دستگاه‌های مختلف وجود دارد، این درخواست‌ها را در صف قرار داده و برای انجام زمانبندی می‌کند. شیوه زمانبندی این درخواست‌ها تاثیر به سزایی در سرعت و پاسخگویی سیستم دارد. معمولا به دلیل کند بودن بعضی از دستگاه‌های ذخیره‌سازی همانند دیسک‌های سخت نسبت به سایر بخش‌های اصلی سیستم همچون CPU و RAM، عملیات I/O به عنوان یکی از دلایل اصلی کند بودن سیستم و پاسخگو (Responsive) نبودن برنامه‌ها می‌باشد.
روش‌ها و الگوریتم‌های مختلفی برای زمانبندی I/O وجود دارد. روش‌هایی که تاکنون در هسته لینوکس برای زمانبندی I/O استفاده می‌شد شامل CFQ، NOOP و Deadline بود. با ظهور دستگاه‌های ذخیره‌سازی جدید که قادر به انجام صدها و هزاران درخواست I/O در ثانیه می‌باشند، نیاز به روش‌های زمانبندی جدید که قادر به استفاده از این پتانسیل عظیم باشد بیش از پیش حس می‌شد. یکی از بهبودهایی که از کرنل نسخه 3.13 وارد هسته لینوکس شد multiqueue block layer بود که منجر به افزایش کارایی سیستم در استفاده از دستگاه‌های ذخیره سازی با کارایی بالا می‌شود. منتها این مکانیزم به خودی خود بدون وجود الگوریتم‌های زمانبندی که از این مکانیزم استفاده کنند فایده چندانی نداشت. ولی سرانجام در کرنل نسخه 4.12 دو زمانبند جدید که از این مکانیزم استفاده می‌کنند وارد هسته لینوکس شد. این الگوریتم‌ها به ترتیب BFQ و Kyber می‌باشند. زمانبند BFQ مکانیزمی است که بیشتر برای استفاده در دیسک‌های سخت HDD استفاده می‌شود که منجر به بهبود زمان تاخیر برنامه‌های تعاملی و بهبود کارایی سیستم می‌شود. الگوریتم Kyber هم بدلیل پیچیدگی کمتر نسبت به BFQ برای دیسک‌های SSD و سریعتر استفاده ‌می‌شود.
به تازگی کرنل 4.12 وارد مخازن آرچ شد و کاربران آرچ امکان استفاده از این مکانیزم‌های جدید رو پیدا کردند. این زمانبند‌ها در حالت عادی فعال نیستند و برای فعال شدن آنها باید کارهای زیر را انجام بدید. توصیه می‌کنم که اگر سیستم شما از HDD استفاده می‌کند از BFQ استفاده کنید و برای SSD ترجیحا از Kyber و یا از روش‌های فعلی موجود استفاده کنید.
در حالت عادی زمانبند CFQ در آرچ استفاده می‌شود که برای دیدن زمانبند مورد استفاده در دیسک مورد نظر خود از دستور زیر استفاده کنید در اینجا دیسک sda رو چک میکنیم:
$ cat /sys/block/sda/queue/scheduler
noop deadline [cfq]


برای استفاده از زمانبندهای چند صفی (multiqueue) ابتدا بایستی پارامترهای scsi_mod.use_blk_mq=1 dm_mod.use_blk_mq=1 را به پارامترهای بوت کرنل اضافه کنیم برای اینکار با فرض استفاده از GRUB به عنوان boot loader مورد استفاده اعمال زیر را انجام دهید:
ابتدا فایل etc/default/grub/ را با ویرایشگر مورد نظر خود باز کرده و پارامترهای گفته شده را به مقادیر موجود در جلوی گزینه GRUB_CMDLINE_LINUX_DEFAULT اضافه کنید یعنی به این صورت:
GRUB_CMDLINE_LINUX_DEFAULT="scsi_mod.use_blk_mq=1 dm_mod.use_blk_mq=1"

سپس با دستور زیر فایل تنظیمات گراب را بروزرسانی کنید:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg

در مرحله بعد برای استفاده از زمانبند BFQ برای تمامی دیسک‌های سیستم یک rule جدید برای udev ایجاد می‌کنیم. به این منظور ابتدا دستور زیر را برای ایجاد rule جدید اجرا کنید:
$ sudo nano /etc/udev/rules.d/10-bfq.rules

سپس محتویات زیر را درون این فایل قرار دهید:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="bfq"

در مرحله بعد سیستم خود را ریبوت کرده و بعد از بالا آمدن سیستم چک کنید که زمانبند BFQ برای دیسک شما مورد استفاده قرار گرفته باشد:
$ cat /sys/block/sda/queue/scheduler
mq-deadline kyber [bfq] none


همانطور که می‌بینید زمانبند bfq برای دیسک sda سیستم مورد استفاده قرار گرفته است. برای استفاده از Kyber هم به همین شیوه عمل می‌شود منتها در rule ایجاد شده برای udev به جای bfq گزینه kyber رو قرار بدید:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="kyber"

لینک‌های مرتبط

تنظیم درجه حرارت Gnome Night Light

نویسنده : امین | تاریخ: 1396/04/30

حتما میدونید که گنوم در نسخه های جدید دارای یک ویژگی خوب شده به نام Gnome Night Light. این همون کار Redshift رو برای ما میکنه که قبلا در موردش نوشته بودم. هدف اینه که با تاریک شدن فضا، درجه رنگ آبی مانیتور کمتر بشه تا چشم ها کمتر خسته بشن و همچنین ریتم خواب شبانه روزی ما کمتر تحت تاثیر نور مانیتور قرار بگیره.
با اومدن این ویژگی به تنظیمات خود گنوم کار بسیار راحت شده و شما فقط کافیه از Displays اون رو روشن کنید و زمانی رو که میخواید فعال بشه تعیین کنید. یعنی حد فاصل بین غروب آفتاب تا طلوع آفتاب روز بعد (که به وسیله ip مشخص میکنه)، و یا اینکه بصورت دستی خودتون مشخص کنید.


اما وقتی این رو فعال میکنید متوجه میشید که صفحه نمایش خیلی زرد میشه! و هیچ چیزی وجود نداره تا درجه حرارت رنگ رو تغییر بدیم و از این زردی زیاد درش بیاریم. خوشبختانه این کار در سطح dconf قابل انجام هست. کافیه شما به مسیر زیر در dconf-editor برید و عدد دلخواهتون رو وارد کنید.
/org/gnome/settings-daemon/plugins/color/night-light-temperature
و این هم معنی این عددها است:
  • 1000 — Lowest value (super warm/red)
  • 4000 — Default night light on temperature
  • 5500 — Balanced night light temperature
  • 6500 — Default night light off temperature
  • 10000 — Highest value (super cool/blue)

لینک‌های مرتبط

مخازن مانجارو روی سرورهای ایران

نویسنده : امین | تاریخ: 1395/12/6

به طور اتفاقی با سایت یکی از دانشگاه های ایرانی روبرو شدم که بطور سخاوتمندانه ای تعدادی از مخازن لینوکسهای معروف رو برای استفاده آزاد در دسترس قرار داده. برای دیدن این سایت میتونید به این لینک مراجعه کنید.

مخازن مانجارو وجود نداشت، با ایمیلی که بهشون زدم اونها ظرف مدت بسیار کوتاهی پاسخ دادند و مخازن مانجارو هم به این لیست اضافه شد. اینجا چند نکته وجود داره که لازمه بنویسم:
  • اولا تشکر از گردانندگان این پروژه، هم بخاطر کاری که میکنند و هم بخاطر پاسخ گویی‌. تلاششان تحسین بر انگیزه.
  • بودن مخازن در داخل ایران خوبیش اینه که میشه با سرعت بسیار بالاتری بسته ها رو دانلود کرد. اما طی چند بار تستی که بنده در روزهای مختلف داشتم هر بار سرعت دانلود از سرورهای خارج از کشور (که خود پکیچ منیجر مانجارو اونها رو لیست میکنه) به مراتب بیشتر از سرعت دانلود از این سرور بود. حداقل سه برابر. در یک ایمیل موضوع رو مطرح کردم و پاسخ دادند که اونها با سرعت بسیار بالایی دارن استفاده میکنن و مشکلی در این زمینه نمیبینند. متاسفانه بخاطر این موضوع من نمیتونم از این مخازن استفاده کنم. بسیار عجیبه که دانلود از سرور مثلا انگلستان خیلی سرعت بیشتری به من میده تا دانلود از سروری که بیخ گوشمون هست!
اگر شما کاربر مانجارو هستید و میخواید که این رو امتحان کنید، فایل زیر رو باز کنید و سرورهای دیگه رو کامل پاک کنید و سرور ایران رو بهش اضافه کنید. بعد هم دیتابیس رو رفرش کنید:
sudo gedit /etc/pacman.d/mirrorlist
-------------------------------------------
Server = http://repo.sadjad.ac.ir/manjaro/stable/$repo/$arch

sudo pacman -Syy
در خط سرور عبارت stable در توضیحات سایت دانشگاه سجاد branch$ نوشته شده. که میبایست در این فایل تغییر کنه. در غیر این صورت با پیام خطای سینک مواجه میشید. نسخه های دیگه unstable و testing هستتند.

رزلوشن 4k و مشکل ریز بودن بعضی نرم افزارها در لینوکس

نویسنده : امین | تاریخ: 1395/09/22

این روزها دیگه کم کم مانیتورهای 4k دارن روی لپتاپ ها سر و کله هاشون پیدا میشه. صرف نظر اینکه ما در یک مانیتور لپتاپ به یه همچین رزلوشنی نیاز داریم یا نه، مشکلی بوجود میاد که وقتی همچین لپتاپی میخریم چاره ای برای حلش نداریم.
در این رزلوشن اکثر برنامه های قدیمی، و اونهایی که خودشون رو نتونستن با تکنولوژی بروز کنند فونت برنامه و آیکنهای اون برنامه به قدری ریز هستند که عملا شما رو در استفاده از اونها پشیمون میکنه.
در لینوکس، حداقل در دسکتاپ گنوم این طور بوده که خود بدنه اصلی دسکتاپ و برنامه های وابسته به پروژه گنوم با این تکنولوژی سازگار هستند و مشکلی از این بابت وجود نداره. اما وقتی کار به استفاده از برنامه هایی مثل GIMP یا برنامه های قدیمی میرسه، این مسئله نمود پیدا میکنه.
گنوم در تنظیمات Tweaks برای حل این مشکل از window scaling و scaling factor استفاده کرده که با بیشتر کردن مقدار اونها تا حدی این موضوع بر طرف شه. اما با این کار کل محتوای مانیتور بزرگ میشه و باز هم ناهماهنگی زشتی بوجود میاد.
تنها راه چاره ای که من پیدا کردم این بود که بیخیال رزلوشن 4k بشیم و در تنظیمات Displays حداکثر رزلوشنی که در اون مشکلی بوجود نمیاد رو انتخاب کنیم

یعنی رزلوشن 1152 در 2048. در این عدد دیگه برنامه ای ریز نیست و برنامه های دیگه هم اندازه درستی دارند و همه چیز هماهنگه. و نیازی به افزایش scalingها نیست. و همچنین تغییر محسوسی در کیفیت تصویر نخواهید دید.

گزارش های سیستم را محدود تر کنیم

نویسنده : امین | تاریخ: 1395/09/22

لینوکس از راه های مختلفی گزارش های زیادی در مورد نحوه فعالیت سیستم ثبت میکنه. از پروسه بوت گرفته تا همین الان که دارید این متن رو میخونید. این گزارشات در یک جایی از سیستم ذخیره میشن و بعد از مدت مشخصی حذف میشن.
گاهی این نگه داشته شدن اینهمه لاگ (گزارش) چندان ضرورتی نداره و باعث میشه پروسه بوت کمی دچار تاخیر هم بشه. ما میتونیم از طریقی یکی از این گزارش ها رو که توسط journalctl تولید میشن محدود کنیم. این طوری هم منابع کمتری از سیستم صرف تولید و نگه داری این گزارش ها میشه و هم موقع بوت چند ثانیه ای صرف جویی میشه.
قبلش دستور زیر رو بزنید تا زمان بوت رو بهتون بگه:
systemd-analyze

و دستور زیر رو هم بزنید تا جزء به جزء بگه کدوم از سرویس ها چقدر زمان مصرف کردن تا اجرا بشن
systemd-analyze blame

بستگی داره روی سیستمتون چه سرویس هایی نصب داشته باشید. مثلا ممکنه کسی Plymouth (انیمیشن موقع بوت) داشته باشه و مقدار زیادی زمان بخاطر اون صرف شده باشه.
و اما برای کمتر کردن لاگهای journalctl فایل زیر رو با ویرایشگر دلخواهتون باز کنید
sudo gedit /etc/systemd/journald.conf

طبق عکس زیر اون مقادیری که بنفش هستند تغییر بدید و اگر پشتشون # هست بردارید
عبارت volatile معنیش اینه که لاگ های journalctl رو فقط روی مموری نگه داره و نیازی به ذخیره اونها روی هارد نیست. با اینکار شما تنها به لاگ‌های همین بوت دسترسی دارید و لاگ های قبلی دیگه وجود ندارن. اگر این براتون مهم نیست که به لاگهای قبلی هم دسترسی داشته باشید میتونید از این استفاده کنید.

و قسمت systemmaxuse هم برای اینه که حداکثر فضایی که قراره به این لاگها اختصاص داده بشه چقدر باشه. مقدار کمتر به این معنیه که فضای کمتری در اختیار داشته باشن. این برای موقعی مناسبه که شما میخواید لاگها رو روی هارد نگه دارید. نه روی مموری. هرچند اینجوری مموری هم کمتر اشغال میشه.

بعد از ذخیره این تغییرات، یک بار دستور زیر رو اجرا کنید تا لاگ های قبلی پاک بشن
sudo rm -rf /var/log/journal/*


غیر فعال کردن Auto extract در Nautilus جدید

نویسنده : امین | تاریخ: 1395/08/12

آپدیت گنوم معمولا هیجان انگیزه! هم خوبه هم بد. خوب از این جهت که گنوم روز به روز در حال پیشرفت و اضافه شدن ویژگی های کاربردی جدید تر هست، اما بد از این جهت که یه کارایی هم میکنه که به نظر من مخالف روح آزادی است! یعنی شما رو مجبور میکنه به همین چیزی که در پیش رو دارید. مگه اینکه برنامه نویس باشید و بتونید خواسته خودتون رو اجرایی کنید.
یکی از تغییراتی که در نسخه 3.22 کرده اینه که Nautilus به صورت خودکار وقتی روی یک فایل فشرده کلیک کنید اون رو extract میکنه. و اجازه نمیده شما محتوای فایل رو اول ببینید و بعد اگر خواستید extract کنید.
خوشبختانه این بار برخلاف اجباری که در پیدایش ویژگی های جدید همراه گنوم بود، گزینه ای برای غیر فعال کردن این ویژگی وجود داره:


با فعال / غیر فعال کردن این گزینه میتونید این ویژگی رو کنترل کنید.

مشکل ماونت نشدن درایوهای ویندوزی

نویسنده : امین | تاریخ: 1395/06/26

اگه dual boot باشید، یعنی هم لینوکس و هم ویندوز در کنار هم داشته باشید، شاید از ویندوز ۸ به بعد براتون پیش اومده که وقتی ویندوز رو shutdown میکنید و دفعه بعد وارد لینوکس میشید درایوی که در ویندوز داشتید دیگه mount نمیشه و پیام خطایی شبیه به این میگیرید:

Command-line `mount -t "ntfs" -o "uhelper=udisks2,nodev,nosuid,uid=1000,gid=1000" "/dev/sdb2" "/media/username/FC56938B569344F4"' exited with non-zero exit status 14: Windows is hibernated, refused to mount.
Failed to mount '/dev/sdb2': Operation not permitted
The NTFS partition is in an unsafe state. Please resume and shutdown
Windows fully (no hibernation or fast restarting), or mount the volume
read-only with the 'ro' mount option.
علت این ماجرا اینه که ویندوز برای shutdown درواقع یه جور hibernation انجام میده تا موقع بوت بعدی سریعتر بالا بیاد! این موضوع میتونه برای سیستم عامل دیگه ای که در کنار ویندوز نصبه دردسر ایجاد کنه. سه راه برای حل این معضل! وجود داره.

۱- انجام restart از ویندوز
به ویندوز بوت کنید و یک بار بجای shutdown که اون مشکل رو بوجود میاره restart کنید. و بعد وارد لینوکس بشید

۲- این رفتار ویندوز رو غیرفعال کنیم!
هرچند این باعث دیرتر بالا اومدن ویندوز میشه اما به ما مربوط نیست. ما که اصلا باهاش کاری نداریم! این مسیر رو در کنترل پنل دنبال کنید:
Power Options > Choose what the power buttons do > Change settings that are currently unavailable
و تیک Turon on fast startup رو بردارید

۳- اگر فقط قصد مشاهده محتویات درایو رو دارید و نمیخواید تغییری ایجاد کنید، درایو رو در حالت read only ماونت کنید

در لینک منبع میتونید توضیحات بیشتری رو ببینید

ویرایش: راه چهارم:
اگه درایو مورد نظر شما در fstab نیست که موقع بوت لینوکس دچار مشکل بشه، میتونین وقتی لینوکس بالا اومد با این دستور اطلاعات هایبرنیت ویندوز رو از روی اون درایو پاک کنید: (شماره درایو sda مورد نظرتون رو باید بذارید)
sudo ntfsfix /dev/sda3

لینک‌های مرتبط

از بین بردن نویز صدای هدفون در درایورهای اینتل

نویسنده : امین | تاریخ: 1395/06/8

اینجا در مانجارو وقتی سیستم حالت suspend به resume میاد یک نویز عجیب و بد توی هدفون شنیده میشه. برای اینکه این نویز برطرف شه باید ماژول صدا رو یکبار حذف و دوباره بارگذاری کنیم.
ماژول صدای درایور اینتل snd_hda_intel است. با این دستور این ماژول غیرفعال میشه:
sudo rmmod -f snd_hda_intel

حالا با این دستور میبایست مدل درایور اینتلی که دستگاه شما داره مشخص کنیم:
aplay --list-devices

که یه سری توضیحات میاره و عددی شبیه به ALC668 مد نظر ماست. حالا با این دستور ماژول مجددا به شکل صحیح بارگذاری میشه:
sudo modprobe snd_hda_intel ALC668

اما انجام دادن این پروسه بعد از هر resume باید خودکار انجام بشه. بنابراین میایم یه اسکریپت در مسیر /usr/local/bin/ میسازیم:
sudo nano /usr/local/bin/snd_hda_intel-resume

با این محتوی:

#!/bin/bash
rmmod -f snd_hda_intel && sleep 2 && modprobe snd_hda_intel ALC668


و به اون مجوز اجرایی میدیم. (با chmod +x). اما میتونیم این رو تبدیل به یک سرویس systemd بکنیم که بعد از هر resume بصورت خودکار شروع بشه و ما هیچ دخالتی نداشته باشیم:
sudo nano /etc/systemd/system/snd_hda_intel-resume.service

با این محتوی:

[Unit]
Description=Reloading intel sound module after suspend
After=suspend.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/snd_hda_intel-resume

[Install]
WantedBy=suspend.target
و بعد برای فعال کردن این سرویس:
sudo systemctl enable snd_hda_intel-resume.service

باگ درایور اینتل

نویسنده : امین | تاریخ: 1395/06/4

متاسفانه یک باگ حل نشده در درایور اینتل وجود داره که ابزارهایی مثل totem و parole که با gstreamer کار میکنند توی پخش فیلمهای h.264 مشکل دارند. و با پیام خطای intel_do_flush_locked failed: No such file or directory مواجه میشن.
یک راه اینه که gstreamer1-vaapi رو حذف کنیم. یک راه هم اینه که در پوشه etc/profiles.d/ یک فایل sh ایجاد کنیم با این محتوی:
#!/bin/bash
export LIBGL_DRI3_DISABLE=1
محض یاد آوری بود..

نحوه غیرفعال کردن Guest Account در اوبونتو

نویسنده : امیرعلی | تاریخ: 1395/06/3

حتماً تا به حال به Guest Account در اوبونتو برخوردید و به هر دلیلی فکر کردید که چه خوب می‌شد اگر میتونستم غیرفعالش کنمخوب این همون چیزیه که امروز میخوایم راجع بهش صحبت کنیمبرای غیرفعال کردن اکانت مهمان کافیه فرمان زیر رو در ترمینال وارد کنید:

 sudo gedit /etc/lightdm/lightdm.conf

و خط های زیر رو بهش اضافه کنید:

[SeatDefaults]
user-session=ubuntu 
allow-guest=false

و بعد از ذخیره سازی تغییرات، سرویس lightdm رو ریستارت کنید:

 sudo lightdm restart

حالا حساب مهمان شما غیرفعال شده است و شما میتوانید با زدن Super + L (رفتن به صفحه ی ورود به اکانت) این رو مشاهده کنید.

1 2 3 4 5