בדף הזה מפורטות הדרכים השונות לקבלת גודל הדף של הליבה שבו נעשה שימוש במכשיר. כדי להתחבר למכשיר, אפשר להשתמש ב-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
– 4KB2
– 16 KB3
– 64 KB
למידע נוסף, עיינו במסמכי התיעוד של ליבה Linux