שיעור 19: I/O ממופה זיכרון לעומת I/O מאוחסן-במאגר
כשטוענים dataset בנפח גיגה-בתים לאימון GPU, כל מיליסקונד של I/O חשוב. ישנן שלוש גישות עיקריות: buffered I/O (stdio), mmap שממפה קובץ ישירות לזיכרון הווירטואלי, ו-sendfile לאפס-העתקה ברשת. ב-NVIDIA, טעינת model weights ו-training batches — mmap נותן יתרון משמעותי על read() לקבצים גדולים.
buffered read הוא כמו להוציא ספרים מהספרייה ולהעתיק אותם לפני שמשתמשים. mmap הוא כמו ישיבה בספרייה ישירות — אין העתקה, קוראים מהספר המקורי. sendfile הוא כמו לשלוח ספר מהספרייה ישירות לחבר ללא שאי-פעם תגעו בו.
- Buffered I/O
- I/O דרך stdio (fread, fwrite) שמצבר נתונים ב-buffer בתוך user space לפני העברה לkernel. מפחית system calls אך מוסיף עותק נתונים נוסף.
- Direct I/O
- I/O שעוקף את ה-page cache של הגרעין. מופעל עם O_DIRECT. מחייב יישור buffer ל-512 בתים. שימושי כשתוכנה מנהלת cache משלה.
- zero-copy
- טכניקת I/O שמעבירה נתונים ישירות בין kernel buffers ללא העתקה ל-user space. sendfile() ו-mmap הן שתי מימושים נפוצים.
- sendfile
- system call שמעביר נתונים מ-FD קובץ ל-FD socket ישירות בתוך הגרעין — ללא העתקה ל-user space. משמש ב-Nginx ו-web servers להגשת קבצים סטטיים.
- page cache
- מאגר בזיכרון RAM של הגרעין שמאחסן תוכן קבצים שנגשנו אליהם לאחרונה. קריאות חוזרות מאותו קובץ מוגשות מ-RAM במקום מדיסק.