Hacker News new | ask | show | jobs
by brink 3517 days ago
On a related note; I can't even use NVidia's "Geforce Experience" any more without logging in. Thanks for that, NVidia. Just what I wanted; a driver tool that forces me to log in.
12 comments

So annoying, yes. I since uninstalled GeForce Experience and replaced update notifications (the only feature I was using) with this ugly batch script. Careful, it's ugly! Botched stackoverflow-oriented batch brogramming! But it works for me! Feel free to reuse and improve :)

    @ECHO OFF
    setLocal EnableDelayedExpansion

    rem nvup.bat, a quick & dirty driver downloader since GeForce Experience requires a login.
    rem In a folder with write permissions, drop the script and its two dependencies:
    rem  - jq: https://stedolan.github.io/jq/
    rem  - curl: https://curl.haxx.se/
    rem For automation, just create a Scheduled Task that runs when you want it (I like on Resume).
    rem Reuse / modify / redistribute at will.

    rem http://stackoverflow.com/questions/19131029/how-to-get-date-in-bat-file
    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
    set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
    set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
    set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
    set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
    echo lastCheck: "%fullstamp%" > lastCheck.log

    rem to get the update feed for your device/OS combo, go to http://www.geforce.com/drivers
    rem , pick your device/os, pop the "Network" tab of your devtools, start the driver search,
    rem and copy the url
    curl --silent -o rawNv.json "http://www.geforce.com/proxy?..."

    for /f "delims=" %%i in ('jq ".IDS[0].downloadInfo.DownloadURL" rawNv.json') do set lastUrl=%%i

    set /p installedUrl=< installedUrl.txt

    if %installedUrl%==%lastUrl% (
      echo same version, quitting
      exit /B
    ) else (
      echo new version, updating
      echo %lastUrl% > installedUrl.txt
      pushd C:\Users\YOURUSERNAME\Downloads
      %~dp0\curl -O %lastUrl%
      popd
      rem http://stackoverflow.com/questions/774175/show-a-popup-message-box-from-a-windows-batch-file
      mshta "javascript:alert('New driver');close()"
    )
Here's a less ugly PowerShell version of your script that doesn't have any external dependencies and compares the version of the currently installed driver with the latest (non-beta) driver on NVIDIA's website.

  $URI = 'http://www.geforce.com/proxy?proxy_url=http%3A%2F%2Fgfwsl.geforce.com%2Fservices_toolkit%2Fservices%2Fcom%2Fnvidia%2Fservices%2FAjaxDriverService.php%3Ffunc%3DDriverManualLookup%26psid%3D101%26pfid%3D815%26osID%3D57%26languageCode%3D1078%26beta%3D0%26isWHQL%3D1%26dltype%3D-1%26sort1%3D0%26numberOfResults%3D10'
  $Download = (Invoke-WebRequest $URI | ConvertFrom-Json | Select -ExpandProperty IDS)[0].downloadInfo.DownloadURL
  
  # Installed driver version (21.21.13.7570) > NVIDIA driver version (375.70)
  [Version]$Driver = (Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, DriverVersion, Manufacturer | Where { $_.Manufacturer -eq "NVIDIA" -and $_.DeviceName -like "*GeForce GTX*" }).DriverVersion
  [Version]$CurrentDriver = ("{0}{1}" -f $Driver.Build,$Driver.Revision).Substring(1).Insert(3,'.')
  
  # Latest driver on NVIDIA's website
  [Version]$LatestDriver = ([System.Uri]$Download).Segments[-2].Trim('/')
  
  If ($CurrentDriver -lt $LatestDriver) {
      Write-Output "New driver available"
      Start-BitsTransfer -Source $Download -Destination "$env:USERPROFILE\Downloads"
      (New-Object -ComObject WScript.Shell).Popup("New NVIDIA driver downloaded",0,"Update")
  } Else {
      Write-Output "Same version. Nothing to download"
  }
Improvements welcome. :)
Thanks. I hesitated reaching for PowerShell because, although it looks solid, I'm not familiar with it. Even at work, I was automating part of a Windows build last week, and used batch :-/

So I have a few questions to you or knowledgeable PS-passersby:

1. Any recommendations to get started with PowerShell? Good documentation, tooling, linters, useful packages?

2. Are there remaining cases where it's impossible or unreasonable to use PowerShell rather than Batch or VBScript?

3. PS runs on Win≄XP, right? How does the language evolve / is it versioned? If so, which version should I target?

