49 votos

¿Por qué el isótopo en OS X es tan ridículamente lento?

No puedo entender por qué el lsof de mi Mac (10.8.2, MacBook Pro) es tan lento.

En mi Mac, lsof toma más de un minuto:

$ touch /tmp/testfile
$ time lsof /tmp/testfile

real   1m16.483s
user   0m0.029s
sys    1m15.969s

En una típica caja de Linux, ejecutando Ubuntu 12.04, lsof toma 20 ms:

$ touch /tmp/testfile
$ time lsof /tmp/testfile

real   0m0.023s
user   0m0.008s
sys    0m0.012s

El problema persiste si corro lsof -n (para evitar las búsquedas de DNS). Además, intenté comprobar qué llamadas al sistema se hacen por lsof usando dtruss y descubrió que está llamando proc_info decenas de miles de veces:

$ sudo dtruss lsof /tmp/testfile 2> /tmp/dump
$ cat /tmp/dump | sort | uniq -c | sort -nr | head
10000 proc_info(0x2, 0x1199, 0x8) = 1272 0
 6876 proc_info(0x2, 0x45, 0x8) = 1272 0
 2360 proc_info(0x2, 0x190D, 0x8) = 1272 0
 1294 proc_info(0x2, 0xFF, 0x8) = 1272 0
 1152 proc_info(0x2, 0x474, 0x8) = 1272 0
 1079 proc_info(0x2, 0x2F, 0x8) = 1272 0
  709 proc_info(0x2, 0xFE, 0x8) = 1272 0
  693 proc_info(0x2, 0x1F, 0x8) = 1272 0
  623 proc_info(0x2, 0x11A, 0x8) = 1272 0
  528 proc_info(0x2, 0xF7, 0x8) = 1272 0

¿Alguna idea? He hecho estas pruebas y he obtenido los mismos resultados usando tanto la versión de lsof incluido con OS X (4.85) así como la última versión de ftp://sunsite.ualberta.ca/pub/Mirror/lsof/ (4.87).

(Para los curiosos, la razón por la que estoy frustrado por esta actuación es que cuando arrastro imágenes a Evernote, se ejecuta lsof en el proceso de copiar el archivo, causando que mi sistema se cuelgue durante un minuto completo cada vez que intento insertar una imagen en Evernote).

1voto

Oskar Puntos 1242

No tengo una gran respuesta de por qué tu sistema parece tardar un minuto más que mi Mac más lento en llamar proc_info 30 mil veces, pero tu cronometraje muestra que tanto linux como OS X están en el rango de 10 ms para el tiempo de usuario para ejecutar lsof. ¿Puedes reproducir ese tiempo lento de arranque en Modo Seguro para descartar otras cargas en tu CPU?

He probado tres Macs y las que corren 10.7.5 son un segundo más rápidas que mi Mac 10.8.2. El viejo sistema operativo es más lento, con procesadores Core 2 Duo, y pensaría que una Mac i7 con el nuevo sistema operativo sería tan rápida o más rápida que el viejo sistema operativo y la CPU, pero me equivocaría.

Todas las máquinas hacen más o menos el mismo número de llamadas proc_info, y todas las máquinas tienen poco tiempo de usuario para el comando - pero puede ser que usted esté en un tiempo total más lento (y no tengo ni idea de por qué el suyo es tan dramáticamente más lento que mi Mountain Lion Mac).

11 pulgadas Air (i7) 2011 corriendo Mountain Lion - SSD:

$ system_profiler SPSoftwareDataType
      System Version: OS X 10.8.2 (or something)
      Kernel Version: Darwin 12.3.0
      Secure Virtual Memory: Enabled
$ time lsof /tmp/testfile 

real    0m1.179s
user    0m0.012s
sys     0m1.158s
$ sudo dtruss lsof /tmp/testfile 2> /tmp/dump
$ cat /tmp/dump | sort | uniq -c | sort -nr | head
9310 proc_info(0x2, 0x68, 0x8)           = 1272 0
1220 proc_info(0x2, 0xCEB6, 0x8)                 = 1272 0
$ cat /tmp/dump | cut -c -9 | sort | uniq -c | sort -nr | head
30884 proc_info
 116 write(0x4
  87 read(0x5,
  60 sigaction
  60 setitimer
  35 stat64("/
  30 sigprocma
  30 sigaltsta
  21 close(0x3
  18 close(0x6 

MacBook Pro de 15 pulgadas con Lion Server - HDD:

$ system_profiler SPSoftwareDataType
      System Version: Mac OS X Server 10.7.5 (11G63)
      Kernel Version: Darwin 11.4.2
$ time lsof /tmp/testfile

real    0m0.329s
user    0m0.005s
sys     0m0.324s

iMac de 27 pulgadas corriendo Lion - HDD:

$ system_profiler SPSoftwareDataType
      System Version: Mac OS X 10.7.5 (11G63b)
      Kernel Version: Darwin 11.4.2
$ time lsof /tmp/testfile

real    0m0.066s
user    0m0.002s
sys     0m0.065s
$ sudo dtruss lsof /tmp/testfile 2> /tmp/dump
$ cat /tmp/dump | cut -c -9 | sort | uniq -c | sort -nr | head
23034 proc_info
 188 write(0x4
 141 read(0x5,
  96 sigaction
  96 setitimer
  48 sigprocma
  48 sigaltsta
  31 stat64("/
  21 close(0x3
  18 close(0x6

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X