LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

Технически происходит следующее:

  1. файл mmap-ится в память несколькими процессами в режиме read-only.
  2. один из процессов обновляет фрагмент файла, например через pwrite() или writev() и затем инвалидирует mmap и/или кэш CPU.
  3. все процессы видят изменения в своих mmap-регионах.

Так вот, проблема в том, что на OpenBSD третий пункт выполняется не всегда. Даже если явно пнуть ядро посредством msync(MS_INVALIDATE).

Т.е. куча процессов должны читать-писать в какой-то общий файл, притом надо уметь делать это одновременно и через файловые дескрипторы, и через память(отображенный в память файл)? А зачем так делать вообще?

Исправление SZT, :

Технически происходит следующее:

  1. файл mmap-ится в память несколькими процессами в режиме read-only.
  2. один из процессов обновляет фрагмент файла, например через pwrite() или writev() и затем инвалидирует mmap и/или кэш CPU.
  3. все процессы видят изменения в своих mmap-регионах.

Так вот, проблема в том, что на OpenBSD третий пункт выполняется не всегда. Даже если явно пнуть ядро посредством msync(MS_INVALIDATE).

Т.е. куча процессов должны читать-писать в какой-то общий файл, притом надо уметь делать это одновременно и через файловые дескрипторы, и через отображенную в память файл? А зачем так делать вообще?

Исправление SZT, :

Технически происходит следующее:

  1. файл mmap-ится в память несколькими процессами в режиме read-only.
  2. один из процессов обновляет фрагмент файла, например через pwrite() или writev() и затем инвалидирует mmap и/или кэш CPU.
  3. все процессы видят изменения в своих mmap-регионах.

Так вот, проблема в том, что на OpenBSD третий пункт выполняется не всегда. Даже если явно пнуть ядро посредством msync(MS_INVALIDATE).

Т.е. куча процессов должны читать-писать в какой-то общий регион памяти, притом надо уметь делать это одновременно и через файловые дескрипторы, и через отображенную в память файл? А зачем так делать вообще?

Исходная версия SZT, :

Технически происходит следующее:

  1. файл mmap-ится в память несколькими процессами в режиме read-only.
  2. один из процессов обновляет фрагмент файла, например через pwrite() или writev() и затем инвалидирует mmap и/или кэш CPU.
  3. все процессы видят изменения в своих mmap-регионах.

Так вот, проблема в том, что на OpenBSD третий пункт выполняется не всегда. Даже если явно пнуть ядро посредством msync(MS_INVALIDATE).

Т.е. куча процессов должны читать-писать в какой-то общий регион памяти, притом делать это одновременно и через файловые дескрипторы, и через отображенную в память файл? А зачем так делать вообще?