گروه کاربران لینوکس مشهد

گزارش جلسه ۱۵۱ام گروه کاربران لینوکس مشهد

این جلسه در تاریخ ۲۱ خرداد ۱۳۹۳ در محل برگزاری جلسات در آموزشگاه دیتاسنتر شرق برگزار شد. مباحثی که در این جلسه به آنها پرداخته شد را در زیر مشاهده خواهید نمود:

خط فرمان: مدیریت دسترسی به حافظه غيريکسان مهدی عطائیان

نوما NUMA (مخفف non-uniform memory access) یک طراحی حافظه است که در این طرح هر پروسسور حافظه محلی مخصوص به خود را دارد و هر پروسسور با سرعت بیشتری می‌تواند به حافظه محلی خود نسبت به حافظه غیر محلی دسترسی داشته باشد. این معماری بیشتر مناسب پروسس‌هایی است که وابسته به یک کاربر یا تسک باشند در نتیجه اجرای پروسس در یک هسته و با یک رم اختصاصی سرعت اجرا را بیشتر می‌کند. در سیستم‌عامل گنو/لینوکس از ابزار numactl برای کنترل سیاست‌های نومای پروسس‌ها استفاده می‌کنیم.

برای بررسی وضعیت سخت‌افزار NUMA از دستور زیر استفاده می‌کنیم. با دستور زیر می‌توانیم مشخصات پروسسور را مشاهده کنیم.

$ numactl --hardware

چنانچه در خروجی دستور تنها ۱ نود مشاهده شد به این معنی است که معماری پروسسور ما نمی‌تواند از numa پشتیبانی کند.

$numactl  --hardware 
available: 1 nodes (0)
node 0 cpus: 0 1 2 3
node 0 size: 3735 MB
node 0 free: 172 MB
node distances:
node   0 
  0:  10

اگر در خروجی بیش از یک نود وجود داشت به این معنی است که پروسسور از numa پشتبیانی می‌کند.

$ numactl --hardware 
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 8 9 10 11
node 0 size: 16374 MB
node 0 free: 10935 MB
node 1 cpus: 4 5 6 7 12 13 14 15
node 1 size: 16384 MB
node 1 free: 15298 MB
node distances:
node   0   1 
  0:  10  20 
  1:  20  10

در خروجی بالا دو NODE داریم (که با شماره ۰ و ۱ شناخته می‌شوند) در nod شماره ۰ سی‌پی‌یو‌های ۰ و ۱ و ۲ و ۳ و ۸ و ۹ و ۱۰ و ۱۱ قرار دارد. رم اختصاص یافته به نود صفر ۱۶۳۷۴ مگابایت است که از این رم ۱۰۹۳۵ مگا بایت آن آزاد است. اطلاعات نود ۱ نیز به همین شکل تفسیر می‌شود.

همچنین در جدول node distance سرعت دسترسی هر نود به مموری‌ها مشخص شده است. در این مثال هر نود با سرعت ۱۰ به حافظه اختصاصی خود متصل می‌شود اما نودها با حافظه دیگر نودها با سرعت ۲۰ ارتباط برقرار می‌کند.

نکته: وضعیت numa را با استفاده از اطلاعات موجود در مسیر /sys نیز می‌توان به دست آورد.

# ls /sys/devices/system/node/
node0/ node1/ 
# ls /sys/devices/system/node/node0
compact    memory1    memory112  memory126  memory18  memory39  memory52  memory66  memory8   memory93
cpu0       memory10   memory113  memory127  memory19  memory4   memory53  memory67  memory80  memory94
cpu1       memory100  memory114  memory128  memory2   memory40  memory54  memory68  memory81  memory95
cpu10      memory101  memory115  memory129  memory20  memory41  memory55  memory69  memory82  memory96
cpu11      memory102  memory116  memory13   memory21  memory42  memory56  memory7   memory83  memory97
cpu2       memory103  memory117  memory130  memory22  memory43  memory57  memory70  memory84  memory98
cpu3       memory104  memory118  memory131  memory23  memory44  memory58  memory71  memory85  memory99
cpu8       memory105  memory119  memory132  memory3   memory45  memory59  memory72  memory86  numastat
cpu9       memory106  memory12   memory133  memory32  memory46  memory6   memory73  memory87  scan_unevictable_pages
cpulist    memory107  memory120  memory134  memory33  memory47  memory60  memory74  memory88  vmstat
cpumap     memory108  memory121  memory135  memory34  memory48  memory61  memory75  memory89
distance   memory109  memory122  memory14   memory35  memory49  memory62  memory76  memory9
hugepages  memory11   memory123  memory15   memory36  memory5   memory63  memory77  memory90
meminfo    memory110  memory124  memory16   memory37  memory50  memory64  memory78  memory91
memory0    memory111  memory125  memory17   memory38  memory51  memory65  memory79  memory92

برای مشاهده وضعیت NUMA از دستور زیر استفاده می‌کنیم.

$ numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 
cpubind: 0 
nodebind: 0

دستور numastat برای مشاهده اطلاعات حافظه استفاده می‌شود.

# numastat  
                           node0           node1
numa_hit                 4134896         1809856
numa_miss                      0               0
numa_foreign                   0               0
interleave_hit             12114           12083
local_node               4134765         1795945
other_node                   131           13911

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

$ numactl --membind=7 --cpunodebind=7 mongo

با دستور زیر می‌توانیم اجرای صحیح پروسس‌ها بر اساس سیاست numa را بررسی کنیم.

$ for i in `ps -ef | awk '{print $2}'`; do taskset -c -p $i; done

سیاست‌های numa چهار نوع است:

Types of NUMA policy
Local (default)
Bound to specific memory nodes
Interleave
Preferred

مثال ۱:

$ numactl --interleave=all program -opts args
$ numactl --cpubind=0 --membind=0,1 program -opts args
$ numactl --preferred=1
$ numactl --localalloc /dev/shm/file
$ numactl --show

مثال ۲:

