পেজ সাইজ পান

এই পৃষ্ঠাটি ডিভাইসে ব্যবহৃত কার্নেল পৃষ্ঠার আকার পেতে বিভিন্ন উপায় তালিকাভুক্ত করে। ডিভাইসের সাথে সংযোগ করতে, আপনি 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 ছদ্ম ফাইল

ছদ্ম ফাইল /proc/<pid>/smaps এর KernelPageSize ক্ষেত্রটি পৃষ্ঠার আকার দেখায়, নিম্নরূপ দেখানো হয়েছে:

$ 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 অফসেট 56 থেকে শুরু হওয়া 8 বাইট ফাইলে ডাম্প করে, যা 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 KB
  • 3 - 64 KB

আরও তথ্যের জন্য, লিনাক্স কার্নেল ডকুমেন্টেশন দেখুন