Когда я делаю cat в / proc / cpuinfo, она показывает строку с clflushsize: 64
Означает ли это, что мое ядро работает в 64 битах?
Когда я делаю cat в / proc / cpuinfo, она показывает строку с clflushsize: 64
Означает ли это, что мое ядро работает в 64 битах?
Ответы:
uname -a
скажет вам ядро - последний бит скажет вам архитектуру.
Два примера:
Мой мак:
Darwin Mac.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386
Хостинг My Dreamhost:
Linux ecco 2.6.24.5-serf-xeon-c6.1-grsec #1 SMP Tue Oct 7 06:18:04 PDT 2008 x86_64 GNU/Linux
i386 = 32 бит
x86_64 = 64 бит
uname -m
даст вам архитектуру, для которой ядро скомпилировано. Если он печатает, i686
то ваше ядро 32-битное, если x86_64
тогда оно 64-битное, при условии, что у вас есть чип Intel / AMD.
i386
на более старых 32-битных платформах (и я даже видел, что некоторые пакеты скомпилированы i586
- хотя я не уверен, будет ли он когда-либо выводиться uname
)
uname -m
дает вам архитектуру, которую ядро выбирает для этого конкретного процесса, а не нативную архитектуру ядра. Смотрите эту ссылку .
uname -m
действительно сообщает реальную архитектуру. Если это не так, то, скорее всего, администратор действительно хочет, чтобы вы поверили, что вы используете другую архитектуру, и вам лучше всего признать, что он знает, что делает. Если вы являетесь администратором, и вы балуетесь, setarch
то вы все равно знаете лучше.
setarch
и вы можете их использовать, и вы можете вызывать такой скрипт, даже не подозревая, что он вызывает uname -m
что-то другое. Возможно, возможно даже вероятно, что именно такие вопросы и являются причиной, по которой ОП задает вопрос.
init
считает, что оно 32-разрядное: для этого используется 64-разрядное ядро с 32-разрядным пользовательским пространством. Многие системы компиляции зависят от uname -m
определения флагов компилятора, например, флаг GDB, они должны быть снабжены поддельной личностью. Но какое-то другое пользовательское приложение может по-прежнему хотеть знать, какое у него ядро (например, для некоторых низкоуровневых нужд), независимо от индивидуальности.
Я думаю, что самый точный способ
getconf LONG_BIT
здесь это точно показывает 64
нашел на этом наконечнике
getconf
это из пакета libc-bin (в Ubuntu)
Если вам нужен простой, но подробный отчет о вашей системе (CPU, Kernel и Core OS), а не только ядре, то вот небольшой скрипт bash, который быстро даст вам ответы.
Если вы достаточно знаете об особенностях 32-битных / 64-битных процессоров и S / W, это просто удобно. Если вы не очень много знаете и думаете, что ваша «система» является 32-битной или 64-битной, то это поможет вам обнаружить, что истина может быть более сложной (части вашей системы могут быть 64-битными, а другие 32-битными), не вводя вас в заблуждение.
Опять же, этот сценарий (и ответ) не для буквального вопроса "Как я узнаю, работает ли мое ядро Linux в 32-битной или 64-битной версии?" но для тех кто тоже хочет знать арку своего процессора и ядра ОС SW.
Вот примеры для довольно необычного случая:
You have a 64 bit CPU
Your kernel reports that the architecture is 32 bit
Your /sbin/init process is 64 bit
Your C compiler is configured to produce 32 bit executables
You have a 64 bit CPU
Your kernel reports that the architecture is 32 bit
If you are not the admin he can make a 64bit kernel report 32bit (see man setarch)
In this case he has (because we have 64bit programs)
Your /sbin/init process is 64 bit
Most other core OS programs will probably be 64 bits also.
You may use the following command to check a specific program.
file -L /path/to/program
Your C compiler is configured to produce 32 bit executables
(Note that a 64bit compiler may be setup to produce 32bit code)
Эти 4 строки дают всю необходимую информацию.
grep -w 'lm' /proc/cpuinfo > /dev/null && echo "You have a 64 bit CPU" || echo "You have a 32 bit CPU"
echo "Your kernel reports that the architecture is $(uname -m|sed -e 's/x86_64/64 bit/' -e 's/i.86/32 bit/')"
echo "Your /sbin/init process is $(file /sbin/init|sed -e 's/^.* \(32\|64\) bit.*$/\1bit/')"
echo "Your C compiler is configured to produce $(getconf LONG_BIT) bit executables"
Этот сценарий печатает много объяснений и полезен, если у вас нет опыта по этому вопросу, и вы столкнулись с особым случаем.
#!/bin/bash
# collect system info
grep -w 'lm' /proc/cpuinfo > /dev/null && CPU=64 || CPU=32
ARCH=$(uname -m|sed -e 's/x86_64/64/' -e 's/i.86/32/')
INIT=$(file -L /sbin/init|sed -e 's/^.* \(32\|64\)-bit.*$/\1/')
COMPILER=$(getconf LONG_BIT)
# if all values are the same we set UNIFORM="YES"
! echo "$CPU $ARCH $INIT $COMPILER" | grep -q "$CPU $CPU $CPU $CPU" && UNIFORM="NO" || UNIFORM="YES"
# report to the user
echo "You have a $CPU bit CPU"
echo "Your kernel reports that the architecture is $ARCH bit"
if [ "$UNIFORM" = "NO" ] && [ "$ARCH" = "32" ] ; then
echo " If you are not the admin he can make a 64bit kernel report 32bit (see man setarch)"
if [ "$INIT" = "64" ] || [ "$COMPILER" = "64" ] ; then
echo " In this case he has (because we have 64bit programs)"
else
echo " We don't see such signs so you most likely run a 32bit kernel"
echo " (A 64bit CPU can run 32bit kernels)"
fi
fi
echo "Your /sbin/init process is $INIT bit"
if [ "$CPU" = "64" ] ; then
echo " Most other core OS programs will probably be $INIT bits also."
echo " You may use the following command to check a specific program."
echo " file -L /path/to/program"
fi
if [ "$UNIFORM" = "NO" ] && [ "$INIT" = "32" ] ; then
echo " (Note that a 64bit kernel may start a 32bit init process)"
fi
echo "Your C compiler is configured to produce $COMPILER bit executables"
if [ "$UNIFORM" = "NO" ] && [ "$COMPILER" = "32" ] ; then
echo " (Note that a 64bit compiler may be setup to produce 32bit code)"
fi
Если вы хотите узнать больше, прочитайте эти две страницы, откуда я получил большую часть информации a) /programming/246007/how-to-determine-whether-a-given-linux-is-32- бит или 64-бит б) https://unix.stackexchange.com/a/134394/73271
Если вы хотите видеть только ту платформу, на которой вы работаете, вы можете использовать
uname -i
Полный список поддерживаемых опций для uname
IS
$ uname --help
Usage: uname [OPTION]...
Print certain system information. With no OPTION, same as -s.
-a, --all print all information, in the following order,
except omit -p and -i if unknown:
-s, --kernel-name print the kernel name
-n, --nodename print the network node hostname
-r, --kernel-release print the kernel release
-v, --kernel-version print the kernel version
-m, --machine print the machine hardware name
-p, --processor print the processor type or "unknown"
-i, --hardware-platform print the hardware platform or "unknown"
-o, --operating-system print the operating system
--help display this help and exit
--version output version information and exit
uname -i
печатные издания GenuineIntel
, которые не совсем то, что он ищет.
Unknown
на Mac.
i386
на моей машине!
CLFLUSHSIZE
ничего не говорит вам о режиме работы процессора. Согласно этому ответу , это относится к наименьшей очищаемой единице кеша. В вашем случае строки кэша считываются / записываются в единицах по 64 байта.
uname
результат слишком велик, чтобы быть полезным, как показывает таблица примеров из Википедии . Самый надежный метод, getconf LONG_BIT
как показано в ответе Водолея . Это работает вне зависимости от архитектуры процессора, поэтому на ARM, Power или MIPS это просто как на x86.