لینوکس و من

بهبود کارایی لینوکس با 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"

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

تبدیل لپتاپ به مودم وایرلس در آرچ لینوکس

نویسنده : امین | تاریخ: 1394/01/3

قبلا ها اگه توی PC کانکشن ad-hoc میساختیم میتونستیم اون رو توی گوشی آندرویدمون پیدا کنیم و از اینترنت PC توی گوشی استفاده کنیم. یا از برنامه هایی مثل Airdroid و امثالهم بتونیم بدون اینکه نیاز به یک مودم جداگانه داشته باشیم استفاده کنیم. ولی دیگه از آندروید ۴ به بعد بخاطر دلایل امنیتی آندروید دیگه کانکشن های ad-hoc رو شناسایی نمیکنه.
برای دستیابی به این هدف نیاز به چیزی داریم به نام hostapd که در توزیع های لینوکسی موجوده. اما تنظیماتش برای تازه کارها یکم سخته. در آرچ و دوستان، یک اسکریپتی داریم به نام create_ap که در AUR وجود داره. برای کار با این اسکریپت باید سخت افزار وایرلس لپتاپ شما از این امکان پشتیبانی کنه که الآن دیگه اکثرا پشتیبانی میکنن. 
دستور iwconfig رو بزنید تا اینترفیس های شبکه ی PC شما رو بهتون نشون بده.
دستور create_ap راهنمایی خوبی داره. مثلا برای به اشتراک گذاشتن اینترنت PC از طریق وایرلس در لپتاپ من:

sudo create_ap wlp3s0 enp0s29f0u1c2 esm password
توضیحات:
wlp3s0 نام اینترفیس وایرلس لپتاپ
enp0s29f0u1c2 نام اینترفیسی که اینترنت بهش وارد میشه. مثلا پورت USB یا پورت LAN 
esm اسم وایرلسی که میخواید داشته باشید.
password رمز عبوری که میخواید داشته باشید.

این اسکریپت حالت های مختلفی داره. مثلا با n- دیگه اینترنتی به اشتراک گذاشته نمیشه و فقط یک کانکشن وایرلس ایجاد میشه. مثلا برای چیزایی مثل Airdroid.

با ctrl +c هم قطع میشه. البته من هر وقت این کار رو میکنم و بعدش suspend میکنم، دیگه بعد از resume موبایل نمیتونست به اون کانکشن متصل بشه و باید نام وایرلس رو عوض میکردم! اما وقتی بدون ctrl + c لپتاپ رو suspend میکنم این مشکل پیش نمیاد. گفتم اگه مال شما هم این جوری شد بدونید.

میتونید دستورتون رو در یک فایل اجرایی در پوشه ی /usr/local/bin/ قرار بدید تا با یک دستور مشخص این کانکشن ساخته بشه.
اگر پیامی مبنی بر مشکلی در RFkill گرفتید یک بار وایرلس لپتاپ رو خاموش و روشن کنید و این دستور رو بزنید:

rfkill unblock all

آخرین سرور های بسته های آرچ رو داشته باشید

نویسنده : امین | تاریخ: 1392/06/13

آرچ برای بسته های خودش سیستم جالبی رو داره. به این صورت که سرورهای مختلفی در سراسر دنیا بسته های آرچ رو در خودشون دارن. بنابراین شما میتونید بهترین سرور رو از نظر سرعت پیدا کنید و در لیست mirrors بسته ها قرار بدید. همه ی این کارها با این برنامه قابل انجام هست: reflector
اول این برنامه رو نصب کنید:
sudo pacman -S reflector
بعد این دستور رو اجرا کنید تا ۱۰ تا سرور پرسرعت به ترتیب لیست بشن.

sudo reflector --verbose -l 10 -p http --sort rate --save /etc/pacman.d/mirrorlist
برای اطلاعات بیشتر به منبع مراجعه کنید.

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

bluetooth بعد از resume در آرچ

نویسنده : امین | تاریخ: 1392/06/6

Bluetooth بعد از resume از suspend از کار می‌افته. یعنی می‌افتاد! و در کل من دوست دارم که کلید خاموش/روشن کردن بلوتوث با وایرلس فرق داشته باشه. برای همین یه اسکریپتی ساختم که مخصوص خاموش/روشن کردن بلوتوث باشه. و البته اون کارهایی رو که لازمه تا بلوتوث بعد از resume کار کنه رو توش قرار دادم (رنگ قرمز)

#!/bin/sh

STAT=`cat /sys/class/rfkill/rfkill0/state`
      if [ "$STAT" = "1" ];
         then hciconfig hci0 down;
         else sudo rmmod btusb & sudo modprobe btusb & hciconfig hci0 up;
      fi

