SSD's will wear. SSD's will do wear-leveling regardless. TRIM is simply a means to reduce wear and make wear-leveling more efficient. TRIM is only one method, over-provisioning another. If we're required to use a non-trimming OS we could compensate for that to a degree by setting aside more over-provisioned space.
Issue is, SSD's need 'free blocks' to store new data. IOW imagine LBA 1000 keeps part of a file, you update the file, and now the SSD has to find a new spot for LBA 1000. It does so by finding a free spot, write the new data there, and 'map' that spot to LBA 1000. It now knows the spot previously mapped to LBA 1000 can be erased so it becomes part of available free spots for future data.
TRIM
Now assume we delete the file that occupied LBA 1000. This is an OS / file system level operation and the SSD has no way of knowing it can now erase the spot that was mapped to LBA 1000. And this where TRIM comes in. TRIM is a 'command' that allows the OS to tell the SSD "I'm done with LBA 1000", and so the SSD can now proactively prepare the spot that was assigned to LBA 1000 for future data.
No TRIM
Without TRIM the only way of 'knowing' for the SSD that something happened to the data in the spot it mapped to LBA 1000 is once we write to it again. So, in Windows you create a new file and it ends up being written to LBA 1000, which as far as the OS is concerned is free (the cluster mapped to LBA 1000 is free). Since we write new data the SSD maps a new spot to LBA 1000, and the previous spot is now available for the garbage collector that will erase it and make it available for future data.
In itself there isn't a fundamental issue with the no TRIM method. However, lack of TRIM would leave us with a bunch of spots that OS knows to be available while the SSD is not.
The problem
And this can become somewhat of a problem: The SSD can not just erase spots as we've called them until now. It can only erase a bunch of spots that all belong to the same erase block at the same time.
So it can happen the spot at LBA 1000 is discarded because OS delete data in this spot while the spot at LBA 1001 is not. And if both spots happen to be in the same erase block the fact LBA 1001 contains valid data while LBA 1000 does not, prevents LBA 1000 from being erasable. The SSD would first have to move the data from LBA 1001 to a different spot.
IOW the SSD need space 'to breathe', to shuffle data around, to consolidate used spots and thus unused spots so it can erase the latter and prepare them for new data. The less breathing space, the more the SSD has to shuffle to consolidate free erase blocks and in-use erase blocks. The more shuffling, the more wear.
Over-provisioning
TRIM is one means to provide the SSD with space to breath, over-provisioning is another. Over provisioning simply means setting a bunch of spots aside. If we have 1000 LBA spots and we set aside 10% of those, we will always have 10% of breathing space. The cost is that we now only have 900 LBA spots available for the OS to write to, to use.
Note that SSD's have set aside a percentage of available capacity for over-provisioning regardless.
Using SSD's with non trimming OS
Since XP does not 'TRIM' we could create more space to breathe by increasing the amount of space we set aside for the SSD to do it's thing. Some SSD's come with tools to do that (by creating a so called HPA), so that's one option to accomplish this.
In essence you can accomplish the same by simply leaving some space on the SSD unpartitioned. So what I propose would look something like:
- If SSD is not brand new we might first tell it to TRIM entire disk space using something like DiskTrim for Windows - https://github.com/tenox7/disktrim.
- Now during part of setup process or in advance partition the drive, but leave 20% unallocated. It's up to you whether you want to sacrifice more space, you can leave 40% unallocated if you wish.
- Install Windows XP.