You would want to get the actual buffer duration used. When you set the buffer duration, it is only a suggestion on your preferred value. The audio system will typically choose something close to the value you set. The reason it does not always listen is because the values it chooses are typically based on powers of 2 and your sample rate. So just because you set it to 0.005 does not mean it will actually use 0.005. Query the actual value used after you set your preferred value.
// set your preferred duration
Float32 aBufferLength = 0.005; // In seconds
OSStatus err = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(aBufferLength), &aBufferLength);
// now get the actual duration used
UInt32 size;
Float32 bufferDuration;
size = sizeof(bufferDuration);
err = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareIOBufferDuration,&size, &bufferDuration);
NSLog(@"The actual buffer duration used is %f",bufferDuration);