این صفحه راه های مختلف برای دریافت اندازه صفحه هسته مورد استفاده در دستگاه را فهرست می کند. برای اتصال به دستگاه می توانید از 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
: هسته از صفحات 4096 بایتی استفاده می کند. -
CONFIG_ARM64_16K_PAGES=y
: هسته از صفحات 16384 بایتی استفاده می کند. -
CONFIG_ARM64_64K_PAGES=y
: هسته از صفحات 65536 بایتی استفاده می کند.
$ 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
است. بیت 1 دارای مقدار 0
و بیت 2 دارای مقدار 1
است. با خواندن این دو بیت، 10b
یا 2
در اعشار بدست می آوریم. بر اساس مقدار این بیت ها، می توانید اندازه صفحه هسته را تعیین کنید:
-
0
- نامشخص -
1
- 4 کیلوبایت -
2
- 16 کیلوبایت -
3
- 64 کیلوبایت
برای اطلاعات بیشتر، به مستندات هسته لینوکس مراجعه کنید