گنجه

# tail -f /var/log/experience
روشی برای تسریع dpkg
۰۷ ۱۷م, ۱۳۸۸

همون طور که احتمالاً می‌دونید dpkg توساخت0 مدیریت بسته‌ها1 در Debian است. یعنی APT و Synaptic و Aptitude و … همه روی dpkg بنا شده اند.

dpkg برای نگه‌داری بعضی اطلاعات بسته‌های نصب‌شده، از تعداد زیادی (برای من حدود ۹۰۰۰ تا) پروندهٔ2 کوچک توی مسیر ‎/var/lib/dpkg/info استفاده می‌کنه. هر بار که بسته‌ای رو نصب یا حذف می‌کنید dpkg همهٔ اون پرونده‌ها رو از روی لوح3 می‌خونه. این کار روی سامانهٔ پروندهٔ4 مورد استفادهٔ من، که Ext4 هست، اولین بار بیست-سی ثانیه‌ای طول می‌کشه، که برای من مدت زیادی هست. این کار در دفعات بعدی به علت قرار گرفتن همهٔ اون پرونده‌ها در نهان‌گاه5 سامانهٔ پرونده در حافظهٔ اصلی، بسیار سریع‌تر انجام می‌شه، تا وقتی که دوباره از نهان‌گاه خارج بشند.

این مشکل هر از گاهی یک سیخی بهم می‌زد و روی اعصابم راه می‌رفت. فکرهای مختلفی برای حلش به ذهنم رسید. از بسیار پیچیده، مثل طراحی و پیاده‌سازی مجدد dpkg روی Tokyo Cabinet یا SQLite، تا بسیار ساده:

شاید بدونید که سامانهٔ پروندهٔ ReiserFS در کار با پرونده‌های کوچک بسیار عالی عمل می‌کنه. علتش هم استفاده از فن «ته‌چِپانی»6 است.7 فکر کردم شاید اگر پوشهٔ ‎/var/lib/dpkg/info رو توی ReiserFS نگه دارم، مشکل حل بشه. این کار رو کردم، ولی به خاطر کارکرد8 داخلی dpkg روی کل ‎/var/lib/dpkg:

$ sudo su -
# cd /var/lib
# tar cpzf dpkg.tar.gz dpkg
# dd if=/dev/zero of=dpkg.reiserfs bs=$((256*1024*1024)) count=1
# mkreiserfs -f dpkg.reiserfs
# mount -oloop dpkg.reiserfs dpkg
# tar xpf dpkg.tar.gz

و بعد آزمودن و دائمی کردن با افزودن به fstab‏:

# echo 3 >/proc/sys/vm/drop_caches
# apt-get install hello
# apt-get purge hello
# echo /var/lib/dpkg.reiserfs /var/lib/dpkg reiserfs loop,noatime 0 1 >>/etc/fstab

فکره جواب داد و سرعت dpkg بسیار به‌تر شد. حالا حتی اولین بار هم dpkg اون کار رو در دو-سه ثانیه انجام می‌ده.

علاوه بر مهارت ReiserFS در کار با پرونده‌های کوچک، چند نکتهٔ دیگه هم قابل ذکر هست. یکی این که Ext4 به علت فن «حوزه»9 در کار با پرونده‌های نسبتاً بزرگی که یک‌جا تخصیص10 می‌یابند بسیار سریع هست. برای همین به dd گفتم که کل پرونده رو یک‌جا بسازه.

از طرفی چون، در نتیجهٔ نکتهٔ قبل، کل پرونده‌های مربوط به dpkg روی لوح نزدیک به هم قرار می‌گیرند و پراکنده نیستند، با خونده شدن یک پرونده از اون حوالی، تعداد زیادی از بقیه‌شون هم توی نهان‌گاه لوح و تعدادی هم توی نهان‌گاه سامانهٔ پرونده قرار می‌گیرند. همین امر باعث می‌شه کلی زمان جویش11 که قبلاً برای رسیدن به پرنده‌های پراکنده در اطراف و اکناف لوح هدر می‌رفت، صرفه‌جویی بشه.

به گزینهٔ12 noatime در fstab هم دقت کنید. رفتار معمولی سامانه‌های پرونده این هست که در هر دست‌رسی (اعم از خواندن یا نوشتن) به یک پرونده، زمان دست‌رسی رو ذخیره می‌کنند. این خیلی بده! هر دست‌رسی = حداقل یک عمل نوشتن روی لوح، و عمل نوشتن هم معمولاً کندتر از خوندن هست. نکته این جاست که برنامه‌های رایج امروزی معمولاً روی اون زمان ثبت‌شده برای آخرین دست‌رسی حساب نمی‌کنند و عملاً اون عدد بی‌استفاده است! گزینهٔ noatime به سامانهٔ پرونده می‌گه که کلاً قید ثبت اون زمان رو بزنه و به این ترتیب کلی عمل نوشتن صرفه‌جویی کنه.

  1. Back-end []
  2. Package management []
  3. File []
  4. Disk []
  5. File system []
  6. Cache []
  7. Tail packing []
  8. http://en.wikipedia.org/wiki/ReiserFS#Performance []
  9. Mechanism []
  10. Extent []
  11. Allocation []
  12. Seek []
  13. Option []

