این صفحه روشهای مختلف دریافت اندازه صفحه هسته مورد استفاده در
دستگاه را فهرست میکند. برای متصل شدن به دستگاه، میتوانید از adb استفاده کنید.
$ adb shell
استفاده از کد برنامهنویسی
در C++، getpagesize(2) را ترجیح دهید:
# include <unistd.h>
...
... = getpagesize();
در جاوا، میتوانید از پیکربندی سیستم استفاده کنید:
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: هسته از صفحههای ۴۰۹۶ بایتی استفاده میکند. -
CONFIG_ARM64_16K_PAGES=y: هسته از صفحههای ۱۶۳۸۴ بایتی استفاده میکند. -
CONFIG_ARM64_64K_PAGES=y: هسته از صفحههای ۶۵۵۳۶ بایتی استفاده میکند.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y
استفاده از بردار کمکی
وقتی برنامهای اجرا میشود، هسته بردار کمکی را با اطلاعاتی مثل اندازه صفحه که توسط پیونددهنده پویا استفاده میشود اختصاص میدهد و مقداردهی اولیه میکند. بردار کمکی را میتوان از فایل شبه
/proc/<pid>/auxv خواند. اندازه صفحه از بردار کمکی فرایند ۱ میتواند بهصورت زیر نشان داده شود:
$ od -N8 -j56 -td8 -An /proc/1/auxv
4096
مکان:
odفایلها را در قالبهای شانزدهشانزدهی، اعشاری، یا قالبهای دیگر تخلیه میکند.-
-N8 -j56هشت بایت را که از افست ۵۶ شروع میشود در فایل تخلیه میکند، که مربوط بهAT_PAGESZاست. -
-td8مقدار را بهعنوان عدد صحیح ۸ بایتی اعشاری قالببندی میکند. -Anباعث میشود فقط مقدار نشان داده شود، نه نشانی آن.
خواندن از تصویر هسته
میتوانید سرصفحه تصویر هسته را بخوانید تا اندازه صفحه را تعیین کنید. این کار در راهانداز سیستم مفید است، اگر لازم باشد بدانید چه نوع هستهای را راهاندازی میکنید.
اندازه صفحه در بایت بیستوپنجم سرایند هسته قرار دارد:
$ 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- ۴ کیلوبایت-
2- ۱۶ کیلوبایت -
3- ۶۴ کیلوبایت
برای اطلاعات بیشتر، مستندات هسته Linux را ببینید