בדף הזה מפורטות הדרכים השונות לקבל את גודל הדף של ליבת המערכת שמשמש במכשיר. כדי להתחבר למכשיר, אפשר להשתמש ב-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
: הליבה משתמשת בדפים בגודל 4,096 בייט. -
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
יוצר קובצי dump בפורמט הקסדצימלי, עשרוני או בפורמטים אחרים.-
-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
. הביט 1 מכיל את הערך 0
, והביט 2 מכיל את הערך 1
. כשקוראים את שני הביטים האלה, מקבלים 10b
או 2
בערך עשרוני. על סמך הערך של הביטים האלה, אפשר לקבוע את גודל הדף של ליבת המערכת:
0
– לא צוין-
1
- 4 KB -
2
– 16 KB -
3
– 64 KB
מידע נוסף זמין במאמרי העזרה של ליבת Linux