اندازه صفحه را دریافت کنید

این صفحه روش‌های مختلف دریافت اندازه صفحه هسته مورد استفاده در دستگاه را فهرست می‌کند. برای اتصال به دستگاه، می‌توانید 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 است. بیت 1 مقدار 0 و بیت 2 مقدار 1 را دارد. با خواندن این دو بیت، 10b یا 2 را به صورت اعشاری دریافت می‌کنیم. بر اساس مقدار این بیت‌ها، می‌توانید اندازه صفحه هسته را تعیین کنید:

  • 0 - نامشخص
  • 1 تا ۴ کیلوبایت
  • 2 - ۱۶ کیلوبایت
  • 3 - ۶۴ کیلوبایت

برای اطلاعات بیشتر، به مستندات هسته لینوکس مراجعه کنید.