texture's GL_REPEAT performance

Every time it draws a pixel it’s got to read a texel (at least 1) from the texture. It doesn’t read the texel from the texture memory directly, it reads it from a cache (small bit of efficient memory next to the ‘processor’). If the texel isn’t in the cache, it has to request the relevant bit of texture memory to be copied into the cache, and then continues drawing. As you can imagine, if you’re repeating the texture many times, it’s pretty much always having to fill the cache for each new pixel it draws, as the new texel is far away in texture memory from the previous texel. This is especially true if you’re not using mipmaps, because the texture you’re using takes up more memory, so the new texel is even less likely to be in the cache.
This is why you’re experiencing a slow down.