LINUX.ORG.RU

MidnightCommander сжирает всю память при копировании

 


0

2

Третий раз пытаюсь с помощью MC скопировать большой объем файлов с места на место, и третий раз кончается оперативка и все начинает жутко тормозить. Уже расширил оперативку до 24Гб - все равно все виснет. Общий объем 40 гигов мелких файлов. Сперва идет хорошо, а потом на 25-30% начинает подвисать. Это как нибудь лечится или в МС лучше вообще не копировать? До этого сделал архив всего этого объема в tar без сжатия - пролетел без проблем.


vm.dirty_bytes = 67108864
vm.dirty_background_bytes= 25165824

У меня так, недавно копировал 200+ гигабайт, проблем нет.

Khnazile ★★★★★
()

копировать большой объем файлов с места на место

Но зачем?

c1ient
()
Ответ на: комментарий от iZEN

Интересно, в MC есть опция «Использовать системную функцию копирования»?

WTF «системная функция копирования» в Linux и этой вашей FreeBSD?

Ах да, MidnightCommander сжирает всю память при копировании (комментарий)

akk ★★★★★
()
Последнее исправление: akk (всего исправлений: 1)
Ответ на: комментарий от jtad

в игнор троля.

Да, с человеком, который ни одного предложения написать без ошибок не может, разговаривать действительно не о чем.

akk ★★★★★
()
Ответ на: комментарий от akk

WTF «системная функция копирования» в Linux и этой вашей FreeBSD?

sendfile(). В Linux ещё splice(). Потому что данные не прокачиваются через user space.

gag ★★★★★
()
Ответ на: комментарий от iZEN

Интересно, в MC есть опция «Использовать системную функцию копирования»?

Её просто так не реализовать, потому что вызов sendfile(), по крайней мере, в Linux блокирующий.

gag ★★★★★
()
Ответ на: комментарий от Rost

mc действительно тормоз в плане копирования файлов. причем что мелкие, что большие - копируются одинаково плохо. видимо это связано с использованием неэффективных алгоритмов и т.п.

А какие вообще могут быть алгоритмы при копировании? Из тех программ, в чьи исходники я заглядывал это выглядело просто так:

установи размер буфера (4 КБ - 1 МБ)
пока есть что копировать:
   прочитай из файла-источника в буфер
   запиши из буфера в файл-получатель
gag ★★★★★
()
Ответ на: комментарий от jtad

cp существует вероятно столько же сколько линукс сам, зализана до дыр потому что создана только с единственной целью.

4 года назад в mc как раз перешли на определение размера буфера как в coreutils, т.е. в cp.

gag ★★★★★
()

Стопудово из-за того, что /tmp примонтирован в tempfs.

У mc есть особенность, что иногда, при работе с удаленными серверами, он файлы сначала перемещает во временную директорию, а затем заливает все это на сервер.

Приведи выхлоп mount.

anonymous
()
Ответ на: комментарий от gag

sendfile(). В Linux ещё splice(). Потому что данные не прокачиваются через user space.

Спасибо, буду знать. Но вот в мане написано:

Not specified in POSIX.1-2001, nor in other standards.

Other UNIX systems implement sendfile() with different semantics and prototypes. It should not be used in portable programs.

В том же мане есть ссылка на copy_file_range, но тоже Linux-specific.

В общем, это всё не очень подходит, потому что MC работает на многих UNIX-like-системах.

akk ★★★★★
()
Ответ на: комментарий от akk

В общем, это всё не очень подходит, потому что MC работает на многих UNIX-like-системах.

#ifdef выручает в таких случаях. Потому что их хоть и много разных, но от общего числа машин всего пара процентов, наверняка. Если не промилле.

gag ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.