Синхронизировать или не синхронизировать во встроенной среде?

Метод -1 :Мы вызываем Perl в режиме абзаца -00и делаем ORS=\n -lи разрешаем чтение файла -в режиме с явной печатью -n. Выбирается текущая запись $_, которая начинается с https :// и ее конец -позиции записи -заполняется следующей записью <>.Наконец, новые строки в этой добавленной текущей записи удаляются, а то, что осталось, выводится на стандартный вывод. ORS будет добавлен к текущей записи.

perl -ln -00e 's/$/$".<>/e and print tr/\n//dr if m|^https://|' file.txt

В этом методе мы устанавливаем цикл, когда встречаем строку https :// и продолжаем добавлять пустые строки, которые находим по пути к первой не -пустой. Все это время мы продолжаем удалять эти пустые строки.

sed -ne '
   \|^https://|!d
   :loop
      N
      s/\n$//
   tloop
   s/\n/ /p
' file.txt

Выход

https:// arkit.co.in/ Path Read (03/07/2017) Path: /website/upload/file.txt
https:// arkit.co.in/ Path Read (04/07/2017) Path: /website/upload/file1.txt
3
29.08.2019, 20:56
1 ответ

Вот мое мнение :Заранее извините за многословие.

Когда мы конкретно говорим о ubifsмы всегда должны либо sync/подобные варианты.

ubifsопорыwrite-back caching

Это означает, что изменения, записанные в файлах, не попадают во флэш-память напрямую. Сначала они сохраняются в кэше страниц, а затем записываются во флэш-память. (Подробнее о write buffersдля флэш-памяти NAND в UBIFS)

Это повышает производительность файловой системы за счет уменьшения количества операций записи.

Обратите внимание, что это asynchronousповедение fs.

Как вы сказали в вопросе, когда вы монтируете UBIFS с -параметром синхронизации, изменения в файловой системеsynchronous(записываются во флэш-память каждый раз ), однако за счет снижения производительности.

Если вы работаете с asynchronousфайловыми системами, такими как ubifs, то бремя обеспечения записи во флэш-память лежит на разработчиках приложений. Вот справочная страница записи (2 ):

$ man 2 write
NOTES
   A  successful return from write() does not make any guarantee that data
   has been committed to disk.  In fact, on some buggy implementations, it
   does  not  even guarantee that space has successfully been reserved for
   the data.  The only way to be sure is to call fsync(2)  after  you  are
   done writing all your data.

Использование

sync-синхронизирует всю fs. Может быть не оптимальным

fsync-В основном выполняет свою работу

fdatasync-Сбрасываются только изменения данных, а не разрешения метаданных (). Оптимальнее, чем fsyncвозможно (не уверен)

Читайте также Хорошо читайте о fsync

В конце концов, ваши варианты:

  1. монтирование с синхронизацией -с падением производительности
  2. улучшите приложение, используя указанные выше опции sync.
  3. обрабатывать файлы размером 0 байт в приложениях
  4. создание временных файлов и их переименование позже

Последняя мысль, возможно, стоит переключиться на синхронную файловую систему, напримерjffs2(не полностью синхронную при использовании флэш-памяти NAND ). Я знаю, что это не ответ на ваш вопрос, но эх, столько всего написано, можно было бы и это написать....

1
27.01.2020, 21:29

Теги

Похожие вопросы