Windows

Приветы из прошлого

С помощью Winqual отловил редкую (на сегодня) багу в старых драйверах Nvidia, которая била и по FastRawViewer:

  • Драйвера серии 2xx (я тестировал на 296.17, но в дампах видны и другие) для старых карт (с 8800 по GTX560) декларируют OpenGL extension GL_OES_get_program_binary, но при попытке порезолвить это расширение - оно не резолвится.
    Я вот даже не знаю, ошибка это, или спецификации OpenGL это разрешают, но декларировать расширение, которого нет на самом деле - это беспредел.
    В современных драйверах (Windows ставит 340.52 через апдейты, на geforce.com предлагают 341.92) этой проблемы нет, то есть простая установка рекомендованных апдейтов проблему решает (потому и бага редкая).
  • FRV это даже пытается обработать (на всякий случай), но, как выяснилось, неправильно (написано на всякий случай, потестировать не было случая, получилась ошибка в условии if).

Ну, полечил, в 1.2.2 будет, там всей правки на пару строк.

Одновременно повеяло прошлым из другого места:

  • Вынимаю боевую видеокарточку, вставляю заботливо заначенную 8600GS
  • Загружаюсь (Win8.1 x64), windows начинает мучительно искать драйвера.
  • Параллельно ставлю драйвера сам, перезагрузка не требуется.
  • Запускаю отладчик, чиню багу, начинаю тестировать.
  • В какой-то момент FRV мне говорит "милок, а у тебя OpenGL стал 1.1"

Это значит виндовый поиск драйверов ничего не нашел - и временно поставленные (без перезагрузки) видеодрайвера куда-то дел, вернул родной Windows OpenGL 1.1 (софтверный, еще от Win95).

После перезагрузки все, понятное дело, встало на место. Мораль же в том, что "драйвера без перезагрузки" в варианте 3-летней давности - это кривой механизм. Его, похоже, улучшили, с драйверами 3xx я таких засад не помню, но место - кусается.

 

A: windows 7 TCP performance

На второй день я допер (навели комменты), что можно же на дисковом ящике поднять RAMdrive. Результат упражнения вот:

Картинка для сравнения - вторая в предыдущем посте.

Справедливости ради, я еще потрахался (обновил фирмварь на карте, увеличил количество буферов до 32k, что выше рекомендованного максимума в 16k) и железным диском стало получше процентов на 20, скорость чтения где-то 450Mb/sec на самых больших блоках.

Так вот, какие выводы мы...

Q: windows 7 tcp performance

Есть у меня дисковый бокс (Adaptec 5805, 8 дисков, i5-2400, 8GB RAM), который до сегодняшнего дня жил под Linux c картами Infiniband 10G, доступался я к нему по SRP и выглядело это, в смысле скорости, вот так:

С чем связан провал чтения при размере записи 128-256к - вот не знаю, от слова совсем, но он устойчиво есть, воспроизводится при повторном тестировании. Кстати, как померять под виндами какая у...

WM_DEVICECHANGE и все все все

Обложился USB-кардридерами, сую в них карточки и высовываю и чувствую, что схожу с ума.

Вот есть сообщение WM_DEVICECHANGE, оно прилетает

  1. когда я вставляю USB-флешку (не карту)
  2. когда я подключаю ридер (без карты)
  3. когда я подключаю ридер с заранее вставленной карточкой.

А вот если подключить ридер без карты (прилетит сообщение), а потом вставить карточку - на вставление карточки WM_DEVICECHANGE не прилетает.