1. Start with the ISE, comes with windows. If you can't find it "C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe" Otherwise VSCode with a plugin is nice but you miss some intellisense magic the ise can do.

1a. with powershell as an administrator run `Update-Help` That's all the help for the commands installed and up to date from online. Get-help <command> and don't forget to use wildcards `get-help get-*` will show every single get command you can run. Get-Verb will show what you should expect things to be called. `Get-module -listAvailable` worth looking at too. Tab complete is your friend.

1b. This and the advenced one are great although quite slow; https://mva.microsoft.com/en-us/training-courses/getting-sta...

2. No? Maybe stuff that's already fine or where working out the signing policy is a hassle.

3. Powershell is wrapped into the "Windows Management Framework" you can install. WMF 5 has PS 5, can install down to Windows 7. 7 shipped with PS 2.0 where you could write cmdlets in powershell itself, before that you had to use C++ and visual studio. PS3.0 is the minimum it's really pleasant to use but 2.0 support isn't crazy.

1. Try this: https://web.archive.org/web/20120103141402/http://powershell...

2. Not really. Worst case, you can batch & co.

3. Probably v2.

Off-Topic: While looking through your script I noticed the `jq' dependency. I went to install it and in the docs it mentioned this thing called chocolatey [0], which is like homebrew for windows, and seems pretty amazing :)

Thank you for sharing your work with us!

[0] https://chocolatey.org/

Be aware that even if you manually installed the driver in the first place and have never had GFE installed, Windows Update will helpfully install GFE for you if you let it update the driver.
Sadly, that doesn't allow use of shadowplay.

There are some older versions of nvidea experience floating around that still work with shadowplay without the login.

If you're on Windows 10, the built in games recorder is pretty fantastic, I prefer it over Shadowplay. Of course, a lot of people trying to avoid telemetry are probably still avoiding Windows 10.
Use OBS instead.
Shadow play has that record last X minutes feature that OBS doesn't I think
OBS does, OBS studio doesn't.

It's replay buffer where you start the replay buffer and it will keep the last n seconds of footage in a buffer. You set a keybind to save that buffer to file.

https://obsproject.com/forum/resources/obs-classic-how-to-us...

Holy moly, I thought that this post was a joke for sure - and then I checked out GeForce Experience.

Uninstalled. Never to be reinstalled.

AMD will be my next card. Thanks nVidia for letting me know what you think of me :)

My employer took took a shipment of fifteen Dell computers a few months ago - with ATI Radeon HD 8570 graphics cards (3 years old, with DP 1.2 and 4k support so not obsolete by any means, and certified for Ubuntu 14.04 [1])

Then Ubuntu 16.04 comes out, and guess what? No fglrx driver support any more [2] and users report the open source drivers use about a core and a half worth of CPU, slowing down their entire machines. Apparently our only options are to buy new cards or stay on 14.04 indefinitely.

Meanwhile, I had an nVidia card and I was able to upgrade to 16.04 with no problems at all.

This week you might have resolved not to buy from nVidia - but in the same week I've resolved not to buy from ATI.

[1] https://certification.ubuntu.com/hardware/201302-12679/ [2] http://www.omgubuntu.co.uk/2016/03/ubuntu-drops-amd-catalyst...

It's weird that you're seeing such high CPU usage with the open source drivers. AMD has been directly supporting them for a while now. For most applications radeonsi (the open source driver for GCN arhictecture cards) performs within spitting distance of the proprietary driver and for some the performance is better. I suppose it's possible they are more CPU intensive generally, but the kind of slowdown you're seeing seems pretty excessive. What applications are you seeing this problem with?

Ubuntu 16.04 does ship with a pretty old version of Mesa (full major version behind, about to be 2 major verions as Mesa 13 is in the RC stage) which probably isn't helping matters. Unfortunately, while there are some PPAs that make it fairly easy to install a bleeding edge build, there's not really a convenient way to install the latest stable release.

For some context, the reason fglrx/Catalyst has not been updated is due to an in progress driver transition for AMD cards on Linux. Generally speaking, Linux video drivers are split into a kernel part and a user space part. For quite some time, AMD has maintained two completely separate driver stacks on Linux. For the user space side, this didn't represent a huge amount of duplication of effort as most of the code is shared with the OpenGL portion of their Windows driver, but for the kernel side it was a bunch of wasted effort. A while back, they started on a new open source kernel driver, called amdgpu, that could provide the necessary facilities for both their open source and proprietary driver efforts. The new proprietary driver (AMDGPU-Pro) targets this kernel module. Unfortunately, amdgpu does not have production-ready support for GCN 1.0 GPUs like the 8570. This will get fixed eventually, but that doesn't really help you now.

14.04 just switched to the 16.04 graphics stack a couple months back -- do your drivers still work after that update?
IIRC the users who switched back to 14.04 also had to downgrade Xorg [1]

[1] https://askubuntu.com/a/815592

AMD has their AMDGPU-PRO [1] drivers that are available on 16.04

[1] https://support.amd.com/en-us/kb-articles/Pages/AMD-Radeon-G...

No mention of the Radeon HD 8570 on the list of supported cards. Unless you know better?
The open source drivers aren't configured correctly, Southern islands cards are close to feature complete with Radeon. Turn on DRI 3 and glamor.
ATI is AMD now.
I'll be buying AMD as well, the RX 400 series already piqued my interest but I can't justify buying another budget GPU from nVidia, even though the 1050 looks pretty attractive.
I wouldn't recommend that. AMD's software quality is horrible, and I'm saying that as an iMac user stuck with them on Windows. Whatever you think of nVidia, it's a breath of fresh air to see such polished auxiliary tools -- and yes, I think GeForce Experience is good... why? Living with AMD crap for years.

And if you think nVidia treats customers/users badly, just watch AMD's treatment of Apple hardware. They added artificial blocks preventing the "normal" driver from installing there (even though it is fully functional) and you have to use a special Bootcamp driver, which is incredibly outdated and buggy as hell in modern games. Their support is about as useful as you expect in a big corporation, and then some. It's so bad that enthusiasts are re-packaging AMD's drivers to have something: https://www.mxdriver.com

The new Wattman software is supposedly a huge leap forward.
What model of AMD can replace GTX 1080?
Not sure if this was rhetorical or not, but if it isn't, none of them. The 1070 and 1080 stand in a class of their own. AMD won't have a competitive card in these class until Q1 2017 which will be about the same time that the 1080ti drops.

I honestly don't care about this, these threads always attract those who value privacy above all else and believe that every should play on their terms. Most people do not care, and as an engineer I see extreme value in providing this data. This isn't to say that there aren't dark patterns being used here(the acceptance language is hidden in the EULA), but there is a simple work around...don't use GeForce Experience. Manually download the drivers from Nvida's website. In addition to there being a complete go around, I also use G-sync for my games which is superior technology to Freesync, so there is basically no chance that I'm leaving the Nvidia ecosystem unless they did something truly harmful to me.

I asked just in case if I missed something and AMD secretly developed competitive card.

After huge annoyance with required login in GeForce, this story will 100% convince me to uninstall it and check updates manually.

Upcoming Vega cards should be in same performance segment.
I blocked their telemetry and not I can't even update my drivers. Not through windows update, nor through their installer. It hangs trying to talk back to them.

No harm, no foul, probably time to give AMD cards a chance. Variety is the spice of life and the spice must flow.

As much as I welcome the capitalistic response, I'm worried it won't be enough.

As much as I'd love true competition in the GPU/CPU space, it doesn't exist. AMD's cards simply cannot compete with Nvidia for GPGPU type scenarios, and even in its basic capacity, often have known heat/perf issues. Now that may be worth it for now to make a statement against the telemetry, but what if (less if and more when IMO) AMD then adds driver telemetry? And then intel?

These domains (Chip manufacture/GPU driver writing) are so advanced at this point that I don't see how competition could reasonably disrupt an incumbent over anything less than a samsung-grade failure (and even then probably not), and I'm concerned about the long-term wherein the producers realize this and through a combination of boiling the frog slowly and leaving consumers no other choices put themselves in the position to have a "pragmatic monopoly" of free reign over our machines. (I've always wondered what would happen from an antitrust sense, if it's "we're the only producer not because we WANT to but because we're the only ones who CAN")

We've certainly seen it happening with OSes, as well as some attempts from PC oems, I've always unfortunately thought it was just a matter of time until the more irreplaceable components got into the game too and I'd love some creative thoughts to actually stop the trend and not stand in its way, because I'm not sure we'll win that latter battle.

EDIT: as a child post points out, I completely forgot to mention drivers as well; as a strong argument to my "we don't have many options" thesis. AMD's linux support has been historically lacking next to NVIDIA which makes it a non starter in many cases.

Odd, I always bought AMD and only ever had issues if I overclocked them. The one time I have an Nvidia card, all I have is issues with drivers, both on Windows and Linux. The only thing that impresses me that Nvidia has done is the Nvidia Shield Tablet, and they made it less impressive with their K1 rendition of it. There's also the Nintendo Switch but it's yet to be determined if Nintendo is doing something amazing with it, or losing out on another big opportunity. Nvidia does not impress me. I've had AMD for years, and have had a solid investment every time. Of course this is my experience, other people's may vary. My main complaint against AMD is Linux drivers either exist, or they don't, they either work, or they don't. With Nvidia it's the same, some people / distros keep a specific driver version because Nvidia breaks a previous one with their 'fixes'.
" AMD's cards simply cannot compete with Nvidia for GPGPU type scenarios"

Really? Which brand of GPU pretty much ran Bitcoin during its inception, again?

You're absolutely right, HOWEVER, I would call that the exception rather than the rule, as IIRC it was largely due to AMD supporting some operators in a more native/optimized form than Nvidia did at the time, than any sort of true general purpose superiority. Given how quickly mining moved to ASICS I wouldn't use that as an advocation that they're (ASICS) superior to Nvidia for GPGPU functionality. (Special-purpose specially-designed, no doubt, but that's not really "General")

Edit: read a sister post later article on the breakdown of the perf differences, and it seems to slightly affirm what I'm saying (re: bitcoin aligning with a functionality AMD performed very strongly in), although I'll admit to have only skimmed it.

I will say though, even despite this, it doesn't address the known heat/power issues even the "heyday" amd cards seemed to suffer from and that were still present when I was comparing them while looking at a 1070 recently.

EDIT: since I can't edit my original post any more, I'd note here that I didn't intend to turn this into a NVIDIA/AMD debate, even if we ignore that for a moment and consider it a duopoly situation instead of monoply, I'd ask readers to consider my core point in that light.

Per dollar, AMD performs much better than nVidia for a significant number of cases[1] and they have much larger memory. However, this is comparing an equally optimized implementation. Unfortunately nVidia simply has much more optimized content availible.

https://streamcomputing.eu/blog/2016-05-06/noticeable-proces...

Try to write some GPU software on AMD cards, then compare that to the NVidia/CUDA experience. I don't know about the Bitcoin thing (maybe in the end, for very long lived code, the lower cost would be more important than the developer pain and time time required) but for pretty much all the HPC code I see, getting things running sooner and with more polished dev tools beats price/performance ratios every time. If you're spending a few thousand on Titans anyway, getting a few more cycles per watt doesn't matter all that much anymore; except for Bitcoin mining where your main cost is energy (by design).

So I think there's a very clear reason for that specific case.

Bitcoin mining uses lots of integer manipulation. AMD cards are faster for integer operations. Hence bitcoin miners used to use AMD cards.
I'm... confused why you'd say this. It's simply true: NVIDIA's consistently ahead on these tasks on performance/energy cost metric.

You can do most any computation on any GPU with the right SDK support (and of course, the CPU hasn't gone anywhere). It's just fantastically less efficient.

It really isn't true - AMD cards utterly crushed nVidia ones during the heydey of mining: http://www.extremetech.com/computing/153467-amd-destroys-nvi...
GPU mining is only one of a multitude of GPGPU applications right now and it really isn't even growing.
AMD are already doing sneaky things with their driver autoupdate on Windows, they put the checkbox below the "upgrade" button, prechecked and with a large spacing so it is likely you don't see it immediately and click "upgrade" before you realize it, and they also present the checkbox at least twice, rechecking it if you unchecked it previously. So I fear that after that move by Nvidia they'll feel empowered to push more things on the user.

I'm worried about the semiconductor industry in general as well, there is a lot of concentration currently all over the place, not sure where it's going to stop, and at some degree competition is going to become less fierce, you don't need to get to a monopoly but an oligopoly is likely and will lead to tacit agreement on market separation and price fixing as in the telecom industry.

What was the checkbox for?
Enable auto update.
Actually, AMD's latest design, the RX 4x0 series, measures up really well to NVidia's mid and low end cards, especially for Vulkan/DX12 apps. They're not a contender in the enthusiast market, but will be releasing high-end cards using a refined design in the first half of 2017.

As for drivers, AMD has pledged to open source their Vulkan and OpenCL implementations. While that release has been pending "legal review" forever now, alternative open source drivers are making great progress thanks to Vulkan's simpler driver model. While NVidia's generally had the "better" driver, both from adhering less strictly to the spec and having the manpower to routinely fix application bugs in their driver, that's all changed with Vulkan/DX12 being significantly closer to the hardware.

I'd say things are looking up for market balance.

On my last box I found the AMD drivers were injecting a DLL into almost every process - including the brand new program I was in the process of developing.
Can someone ELI5 what injecting a DLL does, how they did it, and what they might have been using it for?

I know with my old Nvidia drivers, you can add extra icons for window management to every window (move to next monitor, etc). Would this be using DLL injection?

I've seen Nvidia drivers do that too. I think it's mostly done to let the user override graphics settings that are otherwise hardcoded into the application's API calls.
You can uncheck Plays.tv/Raptr/AMD Gaming Evolved during the installation or uninstall it after the fact. It's seperate from the drivers.
I noticed the same thing. It's ridiculous. Geforce Experience doesn't do anything I care about except auto-update drivers. Why do I need to log in for that?
you forgot game capture/streaming and automatic game setting optimization
anything he cares about. Windows has built in game capture, and I know how to adjust settings on my games myself.

The "experience" app is just superfluous bullshit.

windows has automatic driver updates too so... why not just skip it alltogether
The drivers Windows uses are a fair bit older. Occasionally you really do need the latest drivers for a game
I use GameDVR (agario can take the framerate hit). GameDVR has a bug where Windows won't draw menus until I unplug and replug the monitor after using it (sometimes), so I did try Nvidia's thing. That recorded the start page for agario and my mouse. It was super interesting to watch, but not what I wanted. Maybe it works better for "real" games.

Anyway, everything is shit ;)

I use OBS with the NVEC codec - the one that is installed with the NVIDIA driver, and if you are recording anything, regardless of 3D or 2D, it is your best bet.

It's especially nice compared to normal H.264, and has the option of light compression with nominal CPU usage if you don't like large lossless files. It outputs normal MP4/H.264 files that I can then work with in Linux (as opposed to say Fraps) but uses the fact your GPU is already rendering the scene to then output it in H.264.

Thanks for the recommendation. I used simplescreenrecorder on Linux before, it worked pretty well. I'll try OBS on Windows and see how that goes.
You can go to their website and install the normal driver. It installs the nvidia control panel which also has an update checker. If I had known I could just be using this I would have never installed that monstrosity.
Be aware there is a "Have feedback?" link in (I believe) the bottom right corner of the app, where you can have a better chance of them seeing your frustration than the comments here.

I don't know about others, but I approach that stuff with the attitude of "I can't expect change if I just swear at my monitor", but stop short of actually expecting change

I just install the drivers manually now. I always hated Geforce Experience anyway. Crazy amount of bloat for some drivers.
As a workaround, you can download v2 (and prevent the updates). I think the games data(base) used is the same, so you can obtain the same acceleration, without the hassles of v3.
I did that a while back. My current version of experience has decided that, upon opening it, I will either upgrade or do nothing.

For now I have shadowplay set up correctly, but any changes aren't gonna be happening it seems.

I just uninstalled GeForce Experience and it immediately caused the already open Battlefield 1 game instance to crash.

Way to go Nvidia.. uninstalling your non-driver app crashes games :)

> Way to go Nvidia.. uninstalling your non-driver app crashes games

That's a weird edge case to support. After all, the app in question is responsible for recording in game video thus implying some kind of dependency.

I have the suspicion that their overlay drawing is fairly low level as it seems to manage to draw over programs which are injection unfriendly and exclusive fullscreen.

Evidently it does not handle getting the rug pulled from under itself well. :)

I just uninstalled GFE3 and went back to 2. Still works.
I have an nVidia card, but it's rather old and I have not updated the drivers on it past a version that just seemed to cause occasional crashes. It works fine for what I need, and is somewhat disruptive to change. As a believer in the "leave it alone if it works" principle, and especially after this news, I'm probably not going to try any newer drivers now.
Absolutely reasonable if your windows box is used for mundane web browsing / programming and the occasional video, but that doesn't fly for a gaming machine; some games will exhibit bad performance or will plain crash with old drivers that don't incorporate the regular fixes/workarounds added by nvidia (and amd does it too).

There's a youtube video I fail to find where a nvidia driver engineer explains how many games are terribly broken, failing to respect OpenGL/DirectX basics. Drivers hand-patch that, just like Microsoft hand-patch Windows for specific games "because compatibility" [1].

[1] http://www.joelonsoftware.com/articles/APIWar.html

If you buy a game in october (Such as Battlefield 1) it wont even start if it finds your driver isn't the one shipped in October, together with the game. Basically AAA games these days are partly implemented in the drivers, and games have custom required tweaks for nvidia and and drivers.
As a longtime NVidia user I agree this is annoying, but it has been this way for a few years now.