البته توجه داشته باشید که دستور sudo در اسکریپت وجود داره. برای اینکه دستور sudo بدون اینکه پسورد لازم باشه براش، اجرا بشه، باید یه کاری بکنید که در وبلاگم آموزش دادم. هرچند از لحاظ امنیتی ایراد داره. اما کسی با ما کاری نداره که ;)

روش دیگه ای که میتونیم انجام بدیم تا مشکل از کار افتادن بلوتوث برطرف بشه و نیازی به sudo نباشه، اینه که دستور rmmod btusb & modprobe btusb رو در systemd قرار بدیم که بعد از suspend اجرا بشه. (و طبیعتا اون عبارت قرمز رو هم از اسکریپتمون برداریم.) آموزش این کار هم دو سه تا نوشته پایین تر وجود داره.

تغییر login manager ها

نویسنده : امین | تاریخ: 1392/05/31

اگر در توزیعی مثل آرچ کار میکنید که روشش این طوریه که تا شما بهش چیزی نگید اون هم حرف نمیزنه، وقتی یک login manager قبلی مثل gdm دارید و حالا میخواید مثلا kdm نصب کنید، باید اینو بهش بگید! آرچ بنده خدا ساکته و مثل چیزایی مثل دبیان سوال زیادی نمی پرسه که کدومو میخواید؟ در آرچ این شمایید که اول حرف میزنید!
ls -l /etc/systemd/system/display-manager.service
sudo rm -r /etc/systemd/system/display-manager.service
sudo systemctl enable kdm.service

نمایش درست برنامه های GTK در KDE

نویسنده : امین | تاریخ: 1392/05/28

دوباره میخوام مدتی با KDE کار کنم. چون گنوم‌شل با لپتاپ من سازگار نیست و بسیار کنده و mate هم اوضاعش خیلی خیته و همچنان بعد از این همه آپدیت پر از ایراده.
البته با هزار زور و زحمت از مخازن آرچ تونستم دسکتاپ گنوم ۲ رو نصب کنم. موفقیت آمیز هم بود اتفاقا. اما یه ایراد نابخشودنی داشت که نمیشد رفعش کرد. اینکه پنل مدام قاطی میکرد و آیکن ها رو نشون نمیداد. اپلت ها رو خیلیهاشون رو اد نمی کرد... اما بقیه چیزای گنوم خوب بودن. و همچنین بیم آن می رفت که با آپدیت سیستم تمام این ها به هم بریزه. هرچند میشه از آپدیت شدن یه سری بسته ها جلوگیری کرد، اما کافیه یه بسته ی ریزه میزه رو یادتون رفته باشه به لیست ممنوعه اضافه کنید. اون وقت بیا و درستش کن... اینکه گفتم چه کاریه، بریم ببینیم KDE به کجا رسیده...
بعد از ۵۰۰ و اندی مگابایت دانلود، KDE با سلام و صلوات راه اندازی شد. خوشبختانه compiz توش کار میکنه. (من از افکت های Kwin خوشم نمیاد). اما ایرادی که داره اینه که برنامه های GTK  (مثلا GIMP) با تم خودشون باز میشن و این طوری دوگانگی بوجود میاد. راه حلش در KDE 4.10 در آرچ اینه که میگم:

این سه تا بسته رو نصب کنید:
sudo pacman -S oxygen-gtk2 oxygen-gtk3 kde-gtk-config

آنگاه در تنظیمات تم kde برید میبینید که GTK اضافه شده. و در اونجا تم برنامه های GTK رو به oxygen-gtk تغییر بدید. البته این به این شرط میسر هست که تم شما در KDE اکسیژن باشه تا باز دوگانگی پیش نیاد. به نظر من که تم قشنگیه.

بازی با سرویس ها (اجرای دستورات شما)

نویسنده : امین | تاریخ: 1392/05/25

سلام.
هدف اصلی: خاموش کردن nvidia ion هنگام boot و بعد از resume
هدف فرعی ۱: اجرای اسکریپت مخصوص خاموش کردن nvidia ion در آدرس usr/bin/disablecard/
هدف فرعی ۲: افزایش زمان باتری و کاهش دمای سیستم!