Kaspersky Antivirus со мной солидарен, свое "обнаружен съемный диск" он показывает в случаях 1 и 3 (ну а...

Загадка DPI

Вот значит вроде порешал проблему:
  • Все шрифты теперь в pt, а не в px
  • Практически все иконки - в SVG (осталась, буквально, одна, но отчего-то в Qt stylesheets не работает svg, хотя по доке - должна, ну соберусь с силами и буду генерировать ее на скаку)
  • Размеры окон, там где надо (автомат работает так, что мне не нравится) - в em
  • чего-то еще вылезло, но вот не могу уже вспомнить
И все на винде заработало прилично. Несу на мак. Собираю. Ой.

И вот гложет меня теперь вопрос:

Отчего на одинаковом мониторе (виртуальном, 1920x1200, никакого HiDPI, никаких специальных настроек, операционки поставлены по дефолту) 9pt шрифт на винде (приблизительно) соответствует по размеру 14pt на маке?. Один и тот же шрифт. Тахома.

Q: /3GB switch и карта памяти

Вот есть у меня RawDigger в его 32-битной виндовой ипостаси.

И есть одна и та же виндовая машина, Win7-64 бита.

Линкую с поддержкой/без поддержки /3GB (/LARGEADDRESSAWARE у линкера) и скармливаю один и тот же файл (80-мегапиксельный с задника). На 64-битной винде программе с поддержкой /3GB дадут 4GB, а без такой поддержки - 2Gb.

Дальше начинаю собирать и так и сяк и вижу, что вариант без поддержки 3GB получает от системы по рогам когда потребление памяти у него (Peak Working Set по таск-менеджеру/процесс-эксплореру) вовсе не 2Gb, а ~1.1. А вариант с поддержкой - дорастает до 1.2Gb (многовато, да, но примерно столько и расходуется на всякие глупости, чтобы при смене настроек не перечитывать файл).

Вопрос: а чем-то можно в винде посмотреть "использованное адресное пространство"? Ну то есть я догадываюсь, что ~800M пропали по причине фрагментации, а как-то можно мэпу хипа глянуть?

Может есть какой-то правильный маллок, которому можно пометить аллоцированное (именами, или по номерам строк в файле), а он потом карту нарисует?

Потому что сдается мне, что 80Mpix можно и без /3GB смотреть, надо только аллокации в правильном порядке делать.

Q: mmap() ?

А я вот извиняюсь, а Windows умеет mmap()-ать файлы с сетевого диска?

А макос?

Ну то есть у меня какое-то ощущение из прошлого, что нет, нельзя, но в доках такого ограничения не нашел.

О маках у фотографов

Статистика даунлоадов RawDigger 0.9.13 (в процентах)

OSRU (75% - россия+украина)EN (45% США-Канада, остальное - европа)
Windows, x645248
Windows, x323719
Mac1132

Забавно, да.

P.S. Сумма в последней колонке не совпадает т.к. дробные части разлеглись неудачно, .3, .4 и .3.

Про Look and Feel

Пользователи мак-версии RawDigger вероятно заметили уже, что окошко гистограмм очень широкое.

А широкое оно оттого, что контролов много. Окну же сказано уменьшаться только до тех пор, пока все контролы видны.

А вот как это отрисовывает Qt под разными ОС (окно завернуто в минимальную ширину):

По клику откроется полный размер.

Сверху вниз:
  • Mac Native (и такой spacing так и задуман) - ширина окна 1088 пикселов и меньше не делается.
  • Результат применения setStyle(QStyleFactory::create("windows")); - 908 пикселов, на 20% меньше.
  • Win7 Native (без каких-то настроек spacing) - 821 пиксел, еще на 10% меньше.
Эксперимент не полностью чистый: маковский десктоп 1920x1200 и никаких настроек шрифтов не делалось, на винде шрифты увеличены (115%), а разрешение монитора 2560x1600. В полностью одинаковых условиях винды, скорее всего, будут еще компактнее (пробовать страшно, потрогав размер шрифта у винды есть риск обратно не вернуться).

Родной маковский выглядит просторнее, но вот в редких случаях хотелось бы иметь возможность сделать все плотненько. Но разумным способом - никак (можно выписать свой StyleSheet, но хочется то бе этого). Имею сказать, что виндового размера контролов лично мне на маке очень не хватает.

Update: Добрые люди подсказали про Qt::WA_MacMiniSize. Результат - 859 пикселов ширины. Чуть хуже винды, но непринципиально. Хотя, конечно, спинбоксы по мне выглядят чуть мелковато.

Про Infiniband и FreeBSD (again)

Все-таки Infiniband на линке FreeBSD-FreeBSD получается какой-то очень мучительный:

  • Datagam Mode - устойчиво теряет несколько процентов пакетов на ping -f (icmplim, естественно, задран до небес, разрешающее правило в ipfw - первое). Ну и всякие iperf работают в лучшем случае на гигабит, а обычно и меньше.
  • Connected Mode на первый взгляд лучше: packet loss 0%, гигабитов эффективных примерно 5, но:
    • Установить эту самую Connected Mode между двумя машинами получается не с первого раза. Иногда надо ifconfig down сказать, иногда хватает с одной стороны, иногда надо с двух.
    • Могучий tcp-поток с одной из моих машин на вторую (ftp get /dev/zero /dev/null) может отправить ее в ребут или просто в транс. При этом в другую - все в порядке и я даже zfs send/zfs receive на 6Tb в середине недели успешно исполнил.
При этом на тех же картах, портах, кабелях связка FreeBSD - Windows работает отлично и tcp-потоки никого никуда не отправляют. Но только в Datagram Mode. С нулем потеряных пакетов. Я уже вторую неделю так живу на своей WS, ни одного Ethernet, только IB (только хардкор!).

Да, попытка поднять Connected Mode между FreeBSD и Windows один раз таки удалась. После каких-то перезагрузок, подниманий-опусканий интерфейса и т.п. При этом отвалились пинги с Windows, а вся конструкция прожила минут 20, а потом FreeBSD-шная сторона перезагрузилась.

Не исключено, конечно, что какое-то железо где-то как-то криво, но с Windows все, повторяю, работает.

Такие вот вести с полей.

Q: переносимые имена файлов в локальных кодировках (C++)

А вот, извиняюсь, вопрос.

Вот есть имя файла в национальной кодировке и я его хочу fopen(). На Винде и на Маке одним куском кода (хе-хе).

Насколько я сумел это изучить, ситуация такая:

  • Win32: или я отдаю в fopen() 8-битную кодировку (1251), или в _wfopen() в wchar_t (UCS-16?)
  • Mac: отдаем в fopen() UTF-8 и нам щастье
  • Linux: не знаю, пока руки не дошли.
Но это все с русским, который представим в виде 8-бит. А с китайским? Сдается мне, что в винде это только через _wfopen() получится.

Вопрос: есть какой-то совместимый способ, одинаковый на всех помянутых системах, или так и придется #ifdef WIN32...?

Win32-Git: про .netrc

Записка для памяти:

~/.netrc для Win32 Git (msysgit) называется ~/_netrc

Всех убью, один останусь: ~/.gitconfig называется, сюрприз, ~/.gitconfig

Update: но вообще, конечно, жесть. Без netrc спрашивает пароль, я его честно говорю и оно с этим паролем даже что-то вытаскивает и ломается с 401-й ошибкой не сразу.

RAM-диск для WinXP x64

Граждане, а кто какой Ramdrive для Windows XP использует?

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

У меня 64-бита и это место менять не хотелось бы

Update: Ramdrive от QSoft (бесплатная русская версия) после переустановки - заработал. До того - ругался, что никак не может.
Subscribe to Windows