I made today simple script to estimate size overhead due types duplication. This is hard task for C++ - bcs some types can have specialized (or partially specialized) template parameters and sure this types should be considered as different. But for plain C we can safely get all high-level types and assume that types with the same name and declared at the same line and column are equal
Next I ran this script on objdump -g dump for linux kernel. Script gave me digit 252741370
Lets find size of .debug_info section
objdump -h vmlinux | grep debug_info
Size is 0x118205ec = 293733868
35 .debug_info 118205ec 0000000000000000 0000000000000000 03037230 2**0
And finally lets calculate share of unnecessary info: 252741370 / 293733868 = 0,8604
I am shocked - 86%!!! Looks like hd manufacturers conspiracy