?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

Windows 7 can't copy large files (think 200 GB) to USB 3.0 drive - morfizm

Oct. 17th, 2015 03:32 am Windows 7 can't copy large files (think 200 GB) to USB 3.0 drive

The copy badly freezes, and the system (GDI, apps) becomes sluggish, while resource manager shows everything is idle.
But everything is back to normal when the same drive is connected via USB 2.0: copy is progressing.

Судя по форумам, доступным фиксам и т.п., это баг в поддержке USB 3.0. Для NVidia есть хотфикс. Для Intel есть апдейт драверов. Для моей PCIe USB 3.0 карты, видимо, решения нет.

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

Tags:

19 comments - Leave a commentPrevious Entry Share Next Entry

Comments:

From:archaicos
Date:October 17th, 2015 01:24 pm (UTC)
(Link)
USB 3.0 невъебенно большой и сложный. Нежинеры не справляются.
From:morfizm
Date:October 18th, 2015 01:36 am (UTC)
(Link)
Ты намекаешь, что Microsoft заставил неинженеров писать поддержку для USB 3.0?

Кстати, вот ещё:
https://social.technet.microsoft.com/Forums/windowsserver/en-US/a671e232-9c83-4491-8a38-7f66b38d8f2f/windows-7-64-bit-usb-copy-freezes-hotfix-did-not-resolve-issue?forum=w7itprohardware

У меня на моей USB 3.0 карте VIA Chipset. Официальный хотфикс только для NVidia. Этой проблеме 5 fucking лет!
From:metaller
Date:October 18th, 2015 05:48 am (UTC)
(Link)
А нефиг покупать карты с левыми чипсетами. Я давно уже понял, что лучше Intel может быть только Intel ;)

P.S. Обновил chipset software для десктопа на всякий случай (мать на Intel B85 чипчете).
From:morfizm
Date:October 18th, 2015 01:36 am (UTC)
(Link)
Ах, нежинеры :)
From:_m_e_
Date:October 18th, 2015 05:36 am (UTC)
(Link)
По поводу последнего абзаца: если GDI замирает - то наверное файловая система не причем, а драйвер USB Host'а виноват. Прерывания какие-то слишком долго обрабатывает (на первой стадии запретив все остальные), глобальные локи берет, или еще какие безобразия устраивает. На верхних уровнях типа кэш и файловая система все может быть нормально.
From:morfizm
Date:October 18th, 2015 05:46 am (UTC)
(Link)
Я не понимаю другого. Почему операционная система вообще даёт драйверу USB Host'а информацию уровня файловой системы.
Симптом:
(а) безумия начинаются при записи файла больше 2GB. Файла(!). Откуда USB Host знает про файлы?
(б) даже если поставить опцию USB-шнего диска "optimize for fast removal", эти 2GB почему-то кэшируются, а не сразу пишутся на диск, даже если выдавать их медленно. WTF?
From:_m_e_
Date:October 19th, 2015 03:46 am (UTC)
(Link)
Я не уверен что драйвер usb что-то знает по файлы. Может просто какой-паттерн вызовов другой для таких файлов.
From:morfizm
Date:October 19th, 2015 05:48 am (UTC)
(Link)
Если так, то это подтверждает адрес моих претензий - это OS screw-up.
From:_m_e_
Date:October 19th, 2015 06:25 am (UTC)
(Link)
Я не убежден. Поменялся какой-нибудь тайминг, количество и размер буферов - драйвер сломался. Что драйвер писали криворукие ебланы и тестировали только на самых типичных сценариях - майкрософт не виноват. Если верхний драйвер не посылает ничего нелегального - должен обработать.

Единственное, в чем я вижу вину МСФТ, конечно если драйвер сертифицирован, -- в WHDL всем надо оторвать конечности и отростки за отсутствие тестирования на больших файлах.

Edited at 2015-10-19 06:26 am (UTC)
From:morfizm
Date:October 25th, 2015 06:12 am (UTC)
(Link)
Я не про это. Я про интерфейс между драйвером и операционной системой. Его определяет операционная система. Какого чёрта драйвер USB 3.0 вообще *знает* про файлы? Откуда у него физическая возможность узнавать, что за данные приходят на USB 3.0 устройство - куски файла или просто байты? Файловая система это должен быть универсальный отдельный layer.

Edited at 2015-10-25 06:12 am (UTC)
From:_m_e_
Date:October 25th, 2015 06:39 pm (UTC)
(Link)
Нет, давай все же мыслить логично.

Я так и не принял твой аргумент, что драйвер USB 3.0 что-то *знает* про файлы, знает, перекачивает он байты или куски файла. Откуда это следует?

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