دبیَن0 سامانهٔ عامل1 محبوب من هست.

موج زدن روح آزادی نرم‌افزار رو توی دبین حس می‌کنم.

بخش عظیمی از همهٔ نرم‌افزارهای آزاد دنیا رو می‌شه توی مخزن2های دبین، آمادهٔ نصب پیدا کرد؛ الان حدود ۲۰۰۰۰ تا بسته3 در مخازن رسمی4 هست.

سامانهٔ مدیریت بسته‌هاش5، به نام APT (مخفف «ابزار بسته‌بندی پیش‌رفته»6)، بسیار تمیز و خوش‌دست هست.

اگر سامانه‌ای حقیقتاً پایدار7 بخوام، دبین stable رو نصب می‌کنم. اگر پایداری برام کم‌تر از به‌روز8 بودن نرم‌افزارها مهم باشه (مثلاً برای رایانهٔ منزل)، دبین unstable + experimental رو نصب می‌کنم. اگر روی سامانهٔ پایدارم آخرین نسخهٔ بسته‌های خاصی رو بخوام هم به سادگی می‌تونم بسته‌های deb رو جدا بگیرم و نصب کنم، یا با تنظیم ‎/etc/apt/preferences کار رو به دست استاد APT بسپارم (به man apt_preferences مراجعه کنید).

قبل از این که خبر انتشار KDE 4.2 توی پایگاه رسمی KDE اعلام بشه، بسته‌های KDE 4.2 توی مخزن دبین experimental بود و داشتم نصبش می‌کردم!

نرم‌افزارهای دوست‌داشتنی‌ای مثل VirtualBox رو که هم ویرایش آزاد دارند، و هم ویرایش غیرآزاد، و البته گاهی در پایگاه9 رسمیشون ایران عزیز رو تحریم کرده‌اند، از مخازن دبین به راحتی نصب می‌کنم بدون این که نگران تحریم و یا آلوده شدن رایانه‌ام به نسخهٔ غیرآزادشون باشم. همهٔ نرم‌افزارهای بخش10 main، آزاد هستند و به هیچ نرم‌افزار غیرآزادی وابستگی11 ندارند.

بعضی نرم‌افزارهای غیرآزاد مثل افزونهٔ12 Flash، که ناچار از استفاده‌شون هستم رو می‌تونم بدون به هم زدن یک‌پارچگی سامانه‌ام نصب کنم. بخش‌های contrib و non-free حاوی بعضی از نرم‌افزارهای غیرآزاد پراستفاده هستند.

یادم نره بگم که دبین برای تعداد زیادی معماری13 مختلف رایانه وجود داره. از x86 و AMD64 بگیر تا MIPS و ARM و PowerPC و SPARC و Alpha و … (برای فهرست کاملش http://www.debian.org/ports/‎ رو ببینید)

با دبین به هستهٔ لینوکس14 محدود نیستم؛ می‌شه دبین رو با هستهٔ15 FreeBSD16 یا NetBSD17 یا Hurd18 یا OpenSolaris19 یا حتی20 Darwin/XNU (هستهٔ Mac OS X) استفاده کرد! شما رو نمی‌دونم، ولی این برای من خیلی مهم و هم‌چنین خیلی هیجان‌انگیزه! مثلاً به این فکر کنید که می‌تونید توی محیط آشنا و دوست‌داشتنی دبین، به کامل‌ترین پیاده‌سازی سامانهٔ پروندهٔ21 قدرت‌مند ZFS که توی OpenSolaris هست دست‌رسی داشته باشید.

راستی یادمون نره که اوبونتو22 بچهٔ دبین هست.

این‌جوری‌هاست که بهش می‌گم حضرت دبین!

  1. Debian []
  2. Operating System []
  3. Repository []
  4. Package []
  5. Official []
  6. Package Management []
  7. Advanced Packaging Tool []
  8. Stable []
  9. Up-to-date []
  10. Site []
  11. Section []
  12. Dependency []
  13. Plugin []
  14. Architecture []
  15. Linux []
  16. Kernel []
  17. Debian GNU/kFreeBSD []
  18. Debian GNU/NetBSD []
  19. Debian GNU/Hurd []
  20. Nexenta []
  21. GNU-Darwin []
  22. File System []
  23. Ubuntu []


بسم الله الرحمن الرحیم

راه‌رو گر صد هنر دارد توکل بایدش

برگه‌ها

رایانه‌ای‌ها

آمار

در کل 171 بیننده برای این صفحه
امروز 18 بیننده
در کل 1927 بیننده
از 2011/02/6