10

Когда я делаю cat в /proc /cpuinfo, она показывает строку с clflushsize: 64

Означает ли это, что мое ядро работает на 64 битах?

6 ответов6

15
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

Мой хостинг 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 бит

10

uname -m даст вам архитектуру, для которой ядро скомпилировано. Если он печатает i686 тогда ваше ядро 32-битное, если x86_64 то 64-битное, при условии, что у вас есть чип Intel/AMD.

7

Я думаю, что самый точный способ

getconf LONG_BIT

здесь это точно показывает 64

нашел на этом наконечнике

getconf из пакета libc-bin (в Ubuntu)

1

Если вы хотите видеть только ту платформу, на которой вы работаете, вы можете использовать

uname -i

Полный список поддерживаемых опций uname :

$ 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
0

Эти четыре команды bash расскажут вам практически все, что вы хотели бы знать:

grep -w 'lm' /proc/cpuinfo > /dev/null && echo "You have a 64bit CPU" || echo "You have a 32bit CPU"
echo "Your kernel reports it's running on a $(uname -m|sed -e 's/x86_64/64bit/' -e 's/i.86/32bit/') machine"
echo "Your /sbin/init process is $(file /sbin/init|sed -e 's/^.* \(32\|64\)-bit.*$/\1bit/')"
echo "Your C compiler is setup to produce $(getconf LONG_BIT)bit executables"

Если результаты кажутся противоречивыми, обратите внимание на следующие факты:

  • Вы можете запустить 32-битные ядра на 64-битных процессорах (но не наоборот)
  • Вы можете запускать 32-битные исполняемые файлы на 64-битных ядрах (но не наоборот)

и прочитайте эту страницу https://stackoverflow.com/questions/246007/how-to-determine-whether-a-given-linux-is-32-bit-or-64-bit и этот ответ https://unix. stackexchange.com/a/134394/73271

0

CLFLUSHSIZE ничего не говорит вам о режиме работы процессора. Согласно этому ответу, это относится к наименьшей очищаемой единице кеша. В вашем случае строки кэша считываются / записываются в единицах по 64 байта.

Вывод uname варьируется слишком сильно, чтобы быть полезным, как показывает таблица примеров из Википедии. Самый надежный метод - getconf LONG_BIT как показано в ответе Водолея. Это работает независимо от архитектуры процессора, поэтому на ARM, Power или MIPS это просто как в x86.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .