El X5560 es un único chip . Se ve así:

grep "physical id" le dice que tiene UN procesador físico instalado.
Si quita el disipador de calor de la parte superior, puede ver esto:un solo muere físico (boca abajo) :

Si pudieras quitar ese dado y darle la vuelta, se vería así:

En ese único troquel físico hay cuatro núcleos de CPU físicos construido sobre el silicio :

grep "cpu cores" le dice que su procesador tiene cuatro núcleos físicos incorporados.
Cada núcleo es un solo procesador con una unidad de punto flotante, varias unidades de ejecución de enteros, un par de pilas de registros y alguna otra magia que permite que cada núcleo único ejecute de manera efectiva dos flujos de instrucciones independientes (hilos) a la vez.

top le dice que todos los procesadores y núcleos de su computadora, colectivamente, pueden ejecutar ocho flujos de trabajo independientes a la vez; le dice que el sistema operativo puede programar ocho subprocesos simultáneos para ejecutarse en cualquier momento.
¿Qué CPU estás usando? ¿Cuántos subprocesos hay por núcleo físico?
cat /proc/cpuinfo muestra el número de núcleos físicos mientras que top muestra el número total de hilos presentes.
Creo que su CPU tiene 4 núcleos físicos y 2 núcleos lógicos por núcleo físico. Entonces es top mostrando 8.
Además contenidos de /proc/cpuinfo es algo dependiente de la implementación. Al igual que en el shell de Android rooteado, el cpuinfo el archivo no contiene ningún término cpu cores .
Sin embargo en cpuinfo cada hilo se llama processor : X , donde X es el hilo no. Entonces, el último hilo no será el mismo que top/htop salida.
Resultado de nproc --all también será consistente con top/htop
top muestra una "CPU" por CPU lógica; en x86, ese es el producto de la cantidad de sockets en el sistema, por la cantidad de núcleos físicos por socket, por la cantidad de subprocesos por núcleo.
El cpu cores entrada en /proc/cpuinfo , nuevamente en x86, muestra la cantidad de núcleos físicos. Para encontrar el número de núcleos lógicos, como se usa en top , deberías mirar el siblings valor en su lugar:
cat /proc/cpuinfo | grep "siblings" | uniq
Esto se describe en detalle en la documentación del kernel.
lscpu proporciona información sobre las CPU instaladas que es más fácil de entender que /proc/cpuinfo (o más bien, presenta la misma información de una manera más simple).