ספריית Interception

אפשר להשתמש בספרייה libioil כדי לשפר את הביצועים של פעולות קריאה וכתיבה ב-DFuse מאפליקציות שמשתמשות ב-libc. הספרייה עוקפת את ליבת מערכת ההפעלה על ידי יירוט של קריאות קריאה וכתיבה של POSIX מהאפליקציה, ומטפלת בהן ישירות במרחב המשתמש.

שימוש ב-libioil

כדי להשתמש בספריית היירוט, צריך להגדיר את LD_PRELOAD כך שיצביע על הספרייה המשותפת בספריית ההתקנה של DAOS:

LD_PRELOAD=/usr/lib64/libioil.so

לדוגמה:

$ dd if=/dev/zero of=./foo bs=1G count=20
20+0 records in
20+0 records out
21474836480 bytes (21 GB, 20 GiB) copied, 45.6925 s, 470 MB/s

$ LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=20
20+0 records in
20+0 records out
21474836480 bytes (21 GB, 20 GiB) copied, 15.735 s, 1.4 GB/s

אפשר גם לקשר אפליקציות לספריית היירוט בזמן ההידור באמצעות הדגל -lioil.

כדי להעריך את הביצועים באמצעות ספריית היירוט, אפשר לעיין במאמרים שיקולים לגבי ביצועים ובדיקת ביצועים.

מעקב אחר פעילות

כדי להפעיל דוחות פעילות בספריית היירוט, צריך להגדיר את משתנה הסביבה D_IL_REPORT. הפונקציה מחזירה סיכום קצר של הפעילות ב-destructor של הספרייה המשותפת, בדרך כלל כשהתוכנית יוצאת.

הערך ��מוקצה ל-D_IL_REPORT מגדיר את מספר הקריאות לקריאה ולכתיבה שיתועדו ב-stderr. כדי לרשום ביומן את כל השיחות, צריך להגדיר את הערך -1. כדי להדפיס את הסיכום רק ביציאה מהתוכנית, מגדירים את הערך ל-0.

לדוגמה:

$ D_IL_REPORT=1 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=5
[libioil] Intercepting write of size 1073741824
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 4.13708 s, 1.3 GB/s

$ D_IL_REPORT=3 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=5
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 4.18626 s, 1.3 GB/s

$ D_IL_REPORT=-1 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=5
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 4.12114 s, 1.3 GB/s

בתוכניות מסוימות, כולל רוב כלי השירות של GNU מחבילת coreutils, יש פונקציית הרס כדי לסגור את stderr ביציאה. כלומר, למרות שספריית היירוט פועלת עבור פקודות בסיסיות רבות כמו cp ו-cat, אי אפשר לראות את הסיכום שנוצר על ידי ספריית היירוט.