خیلی گشتم تا این رو در آرچ پیدا کنم. توی دبیان خیلی راحت فایل اسکریپت رو میذاشتیم در یک فولدر خاصی و اون اسکریپت بعد از resume اجرا میشد. برای boot هم با crontab این کار رو انجام میدادم. اما در آرچ اینگونه نیست...
آرچ از systemd  استفاده میکنه. این ابزاریه برای کنترل سرویس های آرچ. (روی لینکش کلیک کنید تا متوجه بشید). برای اینکه اتفاق خاصی در زمان خاصی بیفته، باید اون رو تبدیل به یک سرویس کنیم و بدیمش به آرچ که بفهمه و اجراش بکنه. من زیاد جزئیات و عمق مطلب رو نمیدونم. صرفا با خوندن ویکی و چند بار آزمون و خطا موفق شدم. شما میتونید این کار رو تعمیم بدید و هر کاری که دوست دارید با سیستمتون انجام بدید.

فایل disablecard یک اسکریپت مخصوص خاموش کردن nvidia ion در لپتاپ منه (asus 1215n) که اون رو در usr/bin/ قرار دادم که با دستور sudo disablecard به طور دستی اجراش میکردم تا کارش رو انجام بده. برای اینکه این اتفاق رو تبدیل به یک سرویس کنم این کارها رو کردم.

۱- یک فایل به اسم دلخواه nvidia-off.service در این فولدر میسازیم usr/lib/systemd/system/ و این محتوی رو توش میریزیم!
[Unit]
Description=Turns off nvidia ion
After=slim.service

[Service]
ExecStart=/usr/bin/disablecard
Type=oneshot

[Install]
WantedBy=slim.service

توضیح اینکه After یعنی اینکه این سرویس بعد از اجرای چه سرویسی باید اجرا بشه؟ من لیستی از سرویسهایی رو که هنگام بوت اجرا شده بودند با دستور systemctl list-unit-files --type=service پیدا کردم. و دیدم مثلا کدوم سرویس enabled هست. گفتم بعد از اون این اتفاق بیفته! شما هم میتونید به دلخواه خودتون ببینید سیستمتون چطوری تنظیم شده.
۲- برای resume هم یک فایل به اسم دلخواه nvidia-off-resume.service در همون فولدر میسازیم و این محتوی رو توش میریزیم:
[Unit]
Description=Turns off nvidia after resume
After=suspend.target

[Service]
Type=oneshot
ExecStart=/usr/bin/disablecard

[Install]
WantedBy=suspend.target
۳- حالا دستورات زیر رو یکی یکی اجرا میکنیم تا کارمون تکمیل بشه:

sudo systemctl daemon-reload
sudo systemctl enable nvidia-off-resume
sudo systemctl enable nvidia-off
و در پایان یک بار reboot میکنیم تا نتیجه رو ببینیم. که موفقیت آمیز بود! با مراجعه به ویکی آرچ میتونید کارهای پیچیده تر و جالب تری هم بکنید.

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

نصب دسکتاپ mate روی آرچ

نویسنده : امین | تاریخ: 1392/05/24

