24-core CPU and I can’t move my mouse (2017)
randomascii.wordpress.com
randomascii.wordpress.com
But often, the mouse and keyboard will freeze and it becomes unresponsive for several seconds. This is indicative of suboptimal partitioning of the tasks into threads. The highest priority thread should be responding to user input.
Heck, back in the 1970s, I designed and built a single board computer that was to be a glass tty. There was no way to get that 6800 uP to update the screen fast enough to keep up with characters arriving at 9600 baud.
The solution was, whenever the user hit a key, to abandon updating the screen and process the character. Once that process was complete, and there were no more keys in the input, the screen updating was restarted.
It worked out great. You simply never noticed this was happening, and you always got crisp response.
I did the same thing for the MicroEmacs text editor on the IBM PC. If I hadn't, the editor would lose input and/or have noticeable lags refreshing the screen.
P.S. The importance of not losing input was necessitated by using ttys to transfer files across the phone lines and serial ports. You also couldn't touch type if the tty lost key input.
P.P.S. The Chrome browser that I use also has problems with freezing on keyboard input.
… but it has a habit of corrupting profile files on shutdown.
Data I/O's LogicPak (powered by a 6502) used polling, and would now and then lose data because of that. I advised the engineer working on it to just write an ISR. Months went by, while he was convinced he could make the polling work.
Finally, the manager dropped by and asked if I could just fix it. In a couple hours had it fixed with an ISR. No more problems.
Edit: and no, not with root or a "wheel"-User
The slower your imap the faster the freeze, Gmail works best.
The multitasking on Windows is ridiculously bad.
Also, applications that freeze and can't be killed/restarted are simply part of life on Windows.
Add to all that, Window slows down over time - again, the periodic reformat and rebuild is part of life on Windows. After I switched to Mac I didn't need to rebuild the operating system essentially ever.
Also, the registry - I think the worst idea in all computing. Prior to the registry you plopped a windows application in a location and configured it with an INI file. After the registry the entire operating system and all applications turned into one big ball of chewing gum, glue and hair dredged out of the shower drain.
How can Windows have got it so wrong?
My previous laptop was a similar Lenovo X1 Carbon with Debian and wow do I miss it, but I don't have too much of a choice since I do mobile app development :(
I swore that would be the last Apple computer I ever bought, but then they released the M1s… and they are very good.
Would recommend getting an M1 if at all possible. There’s still time to ask Santa for one.
Macs have famously-long usable lives — my sister uses a 7-year-old iMac, for example. The latest macOS Ventura supports Macs made in 2017. I'd be very surprised to hear about people using 2021 Framework laptops as their daily driver in 2026.
It's a bit odd to be saying this about pre-M1 Macs, as they were "just" Intel machines, same as everything else.
I've had 3 MBPs, every single one has had at least one issue, well before 7 years, usually around 1.5 to 2. The first two had battery recalls, the middle one had cable-gate, the middle one's display was also very temperature sensitive (it would have glitched lines artifact on the screen if the ambient temperature wasn't near 70F), the later MBP suffers from keyboard-gate and from constant thermal throttling. (Likely because the vents are choked with dust, but MBP's user hostile design prevents me from opening it up and pushing air through it, which is likely all it requires. They hate the user so much they used screws worse than Torx. I think they're Pentalobe, but don't quote me.)
My current Magic Trackpad is also highly temperature sensitive. The "click" will lock up at high temp. (I.e., the trackpad will fight you, if you attempt to click, if the ambient temperature is warm.)
> I'd be very surprised to hear about people using 2021 Framework laptops as their daily driver in 2026.
I'm using a Lenovo Thinkpad at about that age. (It is a 2017 model, so, 5 years.) The biggest thing wrong with it at present is it requires AC power. (The battery connection is bad. It lived through two bike crashes, though, and I suspect that's a side effect of it. I should see if that's repairable, one of these days, but I've put up with that for the time, as with COVID, it doesn't really travel much anymore.) The TrackPoint™ is also wonky, but I think that's because sunlight has chemically hardened the nib like an old eraser. I have more nibs… somewhere. I should look for them or order more…
> They hate the user so much they used screws worse than Torx. I think they're Pentalobe, but don't quote me.
Yes, Pentalobe: https://www.ifixit.com/Guide/How+to+clean+your+MacBooks+fan+...
An M1 Mac should last double that, easily - so long as you don't underspec it. My family has multiple November 2020 M1 MacBook Airs that are still working good as the day we got them.
It's probably not as good as an M1, but it'll last you more than two years
I don't disagree with the other positive aspects of the Framework, but my goodness -- where are you getting this idea that a Mac lasts only two years?6+ years is the norm for me on Macs.
However, I don't think I know how decreased battery life would lead to overheating?
Certainly, dust inside the machine will lead to overheating (or at least, more fan activity) over time. Coats the heat sinks, etc. Perhaps that's it?
I did get the battery replaced once, it was free. The screen got replaced twice, also for free (the second time they just did it when replacing the battery because the person at the Apple Store noticed a slight wear on the edge anti-reflective coating)
[EDIT] And when I do still run into trouble, it's almost always Electron chat apps. Slack, Teams, and Discord. All terrible at being respectful of system resources. Closing the program and restarting it usually temporarily fixes the problem, but that shouldn't be necessary.
That and also ultra-wide tabs which change in size as you close them with a middle click, which is really annoying and you sometimes close the wrong tab. Close them with the cross and they stay the same size and neatly collapse, you can even then middle click to close the remainder and they stay the same size. Silly difference in behaviour IMO.
It's the little things that put me off. Shame, as Passkey support is great.
A website could just run <download big json blob and append to array> in a tight loop and the browser has to try to make decisions on not hosing website performance if the user wants to actually use the crappy website while simultaneously not hosing battery/machine performance.
ff a decade ago would just randomly die on me within 2 days.
Even a lowly old i3 can encode videos with ffmpeg while you browse the web provided you start ffmpeg with a `nice -n 19`. On a Mac, it seems to be ignored.
Desktop distros switching to a more user-friendly scheduler, and loading a ‘small speaker’ EQ via Pulse on detecting internal speakers (= laptop) are two massive, low-hanging fruit improvements for Linux that just don’t seem to be done.
Most of the issue is that I have to fight with nvidia video drivers every month or two. Something happens and they stop operating and it grinds my entire system to a crawl when everything is software rendered. YouTube basically kills my computer.
When I go with Mac or Windows, the main feature is that they have designers to make more than a Potemkin UI, and they care about the end to end UX. No, “oh go complain to some other vendor.”
Ubuntu is very very impressive for free. I certainly acknowledge how great that is, and how important that is to the ecosystem.
Anyways, sorry about the rant. I’m calming down.
The fix was a reversion and then CLI install of the nvidia 515 drivers.
You can disable that too.
If you want a good Linux experience, you should look for hardware with first class Linux support. Likewise, good luck with macOS on non-Apple hardware--it's possible but ymmv
Thats a good description for many linux GUIs. They look like they can get the job done, but to really get the job done, you have to use what the developers of said UI likely themself use - the terminal.
It feels like a lot of the UIs in Ubuntu are there just so they can claim it’s an OS that can take over for Windows or Mac.
Are you saying Windows has fixed all these problems?
The registry is still there.
I do actually have some Windows machines I use sometimes and recall thinking "still the same" but I can't say that as a hard core user, so I'd be interested to hear if Windows is now a sleek, reliable multitasker that instantly kills dead applications. Nothing will make me OK with the registry and the general mess of Windows though - it's like a house someone hasn't properly cleaned for 40 yeaes.
From my own personal experience, no. My machines can become unusable from a simple Windows Update.
But if you think the registry could be replaced with .ini files like the good ol' days, that's a pretty extreme hot take. If you're open to changing your perspective on what the registry is for, how it is designed, and why it's necessary, read any of the Windows Internals books.
Group policies have replaced the registry for advanced configuration of the OS. The only time I’ve needed to change the registry is for dealing with poorly written, old drivers, which are becoming more rare as Microsoft’s standards for getting a driver signed are becoming more stringent.
My windows install is from 201*, it was an upgrade from win7, and switched from an i7 to a ryzen. I do clean out the registry/startup/task scheduler on occasion.
The early 3rd century was the best era for Microsoft with Windows Severan.
Note: the other day I read ICL mainframes had specialized instructions to deal with pre-decimal pounds.
(Before decimalization, there were 12 pence in a shilling and 20 shillings in a pound. Mathematical operations on currency were both difficult and extremely common, so IBM provided hardware support as an option. There were boards of transistors so you could add, subtract, multiply, or divide currency values with a single operation, rather than an inconvenient sequence of instructions.)
Photos in my Twitter thread: https://twitter.com/kenshirriff/status/1364365985499602947
To get back to the original topic, I'll mention that my MacBook Air would drop keystrokes if I visited a website with, say, a video ad. I find it kind of appalling that computers in the 1960s could handle input from hundreds of keyboards at once, while a 2017 computer can't manage a single keyboard.
In the defense of your Mac, computers of the 1960's had terminal controllers for dealing with the communications. And 3270's were like web browsers - getting a form, sending the data back, getting another one - an excellent design for avoiding hardware interrupts ;-)
But yes. I've seen 370's with a good couple hundred 3278's connected and that thing was still quite snappy, even though the CPU in my watch can run rings around it. I guess even two VT330's would stress my current laptop if I could type on two keyboards fast enough ;-)
They seem to have sunk without a trace.
no registry cleaning, only cleaning temp files with built-in app in Settings
The difference to me is that I as a power user might be able to fix it myself in Linux but by only using the tools normal users know of I must say I cannot recognize that this is a weak point in Windows today. Clicking the X to close an app and getting stuck with a dead app is much worse in, say, Debian than in Windows.
With that said.. I don't use Windows where I have a choice but that is mainly for philosophical reasons these days. Mac I don't touch. I feel it is the worst of both camps.
Have you seen anything in Linux that you can't kill with "kill -9"?
The process may well never exit that state, for example if the I/O it's waiting for is actually over a networked filesystem and the NIC is misbehaving.
Regular users don't understand CPU quotas. It should be done by default. The current behavior on Windows/Mac/Linux of allowing a program to make the machine uncontrollable is poor.
I don't disagree on the current approach though. If I start a, say, long build job from a terminal window, I have control over the resources it can take. If, OTOH, I start a program from the GUI, it's reasonable to assume I want it to have full control, at least while it has the focus.
Now, letting the GUI dynamically renice non-focused processes would be very nice.
You had it right with nice - phones and tablets and consoles and cars have it right with their techniques. Apps shouldn’t be able to make the system unusable by default.
By themselves, no, but there are limits to how many cores a workload can keep fed. You'll see declining returns at high core counts (which is one of the reasons we don't have Xeon Phis these days).
In Linux, no doubt there's alot to get your head around, but I've never found things to be a giant pile of spaghetti. The challenge Linux has is there's a bajillion ways to do things so you have to be pretty experienced to feel confident crawling around the tunnels and ventilation ducts.
To be honest (and I'm aware that I might be tarred and feathered for this) I kinda prefer the centralized Windows registry to the "random assortment of config files" approach that Linux has. I think both Windows and Linux give you that feeling of carefully crawling around in ventilation ducts once you get your hands dirty; I doubt it's possible to get rid of that without getting rid of the inherent flexibility that the systems provide. There's a reason Windows has both the registry and the Settings app.
Linux has various useless options like sysreq shortcuts that you can't remember and kill random processes, and I don't think Mac has anything, though to be honest I don't recall ever bringing a Mac to its knees so much that I couldn't open a terminal and run `top`.
Ah, it's in the options menu on the task manager itself (alt + O to access the menu without a mouse).
Full io access and unlimited kill power, far better than ctrl alt delete...
Any regressions in this area I blame on systemd, which I think runs on cpp, so you know I blame cpp... (kernel is written in c, windows got a bit better when they used c# instead of cpp, Mac never used cpp...everybody kill cpp, quick)
That said, my home PC works since 2018 (buy date) and one at work since around 2016. Only used these backups once to move OS to a new SSD.
Most failures happen when you have no backups, so have at least one to make your system failsafe!
The raison I just ditched Fedora for ubuntu...
The raison I ditched MacOS for Windows is that MacOS is slowly but surely becoming a magnified version of iOS... One day you will have to jailbreak if you want administrator rights on your ~~personal computer~~ Macbook.
During the typing of the comment, Safari locked up and then hard-crashed, losing my comment.
If that happens on something as tightly-controlled as iOS, how many bugs and crashes do you think macOS and it’s apps experience?
The main difference between macOS and Windows or Linux, I’d say, is that bugs on macOS are more submarine. Windows also has much stronger recovery mechanisms, to the point where a GPU crash barely phases it. A GPU crash on macOS will hard-reboot the system and possibly show you a ‘:-)’.
I’m not sure what “multitasking is bad” means, but I do a heck of a lot of multitasking on windows every day with resource intensive developer tools with no problem, and have been doing so for over a decade.
Apps can be killed via task manager without doing anything special. You might run into an occasional rare bug where explorer freezes so you can’t open task manager, but I can’t recall the last time it happened to me (and you can’t tell me with a straight face the Linux or MacOS are completely free from wild edge case bugs of that sort).
I used to religiously reformat and reinstall windows. It’s been completely unnecessary since at least Windows 7. My personal desktop ran from 2014 to 2021 on the same install, including a Win7 -> Win10 upgrade.
You certainly may not like the registry, but it’s hard to make a compelling argument that it’s been a source of problems since Win7. To be honest I think all of the registry problems I can recall seeing in the last decade were caused by people being sucked in by “registry cleaner” scamware/malware apps claiming to fix non-existent problems.
Sorting in "Processes" tab locks up the UI and my mouse won't even move for seconds. Other apps work fine. Webstorm and Intellij work fine...
Do you think I should consider making it a priority to code in a fairly low-level programming language (e.g. Rust) without overhead, and count cycles so that most tasks are done within a single screen refresh?
I can't make the rest of users' systems more responsive but I could make my own software as fast and efficient as possible.
The other alternatives are Python, which would make it easier to ship large features but would come with a large overhead (full interpreter) since it's an interpreted language.
Sometimes not though, like startup times, but there is not so many use cases that this counts, like 1password starts slower with each release.
EDIT Not many hackers on hackernews apparently.
Holding your own code to a high standard is great, but wouldn’t it be nicer if you could offload more of that into the tooling and spend more time on the problem or making the code even cleaner?
Also as a side note: I always find it funny that a flag that represents all warnings doesn’t actually turn on all warnings.
C also has the advantage that there are many, many different compilers targeting many, many, /many/ different architectures. My own favourite is VBCC, which is lightweight enough that I was able to write my own backend for my own toy CPU project, and even build the entire toolchain - assembler, linker and compiler - under AmigaOS.
For the remotely hosted dependency thing, I think it’s pretty easy to vendor dependencies in most realistic C contenders, and a really simple litmus test is just yanking your network cable and doing a fresh build.
The ecosystem thing can be a bigger deal, but again it really depends on the problem domain. There are lots of high quality, non-C libraries for C to always be a clear winner. I think it’s more important to take a step back and make sure whatever language you pick is well suited to the task, rather than assuming any individual one will always be. Knowing multiple languages is handy for this, since that’s more ecosystems that you can pick from, rather than just tying yourself to a single one.
Yes, absolutely - and of course C isn't immune to ecosystem problems, either. I remember the pain of working with GNU autotools back in the mid 2000s - in fact it's probably that experience (plus trying to use bleeding-edge tools written in Python!) that left me so cautious about external dependencies today.
VBCC's backend interface is well documented, which helps a lot - and there's a skeleton "generic RISC" backend which is trivial to copy and use as a starting point - I found it very useful to be able to tweak a working backend and observe how the generated code changes, while I was getting a feel for how it all hangs together.
VBCC does have an unusual license, however - commercial usage requires permission from the author.
Some languages (e.g. Haskell) make it easy to write code that does more computation than intended. If you use one of these languages, make sure you know what you’re doing.
If you use a language with a truly horrible GC, you might experience excessively long pauses. Similarly, if you produce too much garbage, you might have issues.
If you use a language that can’t multithread properly (sigh, Python), moving tasks off thread is a mess.
Otherwise, one can write perfectly responsive software in just about any language.
Maybe. Premature optimization is said to be the root of all evil...
But at the same time - the assumption that everything will be easier and faster in Python rather than Rust or C++ is often invalid. Sure, for smaller scripts it almost always is like that, but once your app grows, this may stop being the case.
Start with a language that's convenient for you and with which you can release an initial version. Then get an understanding how it behaves in terms of performance, and draw your conclusions.
> as fast and efficient as possible.
Responsiveness is not the same as speed or efficiency. Of course it's important to be fast and efficient, but it is even more important to not just start crunching numbers and ignore the user and the rest of the system.
Do your hard lifting asynchronously and have a thread attending to user input and your UI (or even different threads for these two tasks). And this is easier said than done!
Also remember you'll have to try and work around delays and slowdowns due to other apps and the (non-realtime) OS. Specifically, you might have to play with thread scheduling and I/O priority (although - that's usually the user's rather than the app's job).
Additional notes:
* Also consider C++; it has some advantages and disadvantages relative to Rust (which I obviously will not get into), but it has seen a whole lot of progress in recent years, in particular w.r.t. the ease of doing many things which used to be painful.
* If you think of Rust as low-level, then your head must be in the clouds... :-P
The full quote, because it always gets butchered to "premature optimization is the root of all evil":
Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.
In the 70s you might've needed a reason like optimisation to commit evil. These days apathy and cargo culting do it perfectly fine without optimisation even coming into the picture.
Most folks want web, email, images, and even a bit of security from their computer today. Could always be faster, but I think the days of "bam!" ready are past due to those requirements. Unless the computer is only sleeping, like an iphone for example.
Now with windows 10 on a much faster pc, clicking apps like Firefox, the start menu, word take seconds to load.
I recently fired up my windows 7 VM to mod an old game console and it was exactly how I remembered. You click something and it's instantly opened.
Sure, but a modern computer also has orders of magnitude more processing power than devices that only ran a command line. There is no reason that we cant have both, except incompetence and/or bad economic incentives.
For example, properly displaying text now requires having a copy of at least the most important parts of the Unicode standard in memory. Things like knowing if a character occupies one, two, or many character cells are very important for even a simple text terminal. Word splitting, kerning, shaping, bi–directional text display, the number of possible refinements grows without bound and all of them need metadata about each and every character. Your average web browser has megabytes of the stuff just sitting around in memory so that it is ready as soon as a character has to go up on the screen. Older computer just didn’t have that kind of memory to spare.
If you want the old–school experience you can still boot straight into the Linux Console, which still thinks that there are only 256 characters. It seems to be reasonably snappy.
I suppose you could put a ton of OS and libraries in a (modern equiv of EEP)ROM for immediate access. The original Macintosh was kinda like that. But things went the other way when disk storage dropped in price a lot faster than chip storage.
Maybe we're back to a point where the former is economically viable, but there would be a lot of historic baggage to overcome.
(a) issued an async read
(b) did some computation
(c) used the buffer filled in by that async read
... without actually seeing if the read completed. Hilarity ensued when the CPU got faster. This was in stuff that shipped to hundreds of thousands of customers.
If you're having a good day, you can definitely address that problem by reading device drivers for a few hours.
Macs today sleep like Windows machines a decade ago
I guess when manufacturers want to do something well they really can integrate everything.
When I was younger and my family had our first internet connection my dad said "One day internet webpages will load like changing channels on the TV - click click click. instant page loads"
Today TV soo much slower and webpage are... well... you know.
Reading a tape? That took several minutes.
It just dumped you into a prompt though, and loading any program was really quite painfully slow.
A modern bios goes through more cycles during the boot phase of a typical machine than a C64 would see in its entire lifetime.
https://www.pcgamer.com/this-theory-suggests-wiggling-the-mo...
> But the main thing I always realize when using this technique is that modern CPUs are weird and confusing. Because CPUs are massively out-of-order and super-scalar it is not at all clear what it means for a sampling interrupt to hit “on” a particular instruction. If an instruction is particularly expensive then samples are more likely to hit “near there” but I’m sure where “near there” actually is:
> If there are three instructions executing simultaneously when the interrupt fires then which one “gets the blame”?
> If a load instruction misses in the cache and forces the CPU to wait then will the samples show up on the load instruction, or on the first use of the data? Both seem to happen.
> If a branch is mispredicted then will the samples show up on the branch instruction or on the branch target?
> What’s going on with the expensive cmp instruction on line 24 of the spreadsheet?
> If anyone has a good model for what happens to the CPU pipelines when a sampling interrupt happens I would appreciate that. Ideally that would explain the relationship between clusters of samples and expensive instructions.
I have a distinct memory of reading a blog post probably 5-ish years ago where someone did just that. The author started with some microbenchmarks of very tight loops, and used some sort of profiler/perf counter tool that measured hit counts for each instruction of the loop. Then, they went into a deep dive into analyzing the instruction throughputs and latencies and dependency chains to demonstrate how bottlenecks at the CPU level manifested as clusters of samples, and how to use this information to optimize the loop.
Does anybody else remember this post, and possibly where I can find it? I’ve been in a couple situations where it would have been tremendously helpful, but I just haven’t been able to dig it up.
Probably SumatraPDF is a lot faster because can't do all of those fancy things, but for reading a document and look for some keywords it's absolutely fantastic, and I don't need something better in 99% of the time.
We even see it now, sometimes called "hardware cursor" in various games settings, althought pipeline is much longer.
Just that old small hardware had little to no memory protection and very tight integration so stuff like that could be done directly instead of going thru many layers of abstraction
I wonder if anyone ever sold a "software optical mouse".
You could if you really want to...
https://8051enthusiast.github.io/2020/04/14/003-Stream_Video...
Is this true on modern Linux DEs (e.g. on KDE Plasma)?
Is it also true on Windows and macOS?
I tell my QA people all the time: If you come to me with "I think" or "I believe", it sounds like you've got some reading to do.
If you want to know my epistemic status: I know about windows based on observable surface behavior and bugs related to accelerated cursors, but I haven't looked at the source. I know about wlroots because I saw the pull requests related to that and a flag to disable it in sway. The last statement regarding other platforms was an educated guess based on gfx card history: accelerated overlays are an ancient feature present in a lot of hardware, not some newfangled niche feature.
And I'm not one of your QA people.
The most I could get was to ask it to take an avuncular tone, at which point it did ask you to "spill the beans, kiddo" about these compositors. :)
(Unless you go back to the late 8-bit era where the cursor might be a just a hardware sprite that can be moved around by writing a few bytes.)
Which... yeah, that actually might be true.
this already happens, just after some laughably long chain of unprocessed input events
• part 1: https://randomascii.wordpress.com/2018/08/16/24-core-cpu-and... https://news.ycombinator.com/item?id=17780127 (313 comments)
• part 2: https://randomascii.wordpress.com/2018/08/22/24-core-cpu-and... https://news.ycombinator.com/item?id=17824575 (99 comments)
24-core CPU and I can’t move my mouse - https://news.ycombinator.com/item?id=14733829 - July 2017 (499 comments)
I would assume that on win10/11 (this was a while ago) it is harder to saturate a modern machine, though, especially if you lower the i/o priority of your process.
"The patch being talked about is designed to automatically create task groups per TTY in an effort to improve the desktop interactivity under system strain."
"Tests done by Mike show the maximum latency dropping by over ten times and the average latency of the desktop by about 60 times."
The UX is as hangy as the laggiest component.
That means if the Windows programmers decided that it needs to wait for every HDD to spin up to show you the contents of your start menu you're gonna have a bad time.
Back in the days of P/S 2, where input was interrupt driven, the background tasks would be interrupted by input coming in, ensuring the user could move the mouse around. Now whether they could get the outcome of a click to register is a different story. The click would, but there'd be no guarantee the click handler would execute before background processing resumed, because it'd be considered an event that'd get scheduled after whatever is currently starving the CPU thread.
Not that interrupt based input processing didn't have some advantages. Just this shouldn't be one of them.
I can't think of a good principled reason to say SMT cores aren't "real".
I'm assuming the answer isn't "because they share some computing stuff". What I think you'd call "real" cores also share resources like L2/L3 caches, sometimes DMA engines, etc.
And IIRC, each Intel SMT (hyper-thread) unit has its on instruction pointer and (non-SIMD?) register set.
I believe the SMTs share the register rename storage, which I'd say is the register set more than the 'architectural registers'
But I'd say the reason they're not real is because they don't increase the maximum instructions per clock. With many loads, they do increase the average instructions per clock, but they don't let you do anymore work if you've got a fully tuned load that uses all the computing resources.
If cache contention weren’t a problem, and it was just a matter of jumping into previously unseen instructions and data (cold cache), you’d expect to see 50-300% numbers from hyperthreading, precisely because of how long the stalls are.
So "real" or not but from my experience HT does work to the benefit.
And in these days of post-Dennard scaling, you have thermal throttling, so idle cycles aren’t actually idle, they’re allowing the heat sink to catch up with heat production.
It really depends on your definition of "real", yes you can treat them like "real" independent cores but that's not ideal for performance because under the hood they're not actually independent. Your operating system is aware of this and will often avoid scheduling two tasks onto the same physical core unless it has to. If you have 20 logical cores (10 physical ones with hyperthreading) and 10 tasks to execute, the OS scheduler will usually allocate one task to each physical core and leave the other logical core idle.
I had just upgraded to an i7-3770K (8 threads, 4 cores) from a Core 2 Quad (4 threads, 4 cores). I did a POV-Ray render several times using 1, 2, 4, and 8 threads. 2 was nearly double the speed of 1, 4 was nearly double the speed of 2, but 8 was only about 15% faster than 4.
To ensure I wasn't bottlenecking RAM at that level, I tried again with 2 threads, but forced both threads onto a single core, and it was only 15% faster than 1 thread.
That was all the proof I needed of how you really can't treat two CPU threads as two cores.
That said, I've never personally found an instance where allowing a processes to span all CPU threads actually reduced performance, and I'm not sure I've ever seen a real-world case where it does. It's usually something contrived.
I liked the idea of the i7 because without HT you have a real picture of how utilized your CPU is. If it says 100% on a core it's 100%. I ended up going with the i9 though when a promotion was too good to pass up.
When I got it I ran Cinebench both with and without HT enabled in the BIOS and it made a decent impact so I left it on.
SMT is designed to hide memory load latency. In this use case it is completely brilliant. You will get 2x speedups with hyperthreading when randomly accessing memory.
...unlesss you access so much memory (while doing relatively little compute on each piece) that hyperthreading just causes more cache invalidation.
This slowdown of each thread may not matter, or it may lead to increased latency.
TL;DR - when both hyperthreads in a core are in use it is highly likely that each one is running significantly slower than if only one was in use.
HT is an opimization to context switching but if your code running on both utilizes different parts of core (say one loads some memory while others does some math), you can get speedup that's above savings from not having to context switch.
But early on it wasn't really that well optimized so you might've had OS put 2 threads on 2/1 HT/core while other core sits idle
And if you can asynchronise separate CPUs, you can do it in separate threads on one CPU.