Lines Matching full:se

44  (1) especificar la funcionalidad mínima en la que se puede confiar para
69 - ¿Qué no se puede asumir sobre las barreras de memoria?
93 (*) ¿Dónde se necesitan barreras de memoria?
172 El conjunto de accesos visto por el sistema de memoria en el medio se puede
221 de ubicaciones de memoria, pero el orden en que se accede a los registros
223 un conjunto de registros a los que se accede a través de un registro de
236 ya que se estableció la dirección _después_ de intentar leer el registro.
242 Hay algunas garantías mínimas que se pueden esperar de una CPU:
244 (*) En cualquier CPU dada, los accesos a la memoria dependiente se
281 (Los loads y stores se superponen si están destinados a piezas
289 de transformaciones "creativas", que se tratan en la sección BARRERA
292 (*) _No_debe_ suponerse que se emitirán loads y stores independientes
306 (*) Se _debe_ suponer que los accesos de memoria superpuestos pueden
329 (*) Estas garantías no se aplican a los campos de bits, porque los
342 (*) Estas garantías se aplican solo a escalares correctamente alineados y
349 en cuenta que estos garantías se introdujeron en el estándar C11, así
365 dos campos de bits, si uno se declara dentro de un declaración de
378 Como se puede leer arriba, las operaciones independientes de memoria se
380 problema para la interacción CPU-CPU y para la E/S ("I/O"). Lo que se
392 varios tipos de almacenamiento en caché. Las barreras de memoria se
413 Se puede considerar que una CPU envía una secuencia de operaciones de
427 barrera de lectura. En el caso de que se realicen dos loads de manera
429 primer load recupera la dirección a la que se dirigirá el segundo
435 laods de direcciones interdependientes; no se requiere que tenga
439 Como se mencionó en (1), las otras CPU en el sistema pueden verse como
444 en el momento en que la barrera se complete, los efectos de todos los
456 y se requiere una barrera de lectura completa o superior. Consulte la
463 [!] Desde el kernel v5.9, se eliminó la API del kernel para barreras
513 pueden parecer suceder después de que se complete.
528 RELEASE pueden parecer suceder antes de que se complete.
548 ACQUIRE se aplica solo a la carga y la semántica RELEASE se aplica sólo a
552 interacción entre dos CPU o entre una CPU y un dispositivo. Si se puede
558 arquitecturas pueden proporcionar garantías más sustanciales, pero no se
562 ¿QUÉ NO SE PUEDE ASUMIR SOBRE LAS BARRERAS DE LA MEMORIA?
570 completarse una instrucción de barrera de memoria; se puede considerar
602 A partir de la versión 4.15 del kernel Linux, se agregó un smp_mb() a
610 [!] Si bien las dependencias de direcciones se observan tanto en carga a
642 o la causalidad, no lo es, y este comportamiento se puede observar en
673 No se requiere una barrera de dependencia de dirección para ordenar
690 Por lo tanto, no se requiere ninguna barrera de dependencia de direcciones
700 escrituras. Este patrón se puede utilizar para registrar raras condiciones
701 de error y similares, y el orden natural de las CPUs evita que se pierdan
742 a. En cuyo caso lo que realmente se requiere es:
750 Sin embargo, los stores no se especulan. Esto significa que ordenar -es-
759 Las dependencias de control se emparejan normalmente con otros tipos de
806 incluso después de que se hayan aplicado todas las optimizaciones del
833 Aún se requiere el inicial READ_ONCE() para evitar que el compilador toque
849 Si MAX se define como 1, entonces el compilador sabe que (q % MAX) es igual
859 agregar una barrier(), pero esto no ayuda. El condicional se ha ido, y la
874 idénticos, como se señaló anteriormente, el compilador podría sacar ese
896 Además, las dependencias de control se aplican solo a la cláusula then y
897 la cláusula else de la sentencia if en cuestión. En particular, no se
923 carga de 'a' y el store de 'c'. Las dependencias de control se extenderían
925 resumen, las dependencias de control se aplican solo a los stores en la
950 declaración "if" porque, como se muestra en el ejemplo anterior, la
967 (*) Las dependencias de control se aplican solo a la cláusula then y la
970 cláusulas. Las dependencias de control no se aplican al código que
973 (*) Las dependencias de control se emparejan normalmente con otros tipos
987 Cuando se trata de interacciones CPU-CPU, ciertos tipos de barrera de
991 Las barreras generales se emparejan entre sí, aunque también se emparejan
993 Una barrera de adquisición se empareja con una barrera de liberación, pero
995 supuesto, las barreras generales. Una barrera de escritura se empareja con
998 o una barrera general. Del mismo modo, una barrera de lectura se empareja
1037 [!] Tenga en cuenta que normalmente se esperaría que los stores antes de la
1038 barrera de escritura se hagan coincidir con los stores después de la
1139 Sin embargo, si se colocara una barrera de dependencia de dirección entre
1173 Se asegura de que ---> \ aaaaaaaaaaaaaaaaa | |
1216 Sin embargo, si se colocara una barrera de lectura entre la carga de B y la
1291 Pero puede ser que la actualización a A desde la CPU 1 se vuelva
1292 perceptible para la CPU 2 antes de que la barrera de lectura se complete de
1378 medida dependiente del tipo de barrera utilizada. Si no se hizo ningún
1380 solo se usará:
1427 a saber, que un determinada store se vuelve visible al mismo tiempo para
1429 que todos los stores se vuelven visibles. Sin embargo, el soporte para
1432 multicopia'' en cambio, solo garantiza que un store dado se vuelva visible
1456 X deba devolver 1. Esta expectativa se deriva de la atomicidad multicopia:
1457 si una carga que se ejecuta en la CPU B sigue una carga de la misma
1458 variable que se ejecuta en la CPU A (y la CPU A no almacenó originalmente
1471 Por ejemplo, supongamos que la barrera general de la CPU 2 se elimina del
1472 ejemplo anterior, dejando solo la dependencia de datos que se muestra a
1482 Esta sustitución permite que la atomicidad no multicopia se desenfrene: en
1489 este ejemplo se ejecuta en un sistema atómico no multicopia donde las CPU 1
1491 podría tener acceso anticipado de escritura a CPU 1. Por lo tanto, se
1499 proporciona este orden adicional, lo que significa que solo se garantiza
1548 se aplica a cpu3(), al menos aparte de los stores. Por lo tanto, es posible
1559 pueden estar en desacuerdo con el orden. Este desacuerdo se debe al hecho
1569 asegura que se leerá cualquier valor en particular. Por lo tanto, los
1575 sistema, consistente en secuencia, donde nunca se reordena nada.
1688 Tenga en cuenta que si el compilador se queda sin registros, podría
1708 subproceso, porque se deshace de una carga y un branch. El problema es
1727 optimice el código hasta su casi inexistencia. (Aún se cargará desde
1868 solo subproceso. De hecho, un error reciente (desde que se solucionó)
1898 variable que se ha marcado como volátil. Por ejemplo, dado que 'jiffies'
1900 razón de esto es que READ_ONCE() y WRITE_ONCE() se implementan como
1925 Además: en el caso de las dependencias de direcciones, se esperaría que el
1932 así una copia más nueva de b que a[b]. Aún no se ha conseguido un consenso
1936 Las barreras de memoria SMP se reducen a barreras de compilador cuando se
1937 compila a monoprocesador, porque se supone que una CPU parecerá ser
1948 sistemas SMP y UP. Se pueden, sin embargo, usar para controlar los efectos
1960 completa después de ella. No se garantiza insertar nada más que una
1967 Estos se pueden usar con funciones RMW atómicas que no implican
1972 atomic_set. Un ejemplo común donde se puede requerir una barrera es
1973 cuando se usan operaciones atómicas como referencia de contador.
1975 Estos también se utilizan para funciones atómicas RMW bitop que no
1985 Esto asegura que la marca de muerte en el objeto se perciba como
2026 permite garantizar que los datos se escriben en el descriptor antes de
2029 usar writel(), no se necesita un wmb() anterior para garantizar que
2030 las escrituras de la memoria caché coherente se hayan completado antes
2042 para los que las modificaciones se escriben en el almacenamiento
2060 los accesos anteriores se junten con posteriores. io_stop_wc() se
2074 particular puede proporcionar garantías más sustanciales, pero no se puede
2095 Las operaciones de memoria emitidas después del ACQUIRE se completarán
2099 completarse después que la operación ACQUIRE se ha completado.
2103 Las operaciones de memoria emitidas antes de la RELEASE se
2104 completarán antes de que la operación de RELEASE se haya completado.
2107 completarse antes de que la operación de RELEASE se haya completado.
2132 No se puede suponer que un ACQUIRE seguido de una RELEASE sea una barrera
2169 con suceder, el RELEASE simplemente se completaría, evitando así el
2197 garantía de orden en sistemas compilados en UP, por lo que no se puede
2199 especialmente con respecto a los accesos de E/S, a menos que se combinen
2244 que se pueden ver como una interacción entre dos piezas de datos: el estado
2261 Una barrera de memoria general se obtiene automáticamente mediante
2292 En segundo lugar, el código que realiza una activación normalmente se
2305 no debe confiar en ello. La barrera se produce antes del acceso al estado
2306 de la tarea. En particular, se encuentra entre el STORE para indicar el
2318 donde "task" es el subproceso que se está despertando y es igual al
2321 Para reiterar, se garantiza la ejecución de una barrera de memoria general
2337 barrera, de nuevo, ocurre antes de que se acceda al estado del hilo. En
2445 ¿DÓNDE SE NECESITAN BARRERAS DE MEMORIA?
2467 Cuando se da un sistema con más de un procesador, más de una CPU en el
2499 (3) borrar el puntero de la tarea para decirle al waiter que se le ha dado
2517 Una vez que se ha puesto en cola y soltado el bloqueo de semáforo, el
2519 a que se borre su puntero de tarea antes de continuar. Dado que el registro
2521 la tarea se borra _antes_ de que se lea el siguiente puntero de la lista,
2563 que todos los accesos a memoria antes de la barrera se completarán en el
2564 momento en que la instrucción de la barrera en sí se complete.
2569 CPU. Como solo hay un CPU, la lógica de orden de dependencias de esa CPU se
2577 procesadores, las operaciones atómicas se destacan especialmente porque
2579 pero se confía mucho en ellos en su conjunto a lo largo del kernel.
2595 es posible que el "core" del controlador no se ejecute en la misma CPU y no
2596 se permita que su interrupción vuelva a ocurrir hasta que la interrupción
2603 interrupción y luego se invoca el controlador de interrupción del
2621 Si se relajan las reglas de orden, se debe asumir que los accesos
2624 interrupción - y viceversa - a menos que se utilicenn barreras implícita o
2634 rutinas ejecutándose en separadas CPU que se comunican entre sí. Si tal
2635 caso es probable, entonces se deben usar bloqueos de desactivación de
2655 periférico al que se accede como un parámetro __iomem *. para punteros
2659 1. Se ordenan todos los accesos readX() y writeX() a un mismo periférico
2664 2. Se ordena un writeX() emitido por un subproceso de CPU que contiene un
2668 dispositivo en particular, mientras que se obtiene un spinlock en un
2679 4. Un readX() de un subproceso del CPU, desde el periférico, se
2685 transferencia DMA se haya completado.
2687 5. Un readX() por un subproceso del CPU, desde el periférico, se
2691 con 1us de diferencia, si la primera escritura se lee inmediatamente
2692 de vuelta con readX() y se llama a udelay(1) antes del segundo
2711 delay() (es decir, los puntos 2-5 arriba) pero todavía se garantiza que
2712 se ordenarán con respecto a otros accesos desde el mismo hilo de la CPU,
2713 al mismo periférico, cuando se opera en punteros __iomem asignados con el
2722 se documentó anteriormente.
2729 x86). El número de puerto del periférico que se está accedido se pasa
2769 powerpc o frv), por lo que el caso más relajado (es decir, DEC Alpha) se
2772 Esto significa que se debe considerar que la CPU ejecutará su flujo de
2773 instrucciones en el orden que se quiera - o incluso en paralelo - siempre
2777 siempre que la apariencia de causalidad se mantenga.
2789 De manera similar, se debe suponer que el compilador podría reordenar la
2791 siempre que la apariencia de causalidad se mantenga.
2798 La forma en que se perciben las operaciones de memoria caché en todo el
2799 sistema se ve afectada, hasta cierto punto, por los cachés que se
2835 coherencia de caché migrarán la cacheline sobre la CPU que accede y se
2843 continuar su ejecución hasta que se vea obligado a esperar que una
2846 De lo que se ocupan las barreras de la memoria es de controlar el orden en
2857 a través de la cual se accede a los dispositivos y/o el uso de
2869 se hayan vuelto a escribir en la RAM todavía. Para hacer frente a esto, la
2874 sobrescritos por líneas de caché sucias que se escriben de nuevo en la RAM
2877 simplemente ocultar el hecho de que la memoria RAM se haya actualizado,
2878 hasta el momento en que la caché se descarta de la memoria caché de la CPU
2879 y se vuelve a cargar. Para hacer frente a esto, la parte apropiada del
2889 La E/S mapeada en memoria generalmente se lleva a cabo a través de
2897 efecto, superar los accesos a la memoria caché que se emitieron
2908 de memoria exactamente en el orden especificado, de modo que si a la CPU se
2924 compiladores, la anterior suposición no se sostiene porque:
2927 permitir progreso en la ejecución, mientras que los stores a menudo se
2930 (*) las cargas se pueden hacer especulativamente, y el resultado es
2933 (*) las cargas se pueden hacer de forma especulativa, lo que lleva a que
2934 se haya obtenido el resultado en el momento equivocado de la secuencia
2937 (*) el orden de los accesos a memoria se puede reorganizar para promover
2940 (*) las cargas y los stores se pueden combinar para mejorar el rendimiento
2941 cuando se habla con memoria o hardware de E/S, que puede realizar
2949 coherencia se propague en orden a otras CPU.
2959 Sin embargo, se garantiza que una CPU es autoconsistente: verá que sus
2970 y asumiendo que no hay intervención de una influencia externa, se puede
2971 suponer que el resultado final se parecerá a:
3006 ya que, sin una barrera de escritura o WRITE_ONCE(), puede que se asuma
3007 que el efecto del almacenamiento de V a *A se pierde. Similarmente:
3028 de dirección realmente se vuelve necesaria, ya que se sincronizan ambos
3030 cambio en el puntero, frente a que los nuevos datos se produzcan en el
3041 Los "guests" (invitados) que se ejecutan en máquinas virtuales pueden verse
3042 afectados por los efectos de SMP incluso si el "host" (huésped) en sí se
3066 Las barreras de memoria se pueden utilizar para implementar almacenamiento