אחזור של גודל הדף

בדף הזה מפורטות הדרכים השונות לקבלת גודל הדף של הליבה שבו נעשה שימוש במכשיר. כדי להתחבר למכשיר, אפשר להשתמש ב-adb.

$ adb shell

שימוש בקוד תכנות

ב-C++, עדיף להשתמש ב-getpagesize(2):

# include <unistd.h>
...
... = getpagesize();

ב-Java, אפשר להשתמש בהגדרת המערכת:

import android.system.Os;
import android.system.OsConstants;

... = Os.sysconf(OsConstants._SC_PAGE_SIZE);

שימוש בפקודה getconf

משתמשים בפקודה getconf כדי לקבל את גודל הדף, כפי שמוצג בהמשך:

$ getconf PAGE_SIZE
4096

שימוש בקובץ הפסאודו /proc//smaps

בשדה KernelPageSize בקובץ המדומה /proc/<pid>/smaps מוצג גודל הדף, כפי שמוצג כך:

$ grep KernelPageSize /proc/1/smaps
KernelPageSize:        4 kB

שימוש בדגל הקישור LD_SHOW_AUXV=1

משתמשים בדגל LD_SHOW_AUXV כדי להדפיס את וקטור העזר של התוכנה שעומדת להפעלה. השדה AT_PAGESZ מכיל את גודל הדף, כפי שמוצג בהמשך:

$ LD_SHOW_AUXV=1 ls
AT_SYSINFO_EHDR      0x7250460000
AT_MINSIGSTKSZ       4720
AT_HWCAP             0b11111111111111111111111111111111
AT_PAGESZ            4096
AT_CLKTCK            100
AT_PHDR              0x5fda1e0040
AT_PHENT             56
AT_PHNUM             12
AT_BASE              0x72502f8000
AT_FLAGS             0
AT_ENTRY             0x5fda210000
AT_UID               0
AT_EUID              0
AT_GID               0
AT_EGID              0
AT_SECURE            0
AT_RANDOM            0x7fc59d66f8
AT_HWCAP2            0b100011001111111111
AT_EXECFN            "/system/bin/ls"
AT_PLATFORM          "aarch64"
data            dev.        init    vendor

שימוש בקובץ הפסאודו /proc/config.gz

בודקים את הגדרת הליבה של גודל הדף בקובץ הפסאודו /proc/config.gz. התצורות האפשריות לגודל הדף הן:

  • CONFIG_ARM64_4K_PAGES=y: הליבה משתמשת בדפים של 4096 בייטים.
  • CONFIG_ARM64_16K_PAGES=y: הליבה משתמשת בדפים של 16,384 בייטים.
  • CONFIG_ARM64_64K_PAGES=y: הליבה משתמשת בדפים עם 65,536 בייטים.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y

השתמשו בווקטור עזר

כשתוכנית מופעלת, הליבה מקצה ומפעילה את הווקטור המשני עם מידע, כמו גודל הדף, שמשמש את הקישור הדינמי. אפשר לקרוא את הווקטור העזר מהקובץ המדומה /proc/<pid>/auxv. אפשר להציג את גודל הדף מהוקטור המשני של תהליך 1 באופן הבא:

$ od -N8 -j56 -td8 -An /proc/1/auxv
4096

איפה:

  • od פורקת קבצים בפורמטים הקסדצימלי, העשרוני או פורמטים אחרים.
  • -N8 -j56 מעביר את 8 הבייטים שמתחילים במרווח 56 לקובץ, בהתאם ל-AT_PAGESZ.
  • -td8 מעצב את הערך כמספר שלם עשרוני באורך 8 בייטים.
  • -An גורם להצגת הערך בלבד, ולא את הכתובת שלו.

קריאה מקובץ אימג' של ליבה

אפשר לקרוא את הכותרת של קובץ אימג' של ליבה כדי לקבוע את גודל הדף. האפשרות הזו שימושית בתוכנת האתחול, אם אתם צריכים לדעת איזה סוג ליבה אתם מבצעים.

גודל הדף נמצא בבייט ה-25 של כותרת הליבה:

 $ file Image
Image: Linux kernel ARM64 boot executable Image, little-endian, 16K pages

 $ hexdump -C Image -n 48
00000000  4d 5a 40 fa ff 7f 7b 14  00 00 00 00 00 00 00 00  |MZ@...{.........|
00000010  00 00 64 02 00 00 00 00  0c 00 00 00 00 00 00 00  |..d.............|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030

בדוגמה הזו, הערך הוא 0x0C = 0000 1100b. הבייט הראשון מכיל את הערך 0, והבייט השני מכיל את הערך 1. כשקוראים את שני הביטים האלה, מקבלים 10b או 2 בספרות עשרוניות. על סמך הערך של הביטים האלה, אפשר לקבוע את גודל הדף של הליבה:

  • 0 – לא צוין
  • 1 – 4KB
  • 2 – 16 KB
  • 3 – 64 KB

למידע נוסף, עיינו במסמכי התיעוד של ליבה Linux