Это так же, как из того что драйвер видеокарточки падает, скажем, при заходе браузера на определенный сайт, делать вывод, что драйвер видеокарточки *знает* о HTML, URL и прочем. В данном случае здравый смысл подсказывает - не знает, просто при рендеренге этого конкретного сайта последовательность, тайминг или еще какие-то характеристики в использовании графического API (ничего не знающего про HTML), попадает на какой-то плохо протестированный сценарий и выскакивает баг в драйвере, никогда не проявлявшийся на других сайтах, хотя о сайте драйвер ничего не знает.

Точно так же, *только* из того что баг в USB драйвере проявляется только при больших файлах, никак не следует, что драйвер что-то знает о файлах. Он может просто передавать байты, но иметь внутри баг, который выскакивает только на больших файлах.

Если есть какие-то дополнительные соображения, позволяющие сделать вывод что драйвер знает о файлах - то я их не понял, и их стоит изложить внятно.
From:morfizm
Date:October 26th, 2015 09:42 am (UTC)
(Link)
Я понимаю, что мои аргументы не доказывают, но есть очень убеждающий косвенный evidence.

Давай попробуем придумать тесты, которые докажут.

Я могу легко проверить, потому что тот же диск могу подключить через USB 2.0, создать там разных тестовых файлов, по-разному писать, писать напрямую в partition посекторно, могу по-разному отформатировать partition с другой файловой системой и т.п. Какой бы самый простой тест мог бы доказать, что драйвер "знает" про файловую систему?
From:morfizm
Date:October 27th, 2015 09:26 am (UTC)
(Link)
Ладно, ну его в жопу. Заменил Anker (VL805 Chipset) на Inateck (Fresco FL1100 Chipset) и всё заработало.

$26 to fix the problem.
From:morfizm
Date:October 27th, 2015 09:50 am (UTC)
(Link)
Косвенные соображения, почему я считал, что проблема таки в архитектуре OS.
1) На форумах говорят, что проблема возникает только когда оперативной памяти 4GB или больше.
2) Я копировал очень большой файл по сетке, медленно (100MB/sec).
3) Проблемы возникали на 2x секунде, около 2GB.
4) Я тестировал создание (через append) файла локально - 2GB были сгенерированы моментально (он явно закэшил), а потом было подвисание со всеми симптомами.
5) Я перевёл диск в режим "optimize for quick removal" (отключил write cache), и повторил п.2 и п.4, ничего не изменилось. 2x секунд - более, чем достаточно, чтобы в режиме quick removal windows flush'ил буфера. Каким-то образом USB-драйверу удалось это заоверрайдить, и всё равно буферизовать по-своему. Т.е. USB драйвер знал, что к нему подключен именно жёсткий диск, и знал, что передаётся именно файл (иначе он не стал бы кэшить, т.к. есть streaming devices вроде speakers, в которых кэш должен быть короткий, иначе будут неприятные на слух задержки).

Понятно, что это не доказательство, но, по-моему, сильно пахнет плохой архитектурой. Драйвер USB карты должен уметь передавать байты из пункта A в пункт B, возможно, с небольшим и кракто живущим буфером. Знать про файлы и диски, и буферизовать 2+GB он точно не должен.
From:morfizm
Date:October 25th, 2015 06:13 am (UTC)
(Link)
Ну т.е. я бы принял твой аргумент, если бы ломался драйвер файловой системы. А ломается драйвер USB 3.0. Причём здесь драйвер USB 3.0?!?
From:andreyvo
Date:October 18th, 2015 10:19 am (UTC)
(Link)
Ладно там USB 3.0 и фризы в винде. У тойоты такая мякоть в софте: едешь ты по хайвею, тут проверка на алкоголь, надо притормозить, жмёшь на педаль, а эта скотина еще взвинчивает обороты и вжиик - впердоливаешься на полном ходу копам в задницу. Донуты разлетаются по сторонам, кофе по всему салону, наручники и томный вечер с магшотами

... Toyota’s source code is defective and contains bugs, including bugs that can cause unintended acceleration (UA).

http://www.edn.com/design/automotive/4423428/Toyota-s-killer-firmware--Bad-design-and-its-consequences
From:morfizm
Date:October 19th, 2015 12:20 am (UTC)
(Link)
Как страшно жить! Спасибо за историю, очень поучительно :)

Короче, learning: если Тоёта не слушается, надо полностью отпустить педаль тормоза, и только потом пробовать снова тормозить. Кроме того, педалям не нужно доверять на 100%, нужно использовать ручник, понижение передачи и т.п.
From:rezkiy
Date:October 21st, 2015 12:04 am (UTC)
(Link)
your Toyota is probably not throttle-by-wire.

But your USB 3.0 thingy is probably a PCI controller.
From:morfizm
Date:October 21st, 2015 12:19 am (UTC)
(Link)
Yep, I think the cheapest is just replace it to one which is based on a different brand chipset (anything but VIA).