mate ادامه ی راه Gnome2 هست که توسط تیم لینوکس مینت ادامه دار شد! جایگزین خوبیه برای کسانی که از گنوم ۳ خوششون نمیاد یا لپتاپشون مثل مال من توانایی اجرای انیمیشن های مسخره و ساده ی گنوم شل رو نداره (اما compiz به زیبایی و راحتی اجرا میشه.
سریع بریم سر اصل مطلب.

۱- عبارات زیر رو داخل فایل etc/pacman.conf/ ذخیره کنید:
[mate]
SigLevel = Optional TrustAll
Server = http://repo.mate-desktop.org/archlinux/$arch
۲- mate رو نصب کنید:
pacman -Syy
pacman -S mate mate-extras
به نکته ی شماره ۴ مطلب قبلی برید و اون کارها رو انجام بدید.

توضیحات بیشتر در ویکی mate در سایت آرچ

۴- برای اینکه network manager درست کار کنه باید بسته ی خاصی رو نصب کنید. از AUR این بسته رو دانلود کنید. و طبق آموزشی که قبلا گذاشتم اون رو نصب کنید. اما توجه کنید که قبلش در فایل PKGBUILD باید عبارت gnome-bluetooth رو به mate-bluetooth تغییر بدید.

برای نصب compiz دردسر زیادی کشیدم. الان وقتش رو ندارم. شاید بعدا بنویسم.

SLIM یک Login Manager ساده و کاربردی و زیبا

نویسنده : امین | تاریخ: 1392/05/24

میگن سالی که نکوست از بهارش پیداست... دسکتاپی که نکوست از Login Windowش  پیداست!
من همیشه دنبال تم ورود ساده و شیک برای لینوکس بودم. به تازکی با SLIM یا Simple LogIn Manager آشنا شدم. ساده ترین، سریع ترین و در عین حال یه لاگین‌منیجر با تم های مختلف و زیبا. یه ویژگی خوبی که داره اینه که ارتباطی به این نداره که چه دسکتاپی روی لینوکستون نصب باشه و dependency به دسکتاپ نداره. یعنی مثلا کاری به این نداره که شما KDE دارین یا XFCE یا هر چیز دیگه!
امروز میخوام روش نصب و راه اندازی SLIM در آرچ رو بنویسم.
هشدار: هیچ تضمینی وجود نداره که بعد از اعمال این تغییرات کار درست از آب در بیاد. هر اتفاقی افتاد مسئول خودتونید. من رفرنس های لازم رو لینک دادم.

۱- با این دستور نصبش کنید!
sudo pacman -S slim slim-themes archlinux-themes-slim
۲- با این دستور فعالش کنید:
sudo systemctl enable slim.service -f

۳- حالا باید تنظیمش کنیم. تنظیمات مختلفی میتونید براش اعمال کنید که تنظیمات اولیه اش رو اینجا مینویسم. برای تنظیمات مختلف دیگه به اینجا و اینجا مراجعه کنید.
اول که فایل تنظیمات رو با یه ویرایشگر باز کنید. مثلا:
sudo nano /etc/slim.conf

+ اضافه کردن دسکتاپ های مختلف برای انتخاب موقع ورود
در قسمت Available Sessions دسکتاپ های مورد نظرتون رو اضافه کنید. همون طور که میبینید اولین دسکتاپ به عنوان پیشفرض محسوب میشه:

sessions            mate,xfce,gnome3,kde,cinnamon,razor-qt,openbox,lxde

۴- حالا فایل زیر رو باز کنید تا یه تنظیم کوچولو انجام بدیم. این طوری میگیم که نام کاربری شما هنگام ورود، دسکتاپ فلان رو اجرا کنه. (در اینجا mate)
sudo nano ~/.xinitrc
و عبارت زیر رو برای mate توش قرار بدید و ذخیره کنید.
exec mate-session
حالا میتونید restart کنید.
حواستون باشه که باید یه مقدار تجربه داشته باشید، وگرنه اگه یه جای کار ایراد پیدا کرد و نتونستید دیگه لاگین کنید... وای وای... حتما هم یه کامپیوتر دیگه که به اینترنت وصله کنارتون باشه که در صورت بروز مشکل بتونید سرچ کنید.

در لینک هایی که در بالا گفتم، تنظیمات مختلفی وجود داره که میتونید اعمال کنید. مثلا ورود اتوماتیک، تغییر theme، استفاده از بکگراند همزمان دسکتاپ، و خیلی چیزهای دیگه.

نصب بسته ها از مخازن AUR برای توزیع Arch

نویسنده : امین | تاریخ: 1392/05/17

همون طور که میدونید مدتیه دارم توزیع Arch رو تست میکنم. آرچ لینوکس. توزیع آرچ شیوه ی جالبی برای مدیریت بسته هاش داره. چند تا مخزن اصلی داره و یک مخزن مخصوص کاربران. در این مخزن کاربران که AUR نامیده شده، بسته هایی قرار میگیرن که توسط کاربران تولید یا ویرایش شدن. این مخازن به طور پیش فرض در مخازن آرچ وجود ندارن و برای استفاده از اونها باید روش خاص خودشون رو استفاده کنید. اسکریپت های متعددی برای اینکار ساخته شده. در این لینک تعداد زیادی از اونها رو میبینید. که هر کدوم قوانین خاص خودشون رو دارن. هر کدوم رو که بخواید میتونید امتحان کنید. من yaourt رو انتخاب کردم. دلیل خاصی هم نداشت. توی گوگل سرچ کردم!
اما پس از مدتی متوجه شدم به دلیل اینترنت احمقانه ی ایران، دسترسی به بعضی پکیج ها امکان پذیر نیست. و باید راه دیگه ای پیدا کرد! خب، کار که نشد نداره، راهش هست:

۱- به سایت مخزن AUR برید و پکیج مورد نظرتون رو سرچ کنید و نسخه ی مربوط به CPU خودتون (۳۲ یا ۶۴) پیدا کنید. مثلا من همین yaourt رو براتون میگم. از سمت راست صفحه، Download Tarbal رو کلیک کنید و فایل رو دانلود کنید.

۲- با ترمینال وارد پوشه ای بشید که فایل دانلود شده. و اون رو از حالت فشرده خارج کنید:
tar -xzf yaourt.tar.gz
۳- دستور زیر رو اجرا کنید تا بسته ی اصلی دانلود بشه و dependencyهای بسته هم دانلود بشن.
makepkg -s
۴- حالا با خود pacman میتونید بسته ای رو که تولید شده نصب کنید:
pacman -U /path/to/package

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