$ numastat
/proc/sys/devices/system/node/*/meminfo
cpuset cgroup
cpuset.cpus and cpuset.mems tunables

مثال ۳:

$ sudo gcc -o program numac.c -lnuma    
$ cat nano numa.c 
#include <numa.h>
#include <stdio.h>

int main(int argc, char **argv) {
   if (numa_available() < 0) {
      printf("numa_* functions unavailable\n");
      return 1;
   }
   printf("numa_available: %d \n\r", numa_available());
   printf("numa_num_possible_nodes: %d \n\r", numa_num_possible_nodes   ());
   printf("numa_max_possible_node: %d \n\r", numa_max_possible_node ());
   printf("numa_num_configured_nodes: %d \n\r", numa_num_configured_nodes());
   printf("numa_num_configured_cpus: %d \n\r", numa_num_configured_cpus());
   //   int myInt;
   //   printf("numa num: ");
   //   scanf("%d", &myInt);
   //   printf("numa_node_size: %d \n\r", numa_node_size(myInt, *free)
}

گزارش اولین هکاتون اختصاصی مشهدلاگ رامین نجارباشی

اولین هکاتون اختصاصی گروه مشهدلاگ با همکاری گروه لینوکس و پایتون مشهد در روزهای ۱۴ الی ۱۵ خرداد ماه ۱۳۹۳ برگزار شد. در این ارائه آقای رامین نجارباشی از اهداف، فلسفه و همچنین مراحل برگزاری هکاتون صحبت کردند. برای مشاهده فایل ارائه می‌توانید به اینجا مراجعه نمایید. همچنین در زیر می‌توانید به اختصار با پروژه‌هایی که در این دوره هکاتون توسعه یافتند آشنا شوید:

  • پروژه ROI-M رامین نجارباشی، بیژن ابراهیمی، مهدی عطائیان، صادق داوطلب

    پروژه ROI-M، مدیریت نقاط مورد توجه یابحرانی را بعهده دارد. در این پروژه محیط توسط یکسری حسگر (Sensors) مونیتور می‌شوند. این حسگرها می‌توانند از وضعیت باز و بسته بودن در تا وضعیت روشنایی و حضور افراد در اتاق و یا هر چیز دیگری را رصد کنند. سپس این اطلاعات از طریق رابط وب و REST API در اختیار افراد و برنامه‌نویسان قرار گیرد. سورس برنامه را می‌توانید از مخزن مشهد‌لاگ در گیت‌هاب مشاهده و دانلود نمایید و یا در آپارت فیلم مربوط به عملکرد پروژه را مشاهده نمایید. فایل ارائه را نیز می‌توانید از اینجا مشاهده نمایید.

  • پروژه IronLOIC مصطفی ستاری، رضا میرزازاده

    ابزار ‪LOIC‬ ‪(Low Orbit Ion Canon)‬ ابزاری متن‌باز برای تست شبکه است که توسط گروه Anonymous در سال ۲۰۱۱ توسعه داده شد. اعضای تیم geek (آقایان مصطفی شبگرد و رضا میرزازاده) در این هکاتون تصمیم به بهبود عملکرد و همچنین افزایش قابلیت‌های این ابزار گرفتند. حاصل این پروژه IronLOIC شد که سورس این برنامه را می‌توانید از این آدرس دریافت کنید.

بررسی اسکریپت Webtastic بیژن ابراهیمی

در این ارائه با آقای ابراهیمی همراه بودیم تا نگاهی به اسکریپت سایت‌ساز استاتیک مشهدلاگ به نام WebTastic بیاندازیم. در این ارائه ابتدا با تفاوت‌ها، مزایا و معایب سایت‌های داینامیک و استاتیک آشنا شدیم و سپس به بررسی نحوه عملکرد اسکریپت پرداخته شد. همچنین در ادامه قابلیت‌هایی را نیز به کد اضافه کردیم که می‌توان به امکان استفاده از cache برای ساخت فایل‌های ویرایش شده و همچنین ساخت پلاگین pagination اشاره کرد. برای مشاهده سورس‌کُد برنامه و سایت آزمایشی مشهدلاگ می‌توانید به مخزن مشهدلاگ در گیت‌هاب مراجعه نمایید.

بحث آزاد

در ادامه جلسه و طبق روال معمول، دقایقی از جلسه به بحث آزاد بین اعضای گروه سپری شد. در زیر لیستی از مهم‌ترین موارد مطرح شده را مشاهده خواهید نمود.

  • پیگیری مسئولیت‌ها و وظایف نیمه‌تمام گروه علی موسوی

    پیرو فراخوان قبلی جهت «کمک اعضا به انجام فعالیت‌های در دست اقدام گروه» در لیست پستی گروه، اعضای زیر جهت انجام امور ذکر شده در جلوی نامشان اعلام آمادگی نمودند:
    • آقای «مهدی عطائیان» به عنوان مسئول پیگیری و مدیریت حساب‌های کاربری مشهدلاگ.
    • آقای «رامین نجارباشی» به عنوان مسئول پیگیری ثبت گروه به عنوان NGO.

برای دریافت اطلاعات بیشتر می‌توانید به صفحه‌ی «فعالیت‌های در دست اقدام» در ویکی گروه مراجعه نموده و در صورت تمایل از طریق لیست پستی گروه برای انجام هر یک از فعالیت‌های در دست اقدام، اعلام آمادگی نمایید.

این جلسه با توجه به تاخیر نیم ساعتی در شروع، ساعت ۱۹:۵۰ دقیقه خاتمه یافت. ضمن عذرخواهی از دوستان حاضر در جلسه بابت این تاخیر، گروه آماده دریافت هرگونه نظر، پیشنهاد و انتقاد شما دوستان و اعضای گروه می‌